Python:返回函数不会返回列表

时间:2014-05-09 13:00:43

标签: python return

以下功能从服务器打印已安装的应用程序。

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"。我已经看到了类似的问题,但我找不到解决方案,并探索了不同的方法。基本上我需要返回功能,如打印功能,我将不胜感激任何帮助。 感谢。

5 个答案:

答案 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命令时,函数会返回,这就是为什么你只得到一个结果。

一些选项:

  • 使用'产量'至yield结果并使该功能充当发电机
  • 收集列表(或其他一些集合)中的所有项目并将其返回。