如何在不中断循环的情况下返回值?

2024-04-19 21:12:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道如何在不中断Python循环的情况下返回值。

下面是一个示例:

def myfunction():
    list = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
    print(list)
    total = 0
    for i in list:
        if total < 6:
            return i  #get first element then it breaks
            total += 1
        else:
            break

myfunction()

return只会得到第一个答案然后离开循环,我不希望这样,我希望返回多个元素直到循环结束。

怎么解决这个问题,有什么解决办法吗?


Tags: in示例forgetreturnifdef情况
3条回答

使用generator是一种可能的方法:

def myfunction():
    l = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
    total = 0
    for i in l:
        if total < 6:
            yield i  #yields an item and saves function state
            total += 1
        else:
            break

g = myfunction()

现在,您可以通过调用next()来访问yield i返回的所有元素:

>>> val = next(g)
>>> print(v)
a
>>> v = next(g)
>>> print(v)
b

或者,在for循环中执行以下操作:

>>> for returned_val in myfunction():
...    print(returned_val)
a
b
c
d
e
f

列表切片最容易表达您的需求:

>>> l = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']
>>> l[:6]
# ['a', 'b', 'c', 'd', 'e', 'f']

或者创建另一个列表,并在函数结束时返回。

def myfunction():
    l = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']
    ret = []

    total = 0
    for i in l:
        if total < 6:
            total += 1
            ret.append(i)

    return ret

myfunction()

# ['a', 'b', 'c', 'd', 'e', 'f']

可以为此创建一个generator,这样就可以从生成器中yield值(使用yield语句后,函数将成为生成器)。

请参阅下面的主题以更好地了解如何使用它:

使用生成器的示例:

def simple_generator(n):
    i = 0
    while i < n:
        yield i
        i += 1

my_simple_gen = simple_generator(3) // Create a generator
first_return = my_simple_gen.next() // 0
second_return = my_simple_gen.next() // 1

此外,您还可以在循环开始之前创建一个list,并将append项创建到该列表,然后返回该列表,因此该列表可以被视为循环中“返回”的结果列表。

使用list返回值的示例:

def get_results_list(n):
    results = []
    i = 0
    while i < n:
        results.append(i)
        i += 1
    return results


first_return, second_return, third_return = get_results_list(3)

注意:在使用list的方法中,您必须知道函数将在resultslist中返回多少值,以避免too many values to unpack错误

相关问题 更多 >