有人可以向我解释下面的工作原理:
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)
我收到语法错误。我认为解包运营商或其他类似的东西。带有元组的星号是否表示任何独立的含义,或仅存在于函数调用的上下文中?谢谢你的任何解释。
答案 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