使用 Walrus Operator := 赋值表达式出现意外的 Python 变量范围[重复]

问题描述 投票:0回答:1

我发现以下代码的变量范围非常出乎意料...(来自其他语言,其中

scope_var
变量的范围仅存在于 IF 的范围内):

if scope_var := 'exists after IF':
    pass
print(scope_var)

将打印什么?

python python-3.x scope
1个回答
6
投票

输出:存在于IF之后

因此变量

scope_var
现在存在于 IF 语句之外/之后。

这对我来说很奇怪,所以我想我发布这个问答供来自其他语言的其他人学习。 (我在谷歌上搜索了很多文章,但没有出现像这个答案这样的答案,所以我希望这可以帮助像我这样的人。)

...

显然这不仅仅是 Walrus := 赋值表达式。常规的 FOR 语句也会发生这种情况:

for i in range(3):     
    pass 
print(i) 

输出:2

该变量在周围范围内可用。

© www.soinside.com 2019 - 2024. All rights reserved.