函数名:函数名可以理解为一个特殊的变量。
直接打印函数名,得到的是函数的内存地址。
def f1(): print(1211) print(f1)
函数名可以定义为一个函数的参数。
a = 1 def f1(x): print(x) f1(a)
def f1():
print(555)
def f2(x):
x()
f2(f1)
函数名可以作为容器类型的元素。
def f1(): print(1211) def f2(): print(1222) def f3(): print(1233) def f4(): print(1233) li = [f1,f2,f3,f4,] for i in li: i()
函数能作为字典的值。
函数名还可以作为函数的返回值
def f11(x): return x a = f11(5) print(a)
def f1():
print(666)
def f2(x):
return x
a = f2(f1)
a()
def wraaper():
def inner():
print(666)
return inner
ret = wraaper()
ret()
什么是闭包?
闭包,就是内层函数对外层函数(非全局)变量的引用。
内存函数对外层函数非全局变量的引用就叫闭包。
判断是不是闭包 用内层函数名.__closure__ 返回None
当执行一个函数时候,如果解释器判断此函数内部内部闭包存在,这样
python就一个机制,闭包的所在的临时名称空间不会随着函数的执行完毕而消失。(用于爬虫)
def wraaper1(): name = '老男孩' def inner(): print(name) inner() print(wraaper1().__closure__) wraaper1()
输出结果:
老男孩
(<cell at 0x00000050ABD24D38: str object at 0x00000050ABDC6BC0>,)
name = '老男孩'
def wraaper2():
name1 = 'alex'
def inner():
print(name)
print(name1)
inner()
print(inner.__closure__)
wraaper2()