参数,装饰器

参数:
若函数中所实现的需求涉及到一些未知项参与运算[这些未知项需要函数的调用者来决定]
此时,可以将未知项设置为参数.

位置参数[必备参数]
传递参数的顺序与定义的顺序有关,必须按照定义的顺序来进行传递.
传递参数的个数与参数的个数必须保持一致.

关键字参数:
指函数调用的时候,可以通过"键-值"的形式来加以指定,可以清除位置关系.

当出现位置参数与关键字参数的时候,需要将位置参数写在关键字参数前面

默认参数
定义函数的时候,我们可以给参数提供默认值,调用函数的时候可以传递此参数
可以不传,当传递此参数的时候,函数则使用传递的参数,若不传递则使用默认值
优点:方便函数的调用
注意:
1.若默认参数与位置参数同时存在的时候,位置参数要写在默认参数的前面
2.给定默认参数的时候,默认参数需要指向不可变对象.

不定长参数
定义函数的时候,我们不确定调用的时候会传递多少个参数进来[可能一个也可能多个]
此时我们可以使用不定长参数来解决[不定长参数有包括包裹位置参数与包裹关键字参数]
特点:能处理比生命时候更多的参数[传递多少个,处理多少个,不传递不处理]

不定长参数分为两种:
1.包裹位置参数
使用:* 变量名 一般用*args
功能:可以收集除了必选参数意外剩余的位置参数,按照元组来进行处理
2.包裹关键字参数
使用:** 变量名 一般用**kwargs
功能:收集除定义的变量的关键字参数之外,剩余的关键字参数.
包裹关键字参数只处理剩余的关键字参数,收集作为字典来处理.

注意:当位置参数[必选参数],默认参数,包裹位置参数,包裹关键字参数同时存在的情况下
顺序一般为:位置参数,默认参数,包裹位置参数,包裹关键字参数,默认参数与包裹位置参数
可以根据需求调换位置

万能函数
def func(*args,**kwargs):
pass

‘’’
def info(name,sex,age=6,city=“深圳”):
print(“姓名:%s,性别:%s,年龄:%d,城市:%s”%(name,sex,age,city))
info(“哈哈明”,“半”,city=“武汉”)

def maxx(*args):
if len(args)>=2:
maxnum =args[0]
for x in args:
if maxnum<x:
maxnum=x
return maxnum
print(maxx(1,2,4,5,3,1,4,2,6,7,4))

def paixu(*args,reverse=False):
args=list(args)
for x in range(1,len(args)):
for y in range(len(args)-x):
if args[y] > args[y+1]:
args[y],args[y+1]=args[y+1],args[y]
if reverse:
return tuple(args[::-1])
else:
return tuple(args)

def paixu(*args,reverse=False):
args = list(args)
args.sort()
if reverse:
args.reverse()
return tuple(args)
else:
return tuple(args)

匿名函数:
定义:指的是一类无须定义标识符[函数名]的函数或者子程序.
在Python中定义匿名函数适应lambda来进行定义.
语法:
lambda 参数列表:表达式
特点:
1.lambda后面跟的只是一个表达式,结构体比def的简单.
2.参数列表可以有多个参数,参数与参数之间使用逗号隔开
3.无须写return,表达式的结果就是该表达式的返回值.
优点:
1.结构简单
2.匿名函数没有名字无须担心函数名的冲突.

匿名函数的调用:
将lambda表达式赋值给一个变量,通过调用变量来调用我们的匿名函数
func = lambda a,b: a if a>b else b

zip函数
zip(iter1,iter2,…)
功能:打包,将可迭代对象中对应未知的元素进行打包,长度取决于最短的那个.
返回zipobj打包好的对象,以迭代器的方式返回
zip(*zipobj)
功能:将之前打包的元素进行解包处理,以迭代器方式返回

装饰器:
在代码运行的期间,动态的增加功能的方式.

最简单的装饰器:
def outer(func):
def inner():
# 增强的功能
# 在内函数中执行func函数
return func()
return inner

在装饰器中,分为外函数与内函数:
外函数(outer):
1.将被装饰的函数传递进来–>func
2.将装饰好的函数返回给调用者–>inner
内函数:
1.添加动态增加的功能
2.执行被装饰的函数

内函数中的return什么时候可以省略?
注意:当被装饰的函数没有返回值得时候,内函数的return可以省略.
若被装饰的函数中存在返回值,则内函数的return不能省略.

@装饰器
def func():
pass
@的功能:将被装饰的函数的函数名作为参数传递给外函数,将外函数返回的替代版的函数
赋值给原本的函数
‘’’
def outer(func):
def inner():
print("*********************")
func()
print("*********************")
return inner
@outer
def now():
print(“2019-6-13”)
now()
‘’’
复杂的装饰器
def outer(func):
def inner(参数列表):
#添加增加的功能
return func(参数列表)
return inner
注意:
1.使用内函数来接收被装饰函数的参数
2.调用被装饰的函数的时候,需要将参数传递进去.

‘’’
def money(func):
def inner(mon):
if mon.startswith("+")and mon[1:].isdecimal() or mon.isdecimal():
return func(mon)
else:
print(“金额有误”)
return inner

@money
def getmoney(mon):
return int(mon)
print(getmoney(“123”))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值