如何在 for 循环中使用 return 语句?

Posted

技术标签:

【中文标题】如何在 for 循环中使用 return 语句?【英文标题】:How to use a return statement in a for loop? 【发布时间】:2017-11-17 18:21:59 【问题描述】:

所以我正在开发一个不和谐的聊天机器人,现在正在开发一个可以用作待办事项列表的功能。我有一个命令可以将任务添加到列表中,它们存储在一个字典中。但是我的问题是以更易读的格式返回列表(请参阅pictures)。

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

任务存储在名为caldict 中。但为了让机器人真正发送消息,我需要使用return 语句,否则它只会将其打印到控制台而不是实际聊天(请参阅pictures)。

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

这是我尝试修复它的方法,但由于我使用了return,for 循环无法正常工作。

那么我该如何解决这个问题?如何使用 return 语句,以便将其打印到聊天而不是控制台?

【问题讨论】:

可以在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()]

【讨论】:

如何提取数据?如果我使用 print(show_todo()[0]) 它会打印出 ['Science', 'Friday']。如何删除这些括号?对不起,但我对 python 和一般编程真的很陌生。 print() 只会打印。但不要使用打印,而是使用my_list.append(...)。换句话说,将要打印的内容附加到列表中,然后返回。【参考方案2】:

使用generator 语法(SO here 的优秀解释):

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

for value, key in show_todo():
    print(value, key)

【讨论】:

【参考方案3】:

你永远不能迭代地返回一些东西。只需返回一个列表并对其进行迭代即可获得结果。

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

【讨论】:

更简单:return list(cal.items())

以上是关于如何在 for 循环中使用 return 语句?的主要内容,如果未能解决你的问题,请参考以下文章

return 语句中的 for 循环

关于breakcontinue和return

for循环中缺少return语句

如何用 C# 中的函数语句替换 for 循环?

return break 和continue在for循环中的不同作用

return break 和continue在for循环中的不同作用