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' 看不到函数参数?
已解决:问题是由装饰器引起的
如果有人遇到此错误,只需删除函数装饰器即可。
@time_count
def report(start=1, quantity=100, days_left=7, min_app_version=None):
您还可以帮助自己:
How to strip decorators from a function in Python
甚至比删除装饰器更好,您可以使用 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)
我有一个功能:
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' 看不到函数参数?
已解决:问题是由装饰器引起的
如果有人遇到此错误,只需删除函数装饰器即可。
@time_count
def report(start=1, quantity=100, days_left=7, min_app_version=None):
您还可以帮助自己: How to strip decorators from a function in Python
甚至比删除装饰器更好,您可以使用 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)