- 默认值只有在最新定义的时候被评估一次
-Example 01
A=10
def myfun(a=A):
print(a)
A=20
myfun()
print(A)
结果
10
20
- Example 02
A=10
A=[0]
def myfun(a=A):
print(a)
A=[1]
myfun()
print(A)
结果
[0]
[1]
- 如果默认值使用的是列表之类的可变数据类型,那么会在多次调用之间共享默认值
def myfun(b,a=[0]):
a[0]+=1
res=b+a[0]
print(res)
myfun(1)
myfun(1)
myfun(1)
结果
2
3
4
-
闭包函数:当内部函数调用时依然能够使用外部的变量值
-
Example 03
def myfun(a):
def mynest(b):
return a+b
return mynest
f=myfun(10)#f接收mynest的定义
print(f)
print(f(100))
结果
<function myfun.<locals>.mynest at 0x00000280A926F048>
110
- 使用闭包函数时应注意变量是否成为定值
def myfun():
lists=["","","",""]
for i in range(0,4):
def mynest(b):
return i+b
lists[i]=mynest
return lists
funcs=myfun() #执行完这一句后,i=3不变,因此结果均为13
print("funcs为",funcs)
print(funcs[0](10))
print(funcs[1](10))
print(funcs[2](10))
print(funcs[3](10))
结果
funcs为 [<function myfun.<locals>.mynest at 0x00000280A92ED488>, <function myfun.<locals>.mynest at 0x00000280A92ED840>, <function myfun.<locals>.mynest at 0x00000280A92ED7B8>, <function myfun.<locals>.mynest at 0x00000280A92ED730>]
13
13
13
13
- 为了使i从0-3变化,我们可以使用默认值
- Example 04
def myfun():
lists=["","","",""]
for i in range(0,4):
def mynest(b,i=i):
return i+b
lists[i]=mynest
return lists
funcs=myfun()
print("funcs为",funcs)
print(funcs[0](10))
print(funcs[1](10))
print(funcs[2](10))
print(funcs[3](10))
结果
funcs为 [<function myfun.<locals>.mynest at 0x00000280A92ED400>, <function myfun.<locals>.mynest at 0x00000280A92EDC80>, <function myfun.<locals>.mynest at 0x00000280A92EDA60>, <function myfun.<locals>.mynest at 0x00000280A92ED9D8>]
10
11
12
13