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



我想知道如何在不破坏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只会得到第一个答案然后离开循环,我不想这样,我想返回多个元素直到循环结束。

如何解决这个问题,有什么解决方案吗?

您可以为此创建一个生成器,以便可以从生成器中yield值(使用 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 = next(my_simple_gen) # 0
second_return = next(my_simple_gen) # 1

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

使用列表返回值的示例:

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)

注意:在带有列表的方法中,您必须知道函数将在results列表中返回多少个值以避免too many values to unpack错误

使用生成器是一种可能的方法:

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']

创建生成器的yield语句是您想要的。

"yield"关键字在Python中有什么作用?

然后使用 next 方法获取从循环返回的每个值。

var = my_func().next()

最新更新