假设我们有这样的事情:
a = (fcn1(), fcn2())
b = [fcn1(), fcn2()]
Run Code Online (Sandbox Code Playgroud)
Python解释器fcn1()之前是否进行了评估fcn2(),或者订单是否未定义?
它们从左到右进行评估.
从文档(列表):
当提供以逗号分隔的表达式列表时,其元素将从左到右进行计算,并按该顺序放入列表对象中.
小测试使用dis.dis():
In [208]: def f1():pass
In [209]: def f2():pass
In [210]: import dis
In [212]: def func():
a = (f1(), f2())
b = [f1(), f2()]
.....:
In [213]: dis.dis(func)
2 0 LOAD_GLOBAL 0 (f1)
3 CALL_FUNCTION 0
6 LOAD_GLOBAL 1 (f2)
9 CALL_FUNCTION 0
12 BUILD_TUPLE 2
15 STORE_FAST 0 (a)
3 18 LOAD_GLOBAL 0 (f1)
21 CALL_FUNCTION 0
24 LOAD_GLOBAL 1 (f2)
27 CALL_FUNCTION 0
30 BUILD_LIST 2
33 STORE_FAST 1 (b)
36 LOAD_CONST 0 (None)
39 RETURN_VALUE
Run Code Online (Sandbox Code Playgroud)
注意:如果分配,则首先评估右侧.
| 归档时间: |
|
| 查看次数: |
849 次 |
| 最近记录: |