【问题标题】:How can i return multiple lists from a function, retaining their names?如何从函数返回多个列表,保留它们的名称?
【发布时间】:2020-01-22 16:19:23
【问题描述】:

我有一个创建多个列表的函数,我想将它们返回到与函数中使用的名称相同的代码主体。

以下示例返回一个串联列表,然后通过对串联列表进行切片来重新创建各个列表(与函数中使用的名称相同)。

def my_function():

    # Some code which generates multiple lists

    my_list_1 = [1, 2, 3]

    my_list_2 = ['a', 'b', 'c']

    return [my_list_1, my_list_2]

    temp = my_function()

    my_list_1 = temp[0]

    my_list_2 = temp[1]

    print (my_list_1)

    print (my_list_2)

这种方法看起来很“笨拙”(完整的函数会创建大约 30 个列表),但我还没有找到更有效的方法。有吗?

自学python,这是我的第一篇文章,所以请放轻松:)。谢谢

【问题讨论】:

  • 你为什么需要他们作为my_list1 = temp[0]; my_list2 = temp[1]?在那之后你打算用my_list1my_list2做什么?这里的大局是什么?
  • 如果一个函数返回一个包含 30 个列表的列表,那么您是否需要将这 30 个子列表存储到另外 30 个列表变量中?
  • return my_list1, my _list2 并将其称为my_list_1, my_list_2 = my_function()
  • han solo - 列表中的数据将受制于各种其他功能等。我想保留它们的原始名称,因为它们对其中的内容具有高度描述性,以帮助我跟踪它们在其余代码。
  • 对象没有名字。变量有名字,但你不能传递变量。列表是对象;他们从来没有名字,你不能让 Python 自动将名字与列表一起带入。

标签: python list return


【解决方案1】:

如果你的函数返回很多结果,你应该考虑使用namedtuple

from collections import namedtuple

def my_function():
    Results = namedtuple('Results', ['my_list_1', 'my_list_2'])
    my_list_1 = [1, 2, 3]
    my_list_2 = ['a', 'b', 'c']

    return Results(my_list_1, my_list_2)

然后您可以通过字段名称访问结果

>>> results = my_function()
>>> results.my_list_1
[1, 2, 3]

>>> results.my_list_2
['a', 'b', 'c']

在命名元组上查看the docs

【讨论】:

  • 谢谢,“my_list_1, my_list_2 = my_function()” 方法效果很好,但仍然需要在函数之外再次“重复”所有字段名称。
【解决方案2】:

这是最pythonic的方式:

my_list_1, my_list_2 = my_function()

【讨论】:

    【解决方案3】:

    查看 *args 和 **kwargs 如果你有你的函数返回 [list1, list2] 你可以重构你的代码,以便

    list1, list2 = *my_function() 等等

    【讨论】:

      【解决方案4】:

      首先,您不必返回列表return [my_list_1, my_list_2],而只需返回return my_list_1, my_list_2。这将返回列表的元组,这是返回多个事物的更好方法(更合适)。

      为什么不直接使用temp 变量来访问列表,而不是创建my_list_1my_list_2 变量?话虽如此,如果需要,您可以将您的函数称为my_list_1, my_list_2 = your_function()

      另一种方法是返回一个字典:return { 'my_list_1': my_list_1, 'my_list_2': my_list_2 } 然后,您可以执行以下 sn-p (但是当键非常异构而不是枚举时很有用 my_list_N , index 在这种情况下就足够了)。

      returned_lists = your_function()
      print(returned_lists['my_list_1'])
      print(returned_lists['my_list_2'])
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-30
        • 1970-01-01
        • 2012-03-17
        • 1970-01-01
        相关资源
        最近更新 更多