为什么 python3.8+ 在使用 := 时将结果视为嵌套 lambda 中的局部变量,但在其他情况下则不然?
>>> counter = (lambda result: (lambda: (result + 1)))(0)
>>> counter()
1
>>> counter = (lambda result: (lambda: (result := result + 1)))(0)
>>> counter()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 1, in <lambda>
UnboundLocalError: local variable 'result' referenced before assignment
Run Code Online (Sandbox Code Playgroud)
由 创建的变量的作用域规则:=与它们的作用域规则相同=(只要不涉及理解)。result := result + 1创建一个名为的新局部变量,result该变量隐藏外部函数的参数。由于result在赋值表达式之前未定义,因此尝试计算result + 1会产生NameError.
由于无法nonlocal在 lambda 表达式中使用语句,因此无法result使用简单的赋值来更新外部函数变量的值。(虽然您可以将某些内容与该exec函数一起破解,但我建议不要这样做,并且不会在此处显示如何执行此操作的示例。)
| 归档时间: |
|
| 查看次数: |
100 次 |
| 最近记录: |