当前位置:  开发笔记 > 编程语言 > 正文

将参数传递给装饰器函数

如何解决《将参数传递给装饰器函数》经验,为你挑选了1个好方法。

谁能告诉我如何将参数传递给装饰器调用函数?

def doubleIt(Onefunc):
    def doubleIn():
        return Onefunc()*Onefunc()
    return doubleIn

@doubleIt
def Onefunc():  
    return 5

print(Onefunc()) # it prints out 25. 

但是,当我尝试升级Onefunc()到:

@doubleIt
def Onefunc(x):
    return x

我面临以下错误:

TypeError                                 
Traceback (most recent call last)
 in ()
      9 
     10 
---> 11 print(Onefunc(5))
     12 

TypeError: doubleIn() takes 0 positional arguments but 1 was given

错误是自我解释,但我不知道如何更新doubleIn()函数来处理它.



1> styvane..:

您需要传入可选的位置和关键字参数.

from functools import wraps

def doubleIt(Onefunc):

    @wraps(Onefunc)
    def doubleIn(*args, **kwargs):
        return Onefunc(*args, **kwargs) * Onefunc(*args, **kwargs)
    return doubleIn

@doubleIt
def Onefunc(x):
    return x

print(Onefunc(5))


这是最常见,最强大和(通常)Pythonic方式.
推荐阅读
家具销售_903
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有