默认值参数
def add_end(L=[]):
L.append('END')
return L
print(add_end([1, 2, 3]))
print(add_end(['x', 'y', 'z']))
#上面的两次调用add_end函数没有问题,
print(add_end())
print(add_end())
#不传入参数,L指向一个内存地址,不传入参数内存地址是不变的,第一次追加'END'所以L = ['END'],下次再调用add_end(),在['END']后面追加'END'就变为了['END', 'END']
原因解释如下:
Python函数在定义的时候,默认参数L的值就被计算出来了,即[],因为默认参数L也是一个变量,它指向对象[],每次调用该函数,如果改变了L的内容,则下次调用时,默认参数的内容就变了,不再是函数定义时的[]了。
可变参数:
def test(*args):
print(args)
test(1,4,7)
test(*[5,6,9])
关键字参数:
def test2(**kwargs):
print(kwargs)
print(kwargs['name'])
print(kwargs['age'])
print(kwargs['sex'])
test2(name='alex',age=8,sex='F')
test2(**{'name':'alex','age':8,'sex':'F'})
下面这些都是错误的:
def test(x,y=2,z):
print(x)
print(y)
print(z)
#函数定义关键参数字不能放在位置参数前面,xx=x 这种形式的都是关键字参数,y=2就是关键字参数
def test1(x,y):
print(x)
print(y)
test1(y=2,1)
test1(x=1,2)
#关键字参数不能放在位置参数前面,y=2,x=1都是关键字参数
def test2(*args):
print (args)
test2(x=1)
#不能传入关键字参数
def test(x,y):
print(x)
test(2,y=3,x=1)
#不能为参数x赋予多个值
默认值参考;
https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431752945034eb82ac80a3e64b9bb4929b16eeed1eb9000