Python 3.6 inspect.signature() 不显示参数

dim*_*kor 0 python method-signature inspect python-3.x

我有一个功能:

def report(start=1, quantity=100, days_left=7, min_app_version=None):
Run Code Online (Sandbox Code Playgroud)

我想获取参数名称和默认值,例如

{'start':1, 'quantity':100, 'days_left':7, 'min_app_version':None}
Run Code Online (Sandbox Code Playgroud)

(或至少两个列表)来自此函数之外

当我做

import inspect
print(inspect.signature(report))
Run Code Online (Sandbox Code Playgroud)

我得到

(*args, **kwargs)

为什么“inspect.signature”看不到函数参数?

已解决:问题出在装饰器上

Pat*_*ugh 5

甚至比删除装饰器更好,您可以告诉装饰器使函数包装器看起来像使用检查工具的包装函数 functools.wraps

代替

def decorator(f):
    def wrapper(*args, **kwargs):
        print("Wrapped")
        return f(*args, **kwargs)
    return wrapper

@decorator
def report(start=1, quantity=100, days_left=7, min_app_version=None):
    pass

print(inspect.signature(report))
# (*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)

你可以做

from functools import wraps

def decorator(f):
    @wraps(f)
    def wrapper(*args, **kwargs):
        print("Wrapped")
        return f(*args, **kwargs)
    return wrapper

@decorator
def report(start=1, quantity=100, days_left=7, min_app_version=None):
    pass

print(inspect.signature(report))
# (start=1, quantity=100, days_left=7, min_app_version=None)
Run Code Online (Sandbox Code Playgroud)