假设我写了一个for循环,它将输出所有数字1到x:
x=4
for number in xrange(1,x+1):
print number,
#Output:
1
2
3
4
现在,将相同的for循环放入一个函数中:
def counter(x):
for number in xrange(1,x+1):
return number
print counter(4)
#Output:
1
为什么当我将for循环放入函数中时,我只获得一个值?
我一直在通过将for循环的所有结果附加到列表中,然后返回列表来避免这个问题。
为什么for循环会附加所有结果,而不仅仅是一个结果?:
def counter(x):
output=[]
for number in xrange(1,x+1):
output.append(number)
return output
返回所有值的最佳方法是什么,将其附加到列表中似乎效率很低。
return
的作用与关键字名称所暗示的完全相同。当您点击该语句时,它将返回,并且不执行该函数的其余部分。
您可能需要的是yield
关键字。这将创建一个生成器函数(一个返回生成器的函数)。生成器是可迭代的。每次执行yield
表达式时,它们"生成"一个元素。
def func():
for x in range(10):
yield x
generator = func()
for item in generator:
print item
您想要的被称为生成器:
def counter(x):
for number in xrange(1,x+1):
yield number
然后你会这样使用它:
c = counter(5)
next(c) # 1
next(c) # 2
您还可以通过执行以下操作来消耗整个生成器
xs = list(c) # xs = [1, 2, 3, 4, 5]
请参阅:http://docs.python.org/2/tutorial/classes.html#generators了解更多信息。
Python中的return语句从函数返回,不保存任何状态。每次调用函数时,都会创建一个新的堆栈框架收益率另一方面是(或多或少)Python的连续性的等价性
一旦函数中出现return
,函数将结束,剩余的代码将不再执行。你的第二个解决方案是好的,如果你想要更好的解决方案,你可以使用生成器:
def counter(x):
for number in xrange(1,x+1):
yield number
然后你可以这样使用它:
>>> for i in counter(5):
... print i
...
1
2
3
4
5