Hir*_*uri 2 python function return-value
我想知道如何在不破坏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()
Run Code Online (Sandbox Code Playgroud)
return 只会得到第一个答案,然后离开循环,我不希望这样,我想返回多个元素,直到该循环结束.
如何解决这个问题,有什么解决方案吗?
你可以为它创建一个生成器,这样你就可以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
Run Code Online (Sandbox Code Playgroud)
您也可以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)
Run Code Online (Sandbox Code Playgroud)
注意:在带有列表的方法中,您必须知道函数将在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()
Run Code Online (Sandbox Code Playgroud)
现在,您可以yield i通过调用next()它来访问返回的所有元素:
>>> val = next(g)
>>> print(v)
a
>>> v = next(g)
>>> print(v)
b
Run Code Online (Sandbox Code Playgroud)
或者,在for循环中执行以下操作:
>>> for returned_val in myfunction():
... print(returned_val)
a
b
c
d
e
f
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6819 次 |
| 最近记录: |