1.引用变量时的查找顺序 本地变量,def或lambda中的作用域,全局作用域,内置作用域
2.函数也是变量
3.内置作用域:builtins ,包含一些内置的异常,如:EOFError,以及一些内置的函数,如:zip
4.全局变量如果在函数内部被赋值的话,必需使用global申明
5.修改一个模块中函数的名称:glob = sys.modules['thismod']#thismod为一个模块
glob.var()#var为thismod中的一个函数
6.工厂函数
def maker(Y):
def action(X):
return x**Y
return action
f = maker(2)#该操作返回action函数,相当于f拥有action函数功能,且Y = 2
f(3) = 9
7.nonlocal:
执行nonlocal语句时,nonlocal名称必需在一个嵌套的def作用域中赋值过,否则报错
通常情况下,不允许嵌套函数修改函数中的值,只允许引用
eg:
def tester(start):
state = start
def nested(label):
print(label,state)
state += 1
return nested
f = tester(0)
f('sds')#此处会报错,nested无法修改tester中state的值
使用nonlocal可以使嵌套函数可以修改函数中的值
eg:
def tester(start):
state = start
def nested(label):
nonlocal state
print(label,state)
state += 1
return nested
f = tester(0)
f('sds') = sds 0
nonlocal的作用范围仅限于函数内的变量