如何编写返回循环的函数?

时间:2018-08-28 05:31:41

标签: python loops

我想知道一个函数是否可以返回循环?

我的代码如下:

DEDENT

当我打印它时,它返回:

输出:

def looping():
    a = [25,50,75,100, 200, 300]
    for x in a:
        return x
print(looping())

预期输出:

[25]

这可能吗?

3 个答案:

答案 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)

可以仅使用joinmap而无需循环:

>>> print('\n'.join(map(str,a)))

但是,如果您正在寻找一个循环,那么使用return是错误的处理方式,因为return会在第一次遇到该函数时就将其控制权还给您。本身。

相反,请使用yieldyield 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