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

6 浏览
0 Comments

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

这个问题已经有了答案:

**(双星号/星号)和*(星号/星号)对参数有什么影响?

* args和** kwargs是什么意思?【重复】

请有人能向我解释以下内容的工作原理:

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日
0
0 Comments

这是一个解包操作符。然而,当直接在解释器中调用时,它并不总是按照这种方式工作。看看这个例子:

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

0