day10
#命名空间和作用域 #内置命名空间 #python解释器一启动就能使用的内置命名空间中 #在启动解释器的时候加载进内存 #全局命名空间---我们写的代码,不是函数中的代码 #从上到下被执行的过程中依次加载进内存的 #放置了我们设置的所有变量名和函数 #局部命名空间--函数 #函数内部定义的名字 #当调用函数时,才会产生,调用结束空间消失 #在全局:可以使用内置命名空间的名字 #在局部:可以使用全局,内置命名空间的名字 #在内置:不可以使用全局和局部命名空间中的名字 #内置命名空间>全局命名空间>局部命名空间 #自己的空间中找不到就找上一级 ''' def max(l): print("please don't do that") return l # print(max([1,2,3])) # print(max)#打印的是函数地址 def func(): print(max)#找上一步中的max的地址 func() ''' #作用域 #全局作用域---作用在全局---包含内置和全局空间的名字 #局部作用域---作用在局部---函数(局部空间中的名字) # print(locals()) # print(globals()) # a=1 # b=2 # def func(): # x='aaa' # y='bbb' # print(locals()) # # print(globals()) # func() # a = 10 # def func(): # global a # a = 20 # func() # print(a) # # 在局部调用globals和locals # def func(): # a = 12 # b = 20 # print(locals()) # print(globals()) # # func() #函数嵌套调用 ''' def the_max(x,y,z): c=max(x,y) return max(c,z) print(the_max(1,3,2)) ''' #函数的嵌套定义 #内部函数可以使用外部函数的函数 # def outer(): # def inner(): # print('hkl;') # outer() #global # a=2#全局变量 # def outer(): # a=1#局部变量 # print(a) # def inner(): # b=2 # print(b) # def inner2(): # global a#对全局变量进行修改 # a+=1 # print(a,b) # inner2() # inner() # print('*',a)#此处为局部变量,与global无关 # outer() # print('全局',a)#此处说明全局变量已经被修改了,说明global只对全局变量有效 #nonlocal # a=3#全局变量 # def outer(): # a=1#局部变量 # print(a) # def inner(): # a=5#局部变量 # print(a) # def inner2(): # nonlocal a#对向上找到的第一个a的那一层的局部变量a进行修改 # a+=1 # inner2() # print('#', a) # inner() # print('*',a)#此处为局部变量,与nonlocal有关 # outer() # print('全局',a)#此处说明全局变量没有被修改了,说明nonlocal只对局部变量有效 #函数名可以赋值 # #函数名可以作为容器类型的元素 # a=4 # def func(x,y): # a=x*y # return a # print(func(1,2)) # func1=func#函数名可以赋值 # print(func(2,3)) # l=[func,func1] # print(l)#函数名可以作为容器类型(列表,字典之类的)的元素,内存地址一样 # for i in l: # print(i) # def sb(): # print(23) # # def a(s): # s() # return s#可以作为返回值 # print(a(sb))#函数可以作为参数 #闭包 #一定是嵌套函数,内部函数一定要套用外部函数的变量 # def func(): # a=3 # b=2 # y=a*b # print(y) # def inner(): # x=a+b # print(x) # print(inner.__closure__)#cell at........ # inner() # func() # print(func.__closure__)#None # #闭包一定是调用了外部的变量 # def outer(): # a=2 # def inner(): # print(a) # return inner#返回函数名 # inn=outer() # inn()#调用函数,此时a一直在内存中不会随outer函数结束不消失 # from urllib.request import urlopen # ret=urlopen('https://y.qq.com/n/yqq/song/000wX98p3MBWmK.html').read() # print(ret) #错误示范 # from urllib.request import urlopen # def get_url(): # url='https://y.qq.com/n/yqq/song/000wX98p3MBWmK.html' # def func(): # ret = urlopen(url).read() # print(ret) # return func#位置不对 # get_func=get_url()#要加括号 # get_func() #正确示范 # from urllib.request import urlopen # def get(): # url='https://y.qq.com/n/yqq/song/000wX98p3MBWmK.html' # def func(): # print(urlopen(url).read()) # # func() # # get() # return func # get_func=get() # get_func()