python - Python 3.6 inspect.signature() 不显示参数
问题描述
我有一个功能:
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)
推荐阅读
- php - 多语种网站显示 按语言或默认发布
- android - 嵌套滚动中的华为地图
- javascript - 正则表达式以字符串中的最后两个空格为目标
- javascript - 我对零宽度空间的使用正在打破日期
- blazor - 初始化期间的 Blazor WASM 服务 HTTP 调用
- python - 如何将 2 个 CSV 数据框合并在一起进行比较?
- python - Selenium 无法与弹出的非新窗口菜单交互
- f# - 什么是“和!” 在 FsToolkit.ErrorHandling 的验证计算表达式中,在 F#
- python - DataFrames 列根据列表重新排列 - DataFrames 具有不同的列
- javascript - 在数据库中找不到数据时如何折叠图库和剥离