def max(a,b): return a if a>b else b def the_max(x,y,z): #函数的嵌套调用 c = max(x,y) return max(c,z) print(the_max(1,2,3))
函数的嵌套定义内部函数可以使用外部函数的变量
a = 1 def outer(): a = 1 def inner(): a = 2 def inner2(): nonlocal a #声明了一个上面第一层局部变量 a += 1 #不可变数据类型的修改 inner2() print('##a## : ', a) inner() print('**a** : ',a) outer() print('全局 :',a)
nonlocal 只能用于局部变量 找上层中离当前函数最近一层的局部变量声明了nonlocal的内部函数的变量修改会影响到 离当前函数最近一层的局部变量对全局无效对局部 也只是对 最近的 一层 有影响
a = 0 def outer(): # a = 1 def inner(): # a = 2 def inner2(): nonlocal a print(a) inner2() inner() # outer() def func(): print(123) # func() #函数名就是内存地址 func2 = func #函数名可以赋值 func2() l = [func,func2] #函数名可以作为容器类型的元素 print(l) for i in l: i() def func(): print(123) def wahaha(f): f() return f #函数名可以作为函数的返回值 qqxing = wahaha(func) # 函数名可以作为函数的参数 qqxing()
闭包:嵌套函数,内部函数调用外部函数的变量.
def outer(): a = 1 def inner(): print(a) inner() outer()
def outer(): a = 1 def inner(): print(a) return inner inn = outer() inn()
# import urllib #模块 from urllib.request import urlopen ret = urlopen('http://www.xiaohua100.cn/index.html').read() print(ret) def get_url(): url = 'http://www.xiaohua100.cn/index.html' ret = urlopen(url).read() print(ret) get_url() def get_url(): url = 'http://www.xiaohua100.cn/index.html' def get(): ret = urlopen(url).read() print(ret) return get get_func = get_url() get_func()