函数可以作为容器类型的元素、函数名可以赋值
def func(): print(111) # func() #函数名就是内存地址 func2 = func #函数名赋值 func2() #结果:111 l=[func,func2] #函数可以作为容器类型的元素(列表、元组、字典都是容易类型) print(l) #两地址完全一样,结果:[<function func at 0x00628B70>, <function func at 0x00628B70>] for i in l: i()
函数名可以作为函数的参数
def func(): print(111) def wahaha(f): f() #函数名作为函数的参数 wahaha(func) #结果:111
函数名可以作为返回值
def func(): print(111) def wahaha(f): # f() return f qqxing = wahaha(func) qqxing() #结果:111
闭包
即嵌套的函数,且内部函数调用外部函数的变量
def outer(): a=1 def inner(): print(a) print(inner.__closure__) outer() print(outer.__closure__) #结果(<cell at 0x022464D0: int object at 0x6102E310>,) # None
说明:结果只要有cell说明是闭包
闭包常见的使用方法:在外部使用内部的函数
def outer(): a=1 def inner(): print(a) return inner inn=outer() inn() #结果:1 # 说明:只要inn()存在,变量a就存在,延长了a的使用周期
闭包实例
import urllib #模块 from urllib.request import urlopen def get_url(): url = 'https://www.baidu.com/?tn=93370297_hao_pg' def inget(): ret = urlopen(url).read() print(ret) return inget get = get_url() get()