当前位置: 首页 > 面试题库 >

Python中的多个分配和评估顺序

鄂伟兆
2023-03-14
问题内容

以下Python表达式之间有什么区别:

# First:

x,y = y,x+y

# Second:

x = y
y = x+y

第一给出的结果与第二给出的结果不同。

例如,

第一:

>>> x = 1
>>> y = 2
>>> x,y = y,x+y
>>> x
2
>>> y
3

第二:

>>> x = 1
>>> y = 2
>>> x = y
>>> y = x+y
>>> x
2
>>> y
4

y是第一的 3 和第二的 4


问题答案:

在赋值语句中,总是在对变量进行实际设置之前先对右侧进行全面评估。所以,

x, y = y, x + y

评估板y(我们称之为的结果ham),评估x + y(呼叫spam),然后设置xham和y到spam。也就是说,就像

ham = y
spam = x + y
x = ham
y = spam

相比之下,

x = y
y = x + y

设置x为y,然后设置y为x(which == y)plus y,因此等效于

x = y
y = y + y


 类似资料:
  • 问题内容: 如果您有一个if语句,其中对多个变量或函数进行了评估,那么按什么顺序对其进行评估? 在这种特定情况下,是将foo相对于5评估,然后将6相对于吧(从左至右)进行评估,还是将其从右至左进行评估?我假设a和以相同顺序求值。 问题答案: 如果第一个是,则将首先评估left子句,然后评估第一个。 这就是为什么您可以执行以下操作的原因: 没有破坏。 相反,对于子句,只有第一个为:时,将评估righ

  • 问题内容: 在Python中,我们可以这样做: 有人可以指出我有关此功能的文档吗? 它是语言的实现细节或功能吗? 利用此功能是否很好? 问题答案: 在和 短路 ,请参见布尔操作文档: 表达式首先计算; 如果为假,则返回其值;否则,将求值并返回结果值。 表达式首先计算; 如果为true,则返回其值;否则,将求值并返回结果值。 注意如何,对,是 只有 当评估计算为一个真正的价值。相反,for ,仅当评

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

  • 问题内容: 有人可以解释一下SELECT语句的概念执行顺序是什么,请提供一个示例吗? 我在Google上进行了搜索,但它们似乎都使用了相同的示例,而没有详尽的解释。 问题答案: 从概念上讲,按以下顺序评估查询: 该条款 该条款 该条款 该条款 该条款 该条款 这是“概念性”处理,解释了SQL的一些作用域规则。实际上,查询的执行方式可能有所不同。 SQL Server文档在此处说明了此顺序。

  • 问题内容: 什么是Python中的惰性评估? 一个网站说: 在Python 3.x中,该函数返回一个特殊的范围对象,该对象按需计算列表元素(延迟或延迟评估): 这是什么意思? 问题答案: 由(或在Python2.x中)返回的对象被称为惰性迭代。 生成器没有将整个范围存储在内存中,而是存储的定义并仅在需要时才计算下一个值(又称惰性求值)。 本质上,生成器允许您返回类似于结构的列表,但是这里有一些区别

  • 这段代码给出的答案不是很直观: 0 1 我明白为什么会发生这种情况-赋值的左侧返回对底层值的引用,同时创建上述值,然后才使用新计算的对右侧进行评估映射。 这种行为在C标准中是否有表述?还是求值顺序没有定义? 使用g 5.2.1获得结果。