如何在 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)
任务存储在名为cal
的dict
中。但为了让机器人真正发送消息,我需要使用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 语句?的主要内容,如果未能解决你的问题,请参考以下文章