Python 函数参数和操作数的计算顺序是确定性的(+记录在哪里)?

2024-03-26

C 没有保证任何评估订单 http://en.cppreference.com/w/c/language/eval_order所以像这样的声明f(g1()+g2(), g3(), g4())可能会执行g1(), g2(), g3(), and 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

是的,保证从左到右的评估顺序,但作业除外。此处记录了这一点(py2 https://docs.python.org/2/reference/expressions.html#evaluation-order, py3 https://docs.python.org/3/reference/expressions.html#evaluation-order):

Python 从左到右计算表达式。请注意,在评估作业时,首先评估右侧,然后评估左侧。

在下面的行中,表达式将按照其后缀的算术顺序进行计算:

expr1, expr2, expr3, expr4
(expr1, expr2, expr3, expr4)
{expr1: expr2, expr3: expr4}
expr1 + expr2 * (expr3 - expr4)
expr1(expr2, expr3, *expr4, **expr5)
expr3, expr4 = expr1, expr2

如果语言没有对此做出某种选择,则对一个参数的求值可能会改变另一个参数并导致未指定的行为,因此 Python 的所有实现都必须遵循此规范。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 函数参数和操作数的计算顺序是确定性的(+记录在哪里)? 的相关文章

随机推荐