标签:col 情况 加载 启动 nonlocal 运行 容器 style 不可变
# 函数的命名空间和作用域 # 内置命名空间 # 存在于python解释器中,在启动python时,就自动运行内置命名空间比如print() input()即启动就可以使用的命名变量内置的名字,在启动时被加载到内存中 # 全局命名空间 # 在程序中从上至下依次被执行的名称变量,放置了我们需要的变量名称 # 局部命名空间 # 在程序中定义函数中所定义的名称变量,作用范围只是在该局部范围内有效,当函数结束时,将名称变量会释放 # 在全局空间中能够使用,内置名称和全局名称 # 在局部空间中能够使用,内置名称和全局名称和局部名称 # 在正常情况下,直接使用内置的名字 # 当我们在全局定义了和内置名字空间中同名的名字时,会使用全局的名字 # 当我自己有的时候 我就不找我的上级要了 # 如果自己没有 就找上一级要 上一级没有再找上一级 如果内置的名字空间都没有 就报错 # 多个函数应该拥有多个独立的局部名字空间,不互相共享 # def f(): # a = 1 # print( a ) # print(a) # # 在全局空间中使用,局部变量会报错 # a = [] # def f(): # a.append(‘ss‘) # print(a) # f() # print(a) # a = 1 # def f(): # a +=1 # f() # print(a) # 在局部变量中可以使用全局变量 但是 当全局变量为不可变类型时,不能再局部空间中对其进行运算 # 可变数据类型不受影响 # 如果想要修改,得在局部空间使用global可对全局不可变类型的变量进行改变(但是不建议使用global,因为他会使代码的安全性降低) # a = 1 # def f1(): # a = 9 # def f2(): # b = 2 # print(‘##‘,a,b) # def f3(): # nonlocal a # a += 2 # print(a,‘===‘) # f3() # print(‘&‘, a) # # f2() # print(a,‘__‘) # print(a,‘@@‘) # f1() # # print(‘a!!‘,a) # def func(): # print(123) # func1 = func # # func1() # # func() # print(id(func),id(func1)) # l = [func,func1] # for i in l: # i() # #函数名是内存地址,可以进行赋值,函数名可以作为容器类型的元素 def func(): print(123) def wahaha(f): f() return f #函数名可以作为函数的返回值 qqxing = wahaha(func) # 函数名可以作为函数的参数 qqxing()
标签:col 情况 加载 启动 nonlocal 运行 容器 style 不可变
原文地址:https://www.cnblogs.com/hello-boy/p/10170287.html