当前位置: 首页 > 知识库问答 >
问题:

可迭代解包评估顺序[重复]

佘辰龙
2023-03-14
>>> 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

那么,为什么在第一个示例中这是有效的呢?

共有1个答案

宋朝
2023-03-14

总是首先计算=的右侧,在本例中,它打包了一个元组。然后在解释左手边时解压缩该元组。左右两边不共享变量知识。RHS变成一个值,然后LHS使用该值分配给变量(标签)。

在您的示例中,XY的值是在计算RHS之后确定的。然后从左到右进行解包,以便板[x][y]具有有效的索引。

切换顺序演示了解包顺序:

>>> board[x][y], x, y = move[2], move[0], move[1]
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-7-a984ef3168f8> in <module>()
----> 1 board[x][y], x, y = move[2], move[0], move[1]    
NameError: name 'x' is not defined
 类似资料:
  • 问题内容: 有人可以解释一下SELECT语句的概念执行顺序是什么,请提供一个示例吗? 我在Google上进行了搜索,但它们似乎都使用了相同的示例,而没有详尽的解释。 问题答案: 从概念上讲,按以下顺序评估查询: 该条款 该条款 该条款 该条款 该条款 该条款 这是“概念性”处理,解释了SQL的一些作用域规则。实际上,查询的执行方式可能有所不同。 SQL Server文档在此处说明了此顺序。

  • 是OCaml内置的函数。 经验: 我的问题:的求值顺序是什么? 是先将求值为8,然后将求值为11?还是先将求值为函数,然后将用作函数的参数? 谢谢

  • 问题内容: 为什么这些示例中的第一个不起作用,而其他所有示例都起作用? 问题答案: 这既不是范围问题,也不是关闭问题。问题在于 声明 和 表达式 之间的理解。 JavaScript代码(即使是Netscape的第一个JavaScript版本和Microsoft的第一个副本)也要分两个阶段处理: 阶段1:编译-在此阶段,代码被编译成语法树(字节码或二进制取决于引擎)。 阶段2:执行-然后解析解析的代

  • 我正在学习SICP第4章及其元循环方案评估器的实现。我很难理解用户定义的过程是如何由它的<代码>应用过程来处理的。 元循环求值器由两个主要过程组成:和。基本思想是递归地应用,直到只有自求值表达式(如数字和字符串)或具有原始过程的表达式可以由直接处理。 evaluator遵循评估的环境模型工作,我们将变量绑定到它们的关联值,并在每次调用时创建新的帧。过程定义是这样处理的。过程名在环境中绑定,当调用它

  • 问题内容: 好的,我认为这可能是一个老问题,但是我在stackoverflow上没有发现任何东西。在go中,不保证地图上的迭代顺序是可重现的。因此,建议的方法是将键保留在一个切片中并对该切片进行排序。然后,对该切片进行迭代以从映射中检索值,以便我们按顺序获取它们(因为由键组成的切片已排序,因此将以可再现的顺序排列)。因此,这意味着需要对切片进行排序,否则切片上的迭代也不会给出可重现的顺序。但是,当

  • 问题内容: 我有以下查询: 我有以下问题: USING语法与ON语法同义吗? 这些联接是从左到右评估的吗?换句话说,此查询是否说:x =公司加入了用户;y = x JOIN工作;z = y加入用户帐户; 如果对问题2的回答为“是”,那么可以安全地假设“公司”表中包含“公司ID”,“用户ID”和“工作ID”列? 我不明白在引用别名“ j”时,如何使用WHERE子句来选择公司表上的行 任何帮助,将不胜