Day_09_PM_Function_Nesting_And_Closure
# 函数嵌套
def f1():
print('f1')
def f2():
print('f2')
return f2
f = f1() # f = f2
f() # f2()
# f1()() # 跟上面等价
# 带参数的函数嵌套
def f3(x):
print('f3')
def f4(y):
print('f4', x, y)
return f4
# f3(11)(22)
f = f3(11)
f(22)
# 闭包
# 外部函数 嵌套 内部函数, 且返回内部函数, 则外部函数的参数或变量不会被释放
# 局部变量:
# 1.变量的内存会被回收
# 2.不会被污染(不会被函数外部修改)
def fn1():
x = 1
# 全局变量
# 1.变量不会被回收
# 可能会被污染(可能会被修改)
# 闭包
# 1.变量不会被回收
# 2.变量不会被污染
def outer():
n = 10
def inner():
nonlocal n
n += 1
print('n =', n)
return inner
f = outer() # f = inner
f() # 11
f() # 12
f() # 13