以下功能从服务器打印已安装的应用程序。
def getAppNames():
for app in service.apps:
print app.name
它工作得非常好,它会打印已安装的应用程序列表,如下所示:
App A
App B
App C
App D
App E
App F
然而,当我改变" print"到了"返回",我得到的只是" App A"。我已经看到了类似的问题,但我找不到解决方案,并探索了不同的方法。基本上我需要返回功能,如打印功能,我将不胜感激任何帮助。 感谢。
答案 0 :(得分:5)
return语句会导致您的函数立即退出。来自文档:
return使用表达式列表离开当前函数调用(或 无)作为返回值。
快速解决方法是将名称保存在临时列表中,然后返回列表:
def getAppNames():
result = []
for app in service.apps:
result.append(app.name)
return result
因为这是一件很常见的事情 - 迭代一个列表并返回一个新列表 - python为我们提供了一个更好的方法:list comprehensions。
您可以像这样重写上述内容:
def getAppNames:
return [app.name for app in service.apps]
这被认为是" pythonic"解决方案,这意味着它使用该语言的特殊功能,使常见任务更容易。
另一个" pythonic"解决方案涉及使用generator。创建生成器涉及按原样使用原始代码,但将return
替换为yield
。但是,这会影响您使用该功能的方式。由于您没有显示您如何使用该功能,因此我不会在此处显示该示例,因为它可能会增加混淆而不是清晰度。我只想说解决问题的方法有两种以上。
答案 1 :(得分:2)
有两种解决方案:
def getAppNames():
return [app.name for app in service.apps]
或
def getAppNames():
for app in service.apps:
yield app.name
与return
不同,yield
将保留在循环中。这在Python中称为“生成器”。然后,您可以使用list()
将生成器转换为列表或迭代它:
for name in getAppNames():
...
生成器的优点是它不必在内存中构建整个列表。
答案 2 :(得分:1)
您应该阅读有关Python的基本文档:)
试试这个:
def getAppNames():
return [app.name for app in service.apps]
答案 3 :(得分:1)
在返回语句后,函数"结束" - 它保留了函数,因此你的for循环实际上只进行了一次迭代。
要返回列表,您可以这样做 -
return [app for app in service.apps]
或只是 -
return service.apps
答案 4 :(得分:0)
第一次点击return
命令时,函数会返回,这就是为什么你只得到一个结果。
一些选项: