有效代码:
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的未来版本中吗?这种限制的原因是什么?