Python中表达式的执行顺序

时间:2013-03-27 22:28:22

标签: python

我正在学习python,这里有一个我无法得到的代码:

text = 'zip is very zipped'
print text.find('zip', text.find('zip') + 1)

现在,我知道这是完成的捷径:

text = 'zip is very zipped'
occur_once = text.find('zip')
print text.find('zip', occur_once + 1)

我在想,怎么做

print text.find('zip', text.find('zip') + 1)

工作以及Python以什么顺序评估这些表达式?是否有这种“执行命令”的名称?

3 个答案:

答案 0 :(得分:4)

Python使用strict (eager) evaluation strategy:在应用函数之前,始终完全评估函数的参数。评估订单left to right(评估分配时除外):

不下降到属性查找:

  1. 评估text.find(我们将结果命名为F1)
  2. 评估'zip'→A1
  3. 评估text.find→F2
  4. 评估'zip'→A2
  5. 致电F2.__call__(A2)(我们将调用返回值R1)(text.find('zip')
  6. 评估1→A3
  7. 致电R1.__add__(A3)(返回R2)(R1 + 1
  8. 致电F1.__call__(A1, R2)(返回最终结果)(text.find('zip', R2)

答案 1 :(得分:2)

Python将在函数调用中评估从左到右的参数,然后执行函数本身。

General evaluation order is left to right

答案 2 :(得分:1)

它被称为operator precedenceevaluation order。在表达式中,运算符优先级适用,每个表达式使用评估顺序。

text.find()调用位于+加法运算符之前,因为它具有更高的优先级。

对于同等优先级的运营商,评估从左到右进行。在函数调用中,每个参数都是一个单独的表达式,因此从左到右进行评估。