相关疑难解决方法(0)

一行中的Python多个赋值语句

(别担心,这不是关于解包元组的另一个问题.)

在python中,语句foo = bar = baz = 5将变量foo,bar和baz赋值为5.它从左到右分配这些变量,这可以通过像nastier这样的例子来证明

>>> foo[0] = foo = [0]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'foo' is not defined
>>> foo = foo[0] = [0]
>>> foo
[[...]]
>>> foo[0]
[[...]]
>>> foo is foo[0]
True
Run Code Online (Sandbox Code Playgroud)

但python语言参考声明赋值语句具有该形式

(target_list "=")+ (expression_list | yield_expression)
Run Code Online (Sandbox Code Playgroud)

在分配时,expression_list首先评估,然后分配.

那么这条线怎么可能foo = bar = 5是有效的,因为它bar = 5不是一个expression_list?如何在一行上解析和评估这些多项任务?我读错了语言参考吗?

python variable-assignment

32
推荐指数
4
解决办法
2万
查看次数

Python赋值运算符优先级 - (a,b)= a [b] = {},5

我在Twitter上看到了这个Python片段,并且对输出感到非常困惑:

>>> a, b = a[b] = {}, 5
>>> a
{5: ({...}, 5)}
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?

python variable-assignment

25
推荐指数
1
解决办法
816
查看次数

标签 统计

python ×2

variable-assignment ×2