4分钟让你明白python的变量作用域(scope)与名字空间(namespace)

python作用域是以函数、类、模块来区分的,而不是

也就是说ifwhilefor并不会影响变量的作用域!!!,python中没有块作用域。

这就能解释python的if __name__=='__mian__'中声明的变量同样是全局变量

print(g)
if __name__=='__main__':
    g='global'
#输出为:global

python 作用域的优先级:LEGB

LEGB 表示的是 Local, Enclosing, Global, and Built-in 。同名变量优先访问局部变量,其次是闭包变量,其次是全局变量,最后才是内置变量。

作用域转换:关键字globalnolocal(嵌套函数中使用)

python 变量的解析顺序 :LEGB

  1. L:先在局部变量中找,如果找不到
  2. E:则去闭包变量中找,如果找不到
  3. G:则去局部变量中找,如果找不到
  4. 去内置变量中找,如果找不到,才报错
image-20200521135909324

namespace

存储变量的地方,用字典实现。__dict__来查看这些字典。

The place where a variable is stored.

import sys
print(sys.path)
#等价于如下命令
print(sys.__dict__['path'])

参考

1 . https://stackoverflow.com/questions/2829528/whats-the-scope-of-a-variable-initialized-in-an-if-statement。
2. https://www.datacamp.com/community/tutorials/scope-of-variables-python

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值