如何使用 `return` 从循环中返回多个值?我可以将它们放在列表中吗?
- 2024-11-21 08:33:00
- admin 原创
- 168
问题描述:
我有一些代码可以从名为的全局字典中打印数据cal
:
def show_todo():
for key, value in cal.items():
print(value[0], key)
但是,我想将此代码用作 Discord 机器人的一部分。为了让机器人正常工作,我需要将return
数据传送到另一个函数,该函数实际上会将消息发送到 Discord 聊天。使用print
上述方法意味着消息显示在我的本地控制台窗口中,而聊天只会看到None
。
我尝试使用return
以下方法来修复它:
def show_todo():
for key, value in cal.items():
return(value[0], key)
但是这样,for循环就不能正常工作了。我最多只能从字典中获取一个键值对。
我该如何修复此问题以便返回所有数据?
解决方案 1:
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()]
解决方案 2:
使用生成器语法(这里有关于SO的出色解释):
def show_todo():
for key, value in cal.items():
yield value[0], key
for value, key in show_todo():
print(value, key)
相关推荐
热门文章
项目管理软件有哪些?
热门标签
云禅道AD