繁体   English   中英

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

[英]Python 3.6 inspect.signature() doesn't show arguments

我有一个功能:

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

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

{'start':1, 'quantity':100, 'days_left':7, 'min_app_version':None}

(或至少两个列表)来自此功能之外

当我做

import inspect
print(inspect.signature(report))

我懂了

(* args,** kwargs)

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

解决:问题是因为装饰器

甚至比删除装饰器更好,您可以告诉装饰器使用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)

你可以做

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)

如果有人遇到此错误,只需删除函数装饰器即可。

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

您还可以帮助您: 如何从Python函数中剥离装饰器

暂无
暂无

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

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