python命名空间更改_关于python3命名空间的问题?

LEGB规则

命名空间:一个容器,其中包含的是映射到不同对象的名称。

作用域:定义了一个“层次”,我们从其中的命名空间中查找特定的“名称-对象”映射对。全局变量与局部变量的字典映射,可使用函数globals()和locals()

LEGB规则,表示的是Local -> Enclosed -> Global -> Built-in

问题的关键就是:如果我们没有明确地告诉Python我们要使用的是全局作用域,而是直接尝试修改变量值的话,就很容易产生UnboundLocalError。(记住,赋值操作的右半部分是先执行的)

eg:

a_var = 1

def a_func():

a_var = a_var + 1

print(a_var, '[ a_var inside a_func() ]')

print(a_var, '[ a_var outside a_func() ]')

a_func()

报错:

UnboundLocalError: local variable 'a_var' referenced before assignment

修改版:加上变量的作用域。

a_var = 1

def a_func():

global a_var

a_var = a_var + 1

print(a_var, '[ a_var inside a_func() ]')

print(a_var, '[ a_var outside a_func() ]')

a_func()

结果:

1 [ a_var outside a_func() ]

2 [ a_var inside a_func() ]

[Finished in 0.2s]

LEGB - 局部,外围,全局,内建

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值