Python入门之Python函数
2020-06-28 14:44:40 来源:易采站长站 作者:易采站长站整理
默认参数必须指向不可变对象。Python 中
默认参数必须指向不可变对象 的原因是
默认参数的值有且仅在函数定义时计算 1 次,这是
Python 中非常容易踩坑的地方,我们看下面这例子:
i = 5def f(arg=i): # 定义函数时,arg 的默认值设为 5
print(arg)
i = 6
f()
输出结果:
5
如果我们把默认参数指向了不可变对象,会出现什么情况呢?看下面这个例子:
def f(a, L=[]):
L.append(a)
return Lprint(f(1))
print(f(2))
print(f(3))
输出结果:
[1][1, 2][1, 2, 3]
我们发现输出结果并不是
[1]、[2]、[3] 。我们设置了
L 默认参数:
L=[] ,可为什么
L 还会存储之前的调用结果呢?这是因为在 Python 中,
默认参数值 在函数定义的时候就会被计算出来,并且
默认值只会被计算一次,后面的函数调用都不会再对默认参数重新赋初值。这里默认参数
L 在定义时,值被计算出来,即
[],因为参数
L 也是一个变量,指向了一个可变对象
[],每次调用该函数,如果改变了
L 指向对象
[]的值,则下次调用时,默认参数的内容就变了,不再是函数定义时的初值
[]。所以上面的例子我们改写如下:
def f(a, L=None):
if L is None:
L = [] L.append(a)
return Lprint(f(1))
print(f(2))
print(f(3))
结果输出:
[1][2][3]
关键字参数
关键字参数(keyword arguments) 是指调用函数时用
kwarg=value 的形式传入函数参数,其中
kwarg 就是
keyword arguments 的缩写。我们拿前面位置参数的例子来展示关键字参数:
# 定义一个函数,实现打印个人信息的功能
def my_Info(name, gender, age):
暂时禁止评论













闽公网安备 35020302000061号