python - 装饰时保留argspec?

标签 python

<分区>

Possible Duplicate:
How can I programmatically change the argspec of a function in a python decorator?

argspec 是获取函数参数的好方法,但当函数被修饰时它不起作用:

def dec(func):
    @wraps(func)
    def wrapper(*a, **k)
        return func()
    return wrapper


@dec
def f(arg1, arg2, arg3=SOME_VALUE):
    return

import inspect
print inspect.argspec(f)

-----------

ArgSpec(args=[], varargs='a', keywords='k', defaults=None)

Argspec 应返回 arg1arg2arg3。我想我需要以不同方式定义 wrapper,以便不使用 *a**k,但我不知道如何定义。

最佳答案

decorator 模块很好地保留了它们:

from decorator import decorator
@decorator
def dec(func, *a, **k):
    return func()

@dec
def f(arg1, arg2, arg3=1):
    return

import inspect
print inspect.getargspec(f)
ArgSpec(args=['arg1', 'arg2', 'arg3'], varargs=None, keywords=None, defaults=(1,))

您可能可以通过手动将一些 __foo__ 属性从函数复制到包装函数来获得相同的效果,但无论如何,装饰器模块证明了这是可能的,并且可能会为您提供一个起点。

关于python - 装饰时保留argspec?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12558505/

相关文章:

python - 从文本文件中提取两个括号之间的文本

python - 如何修复 'TypeError: cannot convert dictionary update sequence element #0 to a sequence'

python - 即使在 pretty_print=True 时,使用 lxml 编写也不会发出空格

python - 首先用嵌套的列标题创建一个大表,并让 latex 渲染来包装标题文本

python - 在 TensorFlow 中使用多个 CPU 内核

python - 有什么方法可以检测图像方向并将图像旋转到正确的角度吗?

python - 无法从 docker compose env 文件访问环境变量

python - 无需Windows专用工具即可向现有xlsx添加密码(无人值守)

python - 使用 NLTK 导入外部树库式 BLLIP 语料库

python - 在 python 2.7 中使用 Selenium 出现 StaleElementReferenceException 错误