是否在循环的每次迭代中重新评估range()的参数?

时间:2017-11-13 15:56:49

标签: python performance range

如果我使用范围参数的函数,它们每次都会被调用吗?

for i in range(min(some_list), max(other_list)):
    ...

3 个答案:

答案 0 :(得分:1)

通过一些小实验很容易回答你的问题。

In [294]: def foo(n):
     ...:     print('in foo')
     ...:     return n
     ...: 

In [295]: for i in range(foo(5)):
     ...:     print(i)
     ...:     
in foo
0
1
2
3
4

所以,是的,range的参数只被评估一次,就像任何其他函数调用的参数一样。

答案 1 :(得分:0)

在评论中回答了stack_n_queue:

不,调用for i in range(min(some_list), max(other_list))不会导致作为参数传递的函数在range()的每次迭代中被调用

答案 2 :(得分:0)

在创建min对象/列表之前调用函数maxrange,即在函数调用之前计算参数表达式。

因此,他们只被召唤一次。