我想知道一个函数是否可以返回循环?
我的代码如下:
DEDENT
当我打印它时,它返回:
输出:
def looping():
a = [25,50,75,100, 200, 300]
for x in a:
return x
print(looping())
预期输出:
[25]
这可能吗?
答案 0 :(得分:6)
首先,您现有代码的问题在于,一旦return
,该函数就结束了。因此,您只需返回第一个值就可以了。
函数不能返回循环,因为循环不是一种值。
一个函数可以返回一个 iterable ,它是一个可以循环的值。有几种方法可以做到这一点:
与其他大多数答案一样,您可以使用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')
尽管在这种情况下,我认为循环是完全合理的,所以如果您对此感到满意,请坚持下去。
答案 1 :(得分:2)
如果只想输出列表的内容,则可以使用.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)
答案 2 :(得分:1)
可以仅使用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)
#driver值:
IN : a = [25,50,75,100, 200, 300]
OUT: 25
50
75
100
200
300