【发布时间】:2017-09-18 21:42:02
【问题描述】:
C 没有 guarantee any evaluation order,因此像 f(g1()+g2(), g3(), g4()) 这样的语句可能会以任意顺序执行 g1()、g2()、g3() 和 g4()(尽管 f() 将在所有这些语句之后执行)
Python 呢?我对 Python 2.7 的实验表明,它似乎是从左到右的评估顺序,但我想知道这是否被指定为这种情况。
测试程序:
def somefunc(prolog, epilog):
print prolog
def f(a, b, *args):
print epilog
return f
def f(text):
print text
return 1
somefunc('f1','f2')(f('hey'),f('ho'),f('hahaha'),f('tweedledee')+f('tweedledum'))
打印出来的
f1
hey
ho
hahaha
tweedledee
tweedledum
f2
【问题讨论】:
-
@DYZ 我询问了函数参数和运算符评估,而不仅仅是函数参数。
-
我对参数值根据参数列表中的顺序而不同的代码有一种不好的感觉,因此我倾向于避免从左到右顺序很重要的情况。但很高兴知道它是什么,对于 Python,它是从左到右的,正如其他人所指出的那样。
标签: python python-3.x python-2.7 operator-precedence