1.位置参数
#定义函数,并给函数设置三个参数
def func(a,b,c):
return a,b+c #调用函数后的返回值
f=func('ok',[1,2,3],1) #给函数的参数给定具体的值,并调用函数,把变量f赋值给该函数的返回值
print(f) #以元组的形式把多个返回值结果进行保存
2.默认参数
#默认参数必须在位置参数后面
#定义一个位置参数和默认参数
def func(a,b=1):
return a*b
f=func(2) #这里只需要给位置参数指定值就可以了,要设置也可以重新指定值,会覆盖默认参数给定的值
print(f)
默认参数设置为可变参数
def func(a=[]):
a.append("A")
return a
print(func()) #第一次调用函数时,默认参数为a=[]
print(func()) #第二次调用函数时,默认参数已经变成了["A"],因为第一次调用时修改了a变量对应的内存对象
print(func()) #第二次调用函数时,默认参数已经变成了["A","A"],因为第一次调用时修改了a变量对应的内存对象
默认参数设置为不可变参数
def func(a=None):
if not a:
a=[]
a.append("A")
return a
print(func()) #第一次调用函数时,默认参数为a=None,判断a为空时,会重新创建一块内存空间给空列表,然后键A元素添加至新的内存空间的空列表中,此时的a变量指向的是新的内存对象,默认的a变量还是指向原来的None值内存对象
print(func()) #第二次调用函数时,默认参数还是a=None,这个是不可变对象,所以值一直没变,第三次也一样
print(func())
3.指定参数名赋值传递参数
def func(name,sex,tel):
return name,sex,tel
f=func(sex="女",name='lucy',tel='888888') #这里指定参数赋值,顺序可以随意
print(f)
4.动态函数
#优先级顺序是这样的
顺序参数>*args>默认参数>**kwargs
def func(name,*args,age=20,**kwargs):
return name,age,args,kwargs
f=func('tom',20,1,smaillname='dog')
print(f)
#*args(把实际参数打包为元组传入形式参数,列表则以一个参数传入)
def func(*args):
for arg in args:
print(arg)
func(1,2,3)
#**args(接受键值对的动态参数,把实际参数打包成字典)
网友评论