提问人:Eric.L 提问时间:6/15/2017 最后编辑:ouflakEric.L 更新时间:12/7/2022 访问量:170259
如何使用“return”从循环中取回多个值?我可以把它们放在一个列表中吗?
How can I use `return` to get back multiple values from a loop? Can I put them in a list?
问:
我有一些代码可以从名为cal
def show_todo():
for key, value in cal.items():
print(value[0], key)
但是,我想将此代码用作 Discord 机器人的一部分。为了使机器人正常工作,我需要将数据发送到另一个函数,该函数实际上会将消息发送到 Discord 聊天。如上所述使用意味着消息显示在我的本地控制台窗口中,并且聊天只看到 .return
print
None
我试图通过改用以下方式来修复它:return
def show_todo():
for key, value in cal.items():
return(value[0], key)
但这样一来,for 循环就无法正常工作。我最多只能从字典中得到一个键值对。
如何解决此问题以便返回所有数据?
答:
7赞
Uriel
6/15/2017
#1
def show_todo():
for key, value in cal.items():
yield value[0], key
for value, key in show_todo():
print(value, key)
56赞
Chiheb Nexus
6/15/2017
#2
使用循环内部将破坏它并退出函数,即使迭代仍未完成。return
例如:
def num():
# Here there will be only one iteration
# For number == 1 => 1 % 2 = 1
# So, break the loop and return the number
for number in range(1, 10):
if number % 2:
return number
>>> num()
1
在某些情况下,如果满足某些条件,我们需要打破循环。但是,在当前代码中,在完成循环之前中断循环是无意的。
取而代之的是,您可以使用不同的方法:
生成数据
def show_todo():
# Create a generator
for key, value in cal.items():
yield value[0], key
你可以这样称呼它:
a = list(show_todo()) # or tuple(show_todo())
或者你可以遍历它:
for v, k in show_todo(): ...
将数据放入列表或其他容器中
将数据追加到列表中,然后在循环结束后返回:
def show_todo():
my_list = []
for key, value in cal.items():
my_list.append((value[0], key))
return my_list
或者使用列表推导式:
def show_todo():
return [(value[0], key) for key, value in cal.items()]
评论
0赞
Eric.L
6/15/2017
如何提取数据?如果我使用 print(show_todo()[0]),它会打印出 ['Science', 'Friday']。如何删除这些括号?对不起,但我对 python 和一般编程真的很陌生。
0赞
Chiheb Nexus
6/15/2017
print()
只会打印。但是,不要使用打印,而是使用.换句话说,将要打印的内容附加到列表中,然后返回它。my_list.append(...)
评论
for