简体   繁体   English

带参数的虚拟函数装饰器

[英]Dummy function decorator with arguments

I am trying to write a dummy wrapper in the case where some module is not installed.我正在尝试在未安装某些模块的情况下编写一个虚拟包装器。 I have found this here :在这里找到了这个:

from functools import wraps

def jit(*args0, **kwargs0):
    def outer(func):
        @wraps(func)
        def inner(*args, **kwargs):
            return func(*args, **kwargs)
        return inner
    return outer

but I would like the wrapper to be as lightweight as possible (even if functools is standard, it is too much just for doing nothing), and to accept multiple parameters:但我希望包装器尽可能轻量级(即使 functools 是标准的,它只是为了什么都不做太多了),并接受多个参数:

@jit(nopython=True)
def myFunction(*args, **kwargs):
    return None

i have tried something like this :我试过这样的事情:

def jit(func, nopython, **kwargs2):
    def inner(*args, **kwargs):
        return func(*args, **kwargs)
    return inner    

But I get this exception :但我得到这个例外:

TypeError: jit() missing 1 required positional argument: 'func'   

Is there a standard way to create a simple wrapper like this?有没有标准的方法来创建这样的简单包装器?

Answer based on meta-decorators :基于元装饰器的答案:

def jit(*args0, **kwargs0):
    def wrapper(func):
        def inner(*args, **kwargs):
            return func(*args, **kwargs)
        return inner
    return wrapper

The first code snippet was entirely valid, and the functools.wrap method not needed.第一个代码片段完全有效,不需要 functools.wrap 方法。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM