python修改月薪_Python薪资又涨了,这可咋办啊!月薪3万的Python程序员的苦恼!

每个 Python 开发者都至少会经历一次 UnboundLocalError 的过错,初度遇到这种过错会觉得莫名其妙,用这张图来描绘当时的心情最为贴切:

比方下面的代码在 foo 函数中给 x 自增 1:

x = 10def foo(): x += 1 print(x)foo()

调用 foo() 的时候,仓库日志通知咱们:部分变量 x 赋值前在其它地方被引用了,换句话说就是 x 在当前效果域内还没有定义就拿来使用了。

Traceback

(most recent call last): File "unboundtest.py", line 8, in foo() File

"unboundtest.py", line 4, in foo x += 1UnboundLocalError: local variable

'x' referenced before assignment

明明 x 在函数 foo 的外面定义了,为什么却告知咱们说 x 没赋值就被引用了呢?

由于这是几乎每个人都会遇到的过错,所以 Python 官方把这个问题收入到了它的 FAQ 中,它是这样说的:

This

is because when you make an assignment to a variable in a scope, that

variable becomes local to that scope and shadows any similarly named

variable in the outer scope.

翻译过来就是,当你在部分效果域中给变量赋值时,那么这个变量就会变成一个部分变量,不管它在外部有没有初始化。如果外部效果域有相同姓名的变量,那么对部分空间来说这些相同姓名的全局变量都将被躲藏为不可见的。

在这里,x

+= 1等价于x = x + 1,首先会履行 x + 1 操作,然后再赋值给 x。而履行加法操作之前它会先查找变量

x,依据官方的这个解说所述, Python 认为 x 对函数 foo 来说一个部分变量,由于它有赋值操作,已然 x

是部分变量,在履行加法操作时,又引用了 x,所以抛出了 UnboundLocalError 异常。

就是以上这些,希望你能有所收成。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值