【发布时间】:2018-05-30 06:06:43
【问题描述】:
我最近回答了a question,用户遇到了麻烦,因为他们将多维数组附加到另一个数组,我在回答中注意到可以使用可迭代解包来填充 @ 987654322@ 和 y 值并分配给同一行上的 board[x][y]。
我曾预计这会引发错误,因为 x 和 y 当时尚未定义,因为即使在 iterable-unpacking 标记中也是如此:
可迭代的元素同时分配给多个值
这可以看作是在以下示例中起作用:
>>> board = [[0, 0], [0, 0]]
>>> move = [0, 1, 2]
>>> x, y, board[x][y] = move
>>> board
[[0, 2], [0, 0]]
等同于:
>>> board = [[0, 0], [0, 0]]
>>> move = [0, 1, 2]
>>> x = move[0]
>>> y = move[1]
>>> board[x][y] = move[2]
>>> board
[[0, 2], [0, 0]]
然而,当使用以下方法计算斐波那契数列时:
a, b = b, a + b
它不评估为:
a = b
b = a + b
当交换值时:
a, b = b, a
它不评估为:
a = b
b = a
那么为什么这在第一个示例中有效?
【问题讨论】:
-
这些例子似乎并不相同。我的意思是,在第一个例子中,你有
<some variables> = <some constant values>。第二个示例尝试在=的两侧涉及相同的变量。 -
我认为在标题中使用“异步”有点偏离问题的主题,可能会导致人们在错误的方向上搜索 python
async。也许更像是“可迭代的拆包评估顺序”? -
@Aaron 谢谢,我想不出更好的术语,所以我只是在谷歌上搜索了同步的反义词,我现在就改变它
标签: python variable-assignment iterable-unpacking