pythonclass全局变量_Python中通过函数对象创建全局变量

先看下面这段代码,显然无法work. 因为代码试图在TestVariableScope()中引用一个没有被定义的变量a.所以必须报错,如下图-1.

不过如果你将第2行代码注释掉。代码就能跑通了,如图-2。

问题1来了:TestVariableScope.a 不是也没有被定义吗,为什么可以work呢?解释如下:先看代码第8行,TestVariableScope.a在SetVariable方法中被定义了,SetVariable()又 在TestVariableScope()前被调用。所以TestVariableScope()在被调用的时候TestVariableScope.a已经被定义了。

问题2来了:代码第7行,a也被定义了。为什么TestVariableScope()在引用a是报错呢。区别在于:a 只是SetVariable()中的一个local变量,TestVariableScope当然无法引用SetVariable中定义的局部变量了。因为违反了LEGB原则吗。TestVariableScope.a 就不一样了,他是一个全局变量哦。所以TestVariableScope当然可以访问这个全局变量了,完全不违反LEGB原则。

问题3来了:为什么TestVariableScope.a是个全局变量,而a却不是呢。因为python中函数皆是对象,而且是全局对象。TestVariableScope.a其实就是TestVariableScope这个全局对象下的一个变量而已,自然也是全局变量喽。 见图-3

1 defTestVariableScope():2 print(a)3 print(TestVariableScope.a)4 TestVariableScope.a=13

5

6 defSetVariable():7 a=12

8 TestVariableScope.a=12

9

10 if __name__==‘Demo‘:11 print(‘Demo is running‘)12

13 if __name__ == ‘__main__‘:14 SetVariable()15 TestVariableScope()16 b=TestVariableScope17 b()

20180110163405535991.png

图-1

20180110163405537944.png

图-2

20180110163405538920.png

图-3

原文:http://www.cnblogs.com/1zhk/p/4701509.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值