Python将位置参数传递给另一个函数调用
Python将位置参数传递给另一个函数调用
这个问题已经有了答案:
请有人能向我解释以下内容的工作原理:
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)
这是从这个问题中得出的。 我想了解self.f(* args)
是如何工作的。 args
是一组位置参数的元组。 当我尝试执行以下操作时:
*(1,2,3)
我得到语法错误。 我以为它是某种类似于解包运算符之类的东西。 带有元组的星号意味着独立存在还是仅存在于函数调用的上下文中? 谢谢任何解释。
admin 更改状态以发布 2023年5月21日
这是一个解包操作符。然而,当直接在解释器中调用时,它并不总是按照这种方式工作。看看这个例子:
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)in () ----> 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