2017-09-15 73 views
0

我有一个返回整数列表的函数。Python:for循环'header'中的函数

def my_function(param: int)->list: 
    do_sth... 
    return list 

在另一个模块中,我有一个for循环迭代通过该函数的返回列表。 现在我的问题是:

for x in my_function(x): 
    do_sth... 

没有for循环调用这个函数的每一个回路或仅一次的开始?

+2

在你的功能(或打印)中添加一个全局计数器,你将得到你的答案。然而,我发现你的电话很奇怪,因为你在'for x in my_function(x)'中使用x两次' – Nathan

+4

[for循环评估它的表达式列表多少次?](https://stackoverflow.com/问题/ 24470072 /多少次 - 做一个for-loop-evaluate-its-expression-list) – Sayse

+1

* [“表达式列表被评估一次;它应该产生一个可迭代的对象。“](https://docs.python.org/3/reference/compound_stmts.html#for)* – poke

回答

1

其实答案是只能调用一次,当你做以下事情:

for x in my_function(x): 
    do_sth... 

创建my_function(X)将首先进行评估,然后返回一个列表,这样的声明是这样的:

for x in [...]: 
    do_sth... 

您可以在创建my_function正文中添加打印功能,您将看到打印函数被调用一次。

1

这确实是this question的重复。然而,为了更清楚的解释(信用@Nathan)没有进入技术术语的缘故,这里有一个例子:

>>> def a(): 
...  print("a() was called") 
...  return [1, 2, 3, 4, 5] 
... 
>>> for i in a(): 
...  print(i) 
... 
a() was called 
1 
2 
3 
4 
5 

正如你可以在这里看到,该函数a()仅当for循环调用一次跑。

希望这有助于!