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

Python对函数参数和操作数求值的顺序是确定性的吗(+在何处记载)?

公良天逸
2023-03-14
问题内容

C不保证任何评估顺序等等之类的声明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

问题答案:

是的,除作业外,从左到右的评估顺序得到保证。在此处记录(py2,py3):

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的所有实现都必须遵循此规范。



 类似资料:
  • reverse 返回一个与指定list相反顺序的list。 val unsortedList = listOf(3, 2, 7, 5) assertEquals(listOf(5, 7, 2, 3), unsortedList.reverse()) sort 返回一个自然排序后的list。 assertEquals(listOf(2, 3, 5, 7), unsortedList.sort())

  • 我有两个列表,我想连接成一个列表,然后使用< code>Collectors.toMap来删除基于特定字段的重复项。同一列表内不能有重复,只能在列表之间。 当谈到解决具有相同键的值的冲突时,我希望对第一个列表中的项目进行优先级排序。 我可以提供<代码>(a,b)- 参数是否保证以与列表相同的顺序传递?

  • 本文向大家介绍Python定义函数实现累计求和操作,包括了Python定义函数实现累计求和操作的使用技巧和注意事项,需要的朋友参考一下 一、使用三种方法实现0-n累加求和 定义函数分别使用while循环、for循环、递归函数实现对0-n的累加求和 1、使用while循环 定义一个累加求和函数sum1(n),函数代码如下: 2、使用 for循环 定义一个累加求和函数sum2(n),函数代码如下: 3

  • 问题内容: 我总是在Python中听到此语句(关于主题(例如,装饰器等,当您传递函数等时)),但从未真正看到对此的详细说明。 例如,可以创建一个仅包含一个抽象方法的类,并使用一组开括号和闭括号将其调用。 这样你就可以 我在这里的理解可能使事情变得遥不可及,我只是对人们的含义感到好奇。 问题答案: 您正在寻找方法。函数对象具有该方法: 并不是说Python解释程序循环在遇到Python函数对象时实际

  • 问题内容: 说我有 我明白 会导致 [(’Able’,10),(’Dog’,15),(’Baker’,20),(’Charlie’,20)]] 但这如何工作? 问题答案: 传递给您的函数将获得要排序的每个项目,并返回Python可以排序的“键”。因此,如果要按字符串的 相反顺序 对字符串列表进行排序,可以执行以下操作: 这使您可以指定每个项目的排序依据值,而不必更改项目。这样,您不必构建反向字符串

  • 问题内容: 可以安全地假设函数参数在Python中是从左到右求值的吗? 参考文献指出,这种情况会发生,但是也许有某种方法可以更改此顺序,这可能会破坏我的代码。 我想做的是为函数调用添加时间戳: 我知道我可以按顺序评估参数: 但是它看起来不太优雅,因此如果可以依靠它,我宁愿采用第一种方法。 问题答案: 是的,Python始终从左到右评估函数参数。 据我所知,这适用于任何逗号分隔的列表: