如何使用“return”从循环中取回多个值?我可以把它们放在一个列表中吗?

How can I use `return` to get back multiple values from a loop? Can I put them in a list?

提问人:Eric.L 提问时间:6/15/2017 最后编辑:ouflakEric.L 更新时间:12/7/2022 访问量:170259

问:

我有一些代码可以从名为cal

def show_todo():
    for key, value in cal.items():
        print(value[0], key)

但是,我想将此代码用作 Discord 机器人的一部分。为了使机器人正常工作,我需要将数据发送到另一个函数,该函数实际上会将消息发送到 Discord 聊天。如上所述使用意味着消息显示在我的本地控制台窗口中,并且聊天只看到 .returnprintNone

我试图通过改用以下方式来修复它:return

def show_todo():
    for key, value in cal.items():
        return(value[0], key)

但这样一来,for 循环就无法正常工作。我最多只能从字典中得到一个键值对。

如何解决此问题以便返回所有数据?

Python 函数 返回

评论

0赞 Nimeshka Srimal 6/15/2017
可以在 for 循环中调用函数,而无需直接打印或返回值
1赞 Karl Knechtel 7/3/2022
此问题已成为有关从代码(包括循环)返回多个值的问题的规范重复目标。因此,我在某种程度上人为地对其进行了编辑,以使其在这种情况下尽可能有用。for

答:

7赞 Uriel 6/15/2017 #1

使用生成器语法(此处对 SO 的出色解释):

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(...)