python赋值是否从右向左严格求值?

python赋值是否从右向左严格求值?,python,operator-precedence,Python,Operator Precedence,换句话说就是 d = {} d["key"] = len(d) Python安全吗 我知道这是;程序可能在计算要分配给元素的值之前获取元素的引用。这在Python中是类似的还是len(d)总是在d.\uu getitem\uuuu(“key”)之前计算?是的,在Python中是安全的:表达式的求值顺序是从左到右的,但在赋值语句中,在赋值发生之前对右侧求值。此外,算术表达式按其后缀的算术顺序求值 Python从左到右计算表达式。注意 在评估作业时,右手边在 左手边 在以下行中,表达式将在 其后

换句话说就是

d = {}
d["key"] = len(d)
Python安全吗


我知道这是;程序可能在计算要分配给元素的值之前获取元素的引用。这在Python中是类似的还是
len(d)
总是在
d.\uu getitem\uuuu(“key”)
之前计算?

是的,在Python中是安全的:表达式的求值顺序是从左到右的,但在赋值语句中,在赋值发生之前对右侧求值。此外,算术表达式按其后缀的算术顺序求值

Python从左到右计算表达式。注意 在评估作业时,右手边在 左手边

在以下行中,表达式将在 其后缀的算术顺序:


是的,分配的RHS在LHS之前进行评估;无论LHS是属性引用、订阅还是切片,情况都是如此

发件人:

赋值语句计算表达式列表(请记住,这可以是单个表达式或逗号分隔列表,后者生成元组),并将单个结果对象从左到右分配给每个目标列表

本节中的后续语言将讨论如何定义对不同目标语法的赋值,但这是从表达式列表已被计算以生成对象的角度出发的

事实上,LHS内的评估顺序也已确定;容器在下标之前求值:

  • 如果目标是订阅:将计算引用中的主表达式。它应该产生一个可变序列对象(如列表)或一个映射对象(如字典)。接下来,计算下标表达式

如果您的意思是有可能将1视为值,那么答案是否定的。它也有很好的文档记录是的,这在Python中是安全的。注意,如果您的听众是Python程序员,那么您的问题的措辞并不是您想要的。在Python中,您可以执行
a、b、c=f(x)、f(y)、f(z)
并且
f(x)
的求值发生在
f(z)
求值之前。(如果功能有副作用,这是相关的。)因此,右侧的评估是从左到右的。但是,在将任何内容绑定到LHS之前,都会对RHS进行评估。