如何以这种特殊方式使用多个返回值函数?

时间:2014-02-18 18:29:29

标签: python django

我有一个返回两个值的函数:

def dbfunc:
  # ...
  return var1, var2

我有这堂课:

class MyClass:
  foo = ...
  bar = ...

我想将dbfunc()的结果分配给我正在尝试创建的MyClass实例。 我试过这个:

my_object = MyClass(dbfunc()) # does not work because the return type is a tuple

我可以这样做:

res = dbfunc()
my_object = MyClass(foo=res[0], bar=res[1])

但我实际上是在一个综合列表的中间尝试这样做,所以我不能做出这种“预先做作”。我必须在一次这样做。

感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

Argument unpacking

my_object = MyClass(*dbfunc())

在函数的最后一个参数之前加上*,Python将迭代该参数并将元素作为单独的位置参数传递给函数。您可以将**与dict一起用于关键字参数。

此外,您可能会遇到有关类与实例属性的错误。请参阅“How do I avoid having Python class data shared among instances?”。它可能会或可能不会很好,具体取决于您剥离的MyClass部分。

答案 1 :(得分:0)

您可以更简单地定义您的功能和您的课程,如下所示。

def dbfunc:
    # ...
    return var1, var2

class MyClass:
    def __init__(foo, bar):
        self.foo = name
        self.bar = bar

[var1, var2] = dbfunc()
my_object = MyClass(var1, var2)