如何在不破坏循环的情况下返回值?
我想知道如何在不打破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
只会变得那么第一个答案退出循环,我不希望出现这种情况,我想返回多个元素到那循环的结束。
如何解决这个问题,有没有解决方法?
您可以为此创建一个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
,然后返回该列表,然后返回该列表,因此该列表可以被视为循环内“返回”的结果列表。
使用列表返回值的例子:
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
错误的做法
是的,这正是我寻找 – Lindow
希望这会为你))工作 –
使用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()
通过做
>>> val = next(g)
>>> print(v)
a
>>> v = next(g)
>>> print(v)
b
或者,在for循环中:现在,您可以通过它调用next()
访问与yield i
所有返回的元素
>>> for returned_val in myfunction():
... print(returned_val)
a
b
c
d
e
f
的问题是怎么样的外面的什么,我问了,但我应该在哪里在myfunction的呼吁'returned_val():'在Django,在模板还是模型? – Lindow
当你需要使用时调用它;我真的不知道你的设置/你想要达到什么目的,以便能够告诉你更多关于它的信息。 –
你想要什么是最容易名单切片表示:
>>> 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']
A yield
声明创建一个生成器是你想要的。
What does the "yield" keyword do in Python?
然后使用下一个方法从环路返回的每个值。
var = my_func().next()
很好的答案。实际上价值会'屈'而不是'返回' –
是非常好的一点 – BenJ
你可以把它分配给全局/类变量,但你不能没有打破循环,我知道 – 2016-01-23 20:45:23
这似乎像是在做什么,应该是相当简单的一种高度令人费解的方式回归。你能解释一下你的代码目标吗? 'myfunction'的目的是什么? – Gabriel
@DeliriousSyntax是的,我知道,但我想知道是否有为了一些方法来避免 – Lindow