# 在所有函数的最外边,如当前模块的全局变量# 示例
a =5print("全局a的地址:%d"%id(a))defmyfun():global a # 声明一下此时的a为全局的a
b = a +1# 如果不声明,那么a是局部的,且会报错:"local variable 'a' referenced before assignment"print("myfun中第1个a的地址:%d"%id(a))
a = a +10# 这两个a都是全局的,但是由于python中赋值的机制是,重新创建一个数据然后给他贴标签"a",所以地址不同,另外会回收原始值print("myfun中第2个a的地址:%d"%id(a))print("myfun中第2个a = %d"% a)return b
print("b = %d"% myfun())print(a,id(a))# 打印的是全局a#=========================================================================# 输出如下:
全局a的地址:140703990784544
myfun中第1个a的地址:140703990784544
myfun中第2个a的地址:140703990784864
myfun中第2个a =15
b =615140703990784864
local(局部)
在某个函数或者类内部定义的变量
Enclosing(主要是非局部也非全局的变量)
# 如下的o_count变量
g_count =0# 全局defouter():
o_count =1# 一个函数外,另一个函数中definner():
i_count =2# 局部# 再比如:
a =5# a是全局的defmyfun():global a
b = a +5# b是nolocaldeffun():
c = b +6# c是localreturn c
return fun()print(a)print(myfun())# 输出结果:516
Python007: Python中的作用域知识和常用标准库(已经内置的)1. 作用域global(全局)# 在所有函数的最外边,如当前模块的全局变量# 示例a = 5print("全局a的地址:%d" % id(a))def myfun(): global a # 声明一下此时的a为全局的a b = a + 1 # 如果不声明,那么a是局部的,且会报错:"local variable 'a' referenced before assignment" p