功能中的"返回"仅返回一个值

Noo*_*der 3 python printing for-loop return function

假设我写了一个for循环,将所有数字1输出到x:

x=4
for number in xrange(1,x+1):
    print number,
#Output:
1
2
3
4
Run Code Online (Sandbox Code Playgroud)

现在,将相同的for循环放入函数中:

def counter(x):
    for number in xrange(1,x+1):
        return number
print counter(4)
#Output:
1
Run Code Online (Sandbox Code Playgroud)

为什么在将for-loop放入函数时只获取一个值?

我一直在通过将for循环的所有结果附加到列表,然后返回列表来回避这个问题.

为什么for循环会附加所有结果,而不只是一个?:

def counter(x):
    output=[]
    for number in xrange(1,x+1):
        output.append(number)
    return output
Run Code Online (Sandbox Code Playgroud)

返回所有值的最佳方法是什么,附加到列表似乎非常低效.

mgi*_*son 9

return与关键字的名称完全相同.当您点击该语句时,它将返回并且不执行该函数的其余部分.

您可能需要的是yield关键字.这将创建一个生成器函数(一个返回生成器的函数).生成器是可迭代的.每次yield执行表达式时,它们"产生"一个元素.

def func():
    for x in range(10):
        yield x

generator = func()
for item in generator:
    print item
Run Code Online (Sandbox Code Playgroud)


Jam*_*lls 5

你想要的是一个发电机:

def counter(x):
    for number in xrange(1,x+1):
        yield number
Run Code Online (Sandbox Code Playgroud)

然后你会像这样使用它:

c = counter(5)
next(c)  # 1
next(c)  # 2
Run Code Online (Sandbox Code Playgroud)

您还可以执行以下操作来使用整个生成器:

xs = list(c)  # xs = [1, 2, 3, 4, 5]
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅:http://docs.python.org/2/tutorial/classes.html#generators.

Python中的return语句返回形式函数,不保存任何状态.每次调用该函数时,都会创建一个新的堆栈帧.产率,另一方面是(或多或少)Python的的equivilent continutations