我在python中有一组函数,它们得到相同的2个参数+其他参数。

def myMethodA (param1, param2, specificParm)
    do code

 def myMethodB (param1, param2, specificParm1 specificParam2)
    do code

我想创建一个decorator,通过在调用函数之前按下参数,用前两个参数替换调用的需要:
@withParams()
def myMethodA (specificParam)
        do code

但是如果我省略了这些参数,那么decorator也不能调用它,如果我离开它们,那么调用者也需要指定它们。
无论如何要解决这个问题?
我可以用args*做些什么,但是仍然有specificParam的命名参数吗?
另外,我如何在myMethodA中引用param1和param2

最佳答案

听起来你可能想要functools.partial。它返回一个新函数,其中已指定了一些参数:

import functools

def withParams(func):
    return functools.partial(func,1,2)

@withParams
def myMethodA (param1, param2, specificParam):
    print(param1,param2,specificParam)

@withParams
def myMethodB (param1, param2, specificParam1, specificParam2):
    print(param1,param2,specificParam1, specificParam2)

myMethodA(10)
myMethodB(12,13)

1 2 10
1 2 12 13

关于python - 如何使用装饰器将参数发送给python中的函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45403514/

10-12 17:51