0

有效代码:

x, y, z = 1, 2, 3
print(x := x + y)
print(x, y, z)

无效的代码:

arr = [1, 2, 3]
print(arr[0] := arr[0] + arr[1])
print(arr)

错误:

SyntaxError: cannot use assignment expressions with subscript

另一个有用的例子:

bool_index = # Problem cells in the array
assert not any(bool_index), "Problems here: \n{}".format(np.full(arr.shape, ".")[bool_index] := "X")

上面的片段理想情况下看起来像这样:

Problems here:
array([['.', '.', '.', '.', '.', '.', '.', '.', '.'],
       ['.', '.', '.', '.', '.', '.', '.', '.', '.'],
       ['.', '.', '.', '.', '.', '.', '.', '.', '.'],
       ['.', '.', '.', '.', '.', '.', '.', '.', '.'],
       ['.', '.', '.', 'X', '.', '.', '.', '.', '.'],
       ['.', '.', '.', '.', '.', '.', '.', '.', '.'],
       ['.', '.', '.', '.', '.', '.', '.', '.', '.'],
       ['.', '.', '.', '.', '.', '.', '.', '.', '.'],
       ['.', '.', '.', '.', '.', '.', '.', '.', '.']], dtype='<U1')

"X"但是,我们必须提前在变量中生成该数组以assert标记至少三行,因为仍然需要一个变量)。

我知道我给出的最近的例子可能是不好的风格,但是这种小的可能的单行代码在研究代码中相当普遍,通常很适合列表理解的东西必须改为写在 for -loop 由于无法编写此类表达式。

由于解析语言的任何限制,海象运算符的这种限制是否存在?是否决定实施?或者这个功能会出现在python的未来版本中吗?这种限制的原因是什么?

4

0 回答 0