使用 Walrus 运算符的意外 Python 变量范围 := 赋值表达式
Unexpected Python variable scope using Walrus Operator := assignment expression
我发现以下代码的变量范围非常出乎意料...(来自其他语言,其中 scope_var
变量的范围仅存在于 IF 的范围内):
if scope_var := 'exists after IF':
pass
print(scope_var)
将打印什么?
输出:存在于 IF
之后
因此变量 scope_var
现在存在于 IF 语句之外/之后。
这对我来说很奇怪,所以我想我 post 这个 Q/A 供来自其他语言的其他人学习。 (我谷歌了很多文章,没有找到类似这个答案,所以我希望这对像我这样的人有所帮助。)
...
显然它不仅仅是 Walrus := 赋值表达式。它也发生在常规的 FOR 语句中:
for i in range(3):
pass
print(i)
输出:3
我发现以下代码的变量范围非常出乎意料...(来自其他语言,其中 scope_var
变量的范围仅存在于 IF 的范围内):
if scope_var := 'exists after IF':
pass
print(scope_var)
将打印什么?
输出:存在于 IF
之后因此变量 scope_var
现在存在于 IF 语句之外/之后。
这对我来说很奇怪,所以我想我 post 这个 Q/A 供来自其他语言的其他人学习。 (我谷歌了很多文章,没有找到类似这个答案,所以我希望这对像我这样的人有所帮助。)
...
显然它不仅仅是 Walrus := 赋值表达式。它也发生在常规的 FOR 语句中:
for i in range(3):
pass
print(i)
输出:3