我正在学习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以什么顺序评估这些表达式?是否有这种“执行命令”的名称?
答案 0 :(得分:4)
Python使用strict (eager) evaluation strategy:在应用函数之前,始终完全评估函数的参数。评估订单为left to right(评估分配时除外):
不下降到属性查找:
text.find
(我们将结果命名为F1)'zip'
→A1 text.find
→F2 'zip'
→A2 F2.__call__(A2)
(我们将调用返回值R1)(text.find('zip')
)1
→A3 R1.__add__(A3)
(返回R2)(R1 + 1
)F1.__call__(A1, R2)
(返回最终结果)(text.find('zip', R2)
)答案 1 :(得分:2)
Python将在函数调用中评估从左到右的参数,然后执行函数本身。
答案 2 :(得分:1)
它被称为operator precedence和evaluation order。在表达式中,运算符优先级适用,每个表达式使用评估顺序。
text.find()
调用位于+
加法运算符之前,因为它具有更高的优先级。
对于同等优先级的运营商,评估从左到右进行。在函数调用中,每个参数都是一个单独的表达式,因此从左到右进行评估。