python将位置参数传递给另一个函数调用

时间:2013-07-10 22:24:18

标签: python function-calls

有人可以向我解释下面的工作原理:

class Memoize:
    def __init__(self, f):
        self.f = f
        self.memo = {}
    def __call__(self, *args):
        if not args in self.memo:
            self.memo[args] = self.f(*args)
        return self.memo[args]

然后:

def factorial(k):
    if k < 2: return 1
    return k * factorial(k - 1)

factorial = Memoize(factorial)

这取自this question。我想了解self.f(*args)是如何工作的。 args是位置参数的元组。当我尝试做的时候:

*(1,2,3)

我收到语法错误。我认为解包运营商或其他类似的东西。带有元组的星号是否表示任何独立的含义,或仅存在于函数调用的上下文中?谢谢你的任何解释。

1 个答案:

答案 0 :(得分:0)

它是/解包运营商。但是,直接在解释器中调用它并不总是那样。看看这个:

In [90]: def addThese(a,b,c):
   ....:     print 'a', a
   ....:     print 'b', b
   ....:     print 'c', c
   ....:     print 'a+b+c', a+b+c
   ....:     return a+b+c
   ....: 

In [91]: args = (1,3,5)

In [92]: addThese(1,3,5)
a 1
b 3
c 5
a+b+c 9
Out[92]: 9

In [93]: addThese(args)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-93-cc47562f352a> in <module>()
----> 1 addThese(args)

TypeError: addThese() takes exactly 3 arguments (1 given)

In [94]: addThese(*args)
a 1
b 3
c 5
a+b+c 9
Out[94]: 9