【每天1分钟】PYTHON基础之函数(返回/回调函数)
1. 函数作为结果值返回
>>> def mysum(*args):
def innersum():
a = 0
for n in args:
a = a + n
return a
return innersum
>>> mysum(1, 2, 3, 4, 5)
<function mysum.<locals>.innersum at 0x000001FBE48F59D8>
>>> mysum(1, 2, 3, 4, 5)()
15
>>> f1 = mysum(1, 2, 3, 4, 5)
>>> f2 = mysum(1, 2, 3, 4, 5)
>>> print(f1 == f2) # f1 和 f2 是不同的函数
False
>>>
2. 闭包
2.1 内部函数
>>> # 内部函数,不修改全局变量可以访问全局变量
>>> a = 1
>>> def func1():
b = a + 1 # 仅仅访问全局变量 a
print(b)
>>> func1()
2
>>> # 内部函数,修改同名全局变量,则python会认为它是一个局部变量
>>> a = 1
>>> def func2():
a = a + 1 # 修改同名的全局变量,则认为是一个局部变量
print(a)
>>> func2()
Traceback (most recent call last):
File "<pyshell#52>", line 1, in <module>
func2()
File "<pyshell#51>", line 2, in func2
a = a + 1 # 修改同名的全局变量,则认为是一个局部变量
UnboundLocalError: local variable 'a' referenced before assignment
>>> func2
<function func2 at 0x000001FBE48F5B70>
>>>
2.2 内函数中修改外函数的值
如果想要在内函数中修改外函数的值,需要使用 nonlocal 关键字声明变量
>>> def outer(a, b):
def inner(x):
nonlocal a
a = 3 # a 重新赋值为 3
return a * x - b
return inner
>>> line = outer(2, 3)
>>> print(line(5))
12
>>>