1.默认值参数后的所有参数都必须是默认值参数,直到遇到任意参数列表
3.默认值在函数定义范围内的函数定义点被评估
def f1(a = 2 ,b = 3, *c或**c):默认值参数后的参数必须都是默认值参数,直到遇到*/**(即可变参数)
print(a, b, c)
f1(4, 6)
输出:
3 4 ()或3 4 {}
2.默认值参数,传递新参数会覆盖该函数本地符号表中的值,不传递则使用默认值
3.默认值在函数定义范围内的函数定义点被评估
i = 5
def f(arg=i):
print("arg = ", arg)
i = 6
f()
arg = 5
# ***对比自由变量名解析: 自由变量名在运行时解析,不是在编译时期***
i = 10
def f():
print("i = ", i)
i = 42
f()
i = 42
4.默认参数仅在函数定义完成后被评估一次
def f(a, L=[]):
L.append(a)
return L
print(f(1))
print(f(2))
print(f(3))
输出:
[1]
[1, 2]
[1, 2, 3]
5.使用下面的方法可以避免默认值被后续调用共享
def f(a, L=None):
if L is None:
L = []
L.append(a)
return L
print(f(1))
print(f(2))
print(f(3))
输出:
[1]
[2]
[3]
更新 2017年11月6日00:09:52
1.默认值参数说的是声明函数时的形参形式
2.关键字参数说的是调用函数时的形参的形式