我想知道一个函数是否能返回一个循环?
我的代码如下:
def looping():
a = [25,50,75,100, 200, 300]
for x in a:
return x
print(looping())
当我打印它时,它会返回:
输出:
[25]
预期产出:
25
50
75
100
200
300
这个是可能的吗?
发布于 2018-08-27 21:50:19
首先,现有代码的问题是,一旦return
,函数就结束了。所以,只要返回第一个值,就完成了。
函数不能返回循环,因为循环不是一种值。
函数可以返回一个可迭代的值,这是一个可以循环的值。有几种方法可以做到这一点:
您可以使用yield
(在大多数其他答案中)来使您的函数成为生成器函数,因此它会返回一个迭代器来处理所有您的yield
。
但是,循环中的yield
只是执行yield from
的一种笨拙的方法,所以,您应该这样做:
def looping():
a = [25, 50, 75, 100, 200, 300]
yield from a
for x in looping():
print(x)
您可以直接返回迭代器:
def looping():
a = [25, 50, 75, 100, 200, 300]
return iter(a)
for x in looping():
print(x)
或者,最简单的是:序列就像列表一样,与迭代器一样可迭代。因此,如果您有一个列表,只需返回它:
def looping():
a = [25, 50, 75, 100, 200, 300]
return a
for x in looping():
print(x)
当我们这样做的时候,你甚至不需要一个明确的循环。您可以调用一个隐藏内部循环的函数,比如join
print('\n'.join(looping()))
或者您甚至可以将可直接迭代到print
的
print(*looping(), sep='\n')
虽然在这种情况下,我认为循环是完全合理的,所以如果您满意它,坚持它。
发布于 2018-08-27 21:38:10
如果您只想输出列表的内容,可以使用.join()
特性。
print("\n".join([str(x) for x in a]))
如果您想利用循环,请使用生成器,并将循环写到外部,如下所示。
def looping():
a = [25, 50, 75, 100, 200, 300]
for x in a:
yield x
for x in looping():
print(x)
发布于 2018-08-27 21:51:00
只需使用join
和map
就可以不使用循环就可以完成该任务:
>>> print('\n'.join(map(str,a)))
但是,如果它是您要寻找的一个循环,那么使用return
是错误的,因为return
会在其第一次遇到自己时从函数返回控件。
相反,使用yield
或yield from
:
可迭代的产量实质上只是
for item in iterable: yield item
的一种缩短形式。
>>> def looping():
a = [25,50,75,100, 200, 300]
yield from a
>>> for ele in looping():
print(ele)
#驱动程序值:
IN : a = [25,50,75,100, 200, 300]
OUT: 25
50
75
100
200
300
https://stackoverflow.com/questions/52050732
复制