1
wang2191195 2013-09-26 10:04:08 +08:00 1
READ是不需要的
你要N = 1 的话,才需要global N |
2
messense 2013-09-26 10:06:56 +08:00
N = 12
class Test(object): def p(self): print N + 1 global M M = 12 if __name__ == '__main__': t = Test() t.p() print M -------------------------- 楼主运行下这个程序试试理解下。 |
3
187j3x1 2013-09-26 10:08:28 +08:00 1
引用不用声明全局 操作它就要了
|
4
qdcanyun 2013-09-26 10:08:43 +08:00
|
5
hhrmatata OP |
6
hhrmatata OP |
7
liwei 2013-09-26 10:38:15 +08:00
|
8
Golevka 2013-09-27 21:45:14 +08:00 1
@hhrmatata 不光类内引用全局变量不需要声明, 函数内也是一样. 因为在没有重名的局部变量时, 你用词法作用域规则总是能看到更外层的局部变量, 以及全局变量 (所以说局部变量和全局变量本质上没什么差别, 只不过人们喜欢在实现上加以区分而已).
至于改写要用global可以认为是一种保护规则. 毕竟python不像ML,perl,js之类的有var/let可以强制新的局部变量shadow下一层作用域的同名变量. 在没有这条规则的情况下, 如果别人写一个函数里面有n = 10, 同时你又在全局作用域定义了一个n, 于是你的n就莫名其妙地被改写了, 程序到此为止也就傻逼了. 这时你除了给n换一个别的名字之外没有别的办法——祝你不是项目快写完了才发现的这个问题. |
9
kehr 2013-09-29 18:18:37 +08:00
程序在执行过程中对于变量的查找,先从局部命名空间开始,查找不到再向外查找全局命名空间。这也是python为什么在局部命名空间里可以引用全局命名空间变量的规则。
|