#内置的命名空间 就是python解释器一启动就可以使用的名字存贮在内置命名空间中
# print(),input(),list,tuple,等等
#全局的会命名空间
#局部的命名空间
a = 1 def func(): global a #声明后就可以修改全局的 a ,将会影响全局的 a 应尽量不使用,因为不安全 a += 1 func() print(a) #2
#求最大值函数 函数的嵌套
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)) #3
#函数的嵌套定义和作用域链
a = 5 def outer(): a = 1 def inner(): b = 4 print(a) #1 print('inner') #inner def inner2(): nonlocal a #声明上面第一层的局部变量 a 可以修改,对全局变量无效 a += 1 print(a,b) #2 4 print('inner2') #inner2 inner2() inner() print('局部 a:',a) #局部 a: 2 outer() print('全局 a:',a) #全局 a: 5
def func(): print(123) func2 = func #函数名可以赋值 func2() #123 l = [func,func2] #函数名可以做为容器类型的元素 for i in l: i() #123 #123
def func(): print(123) def wahaha(f): f() return f #函数名可以作为函数的返回值 qqxing = wahaha(func) #函数名可以作为函数的参数 123 qqxing() #123
#闭包 是一个嵌套的函数,且内部函数调用外部函数的变量
def outer(): a = 1 def inner(): print(a) # print(inner.__closure__) return inner inn = outer() #返回了内部闭包的函数地址 inn() #运行内部的函数
#闭包的应用例程
#import urllib #调用模块 from urllib.request import urlopen # ret = urlopen('https://home.cnblogs.com/u/bydzxzy/').read() # print(ret) def get_url(): url = 'https://home.cnblogs.com/u/bydzxzy/' def get(): ret = urlopen(url).read() #爬取了网页的原码 print(ret) return get get_func = get_url() get_func()