python - 如何在装饰器函数中打印函数默认参数?
问题描述
这是我的代码:
def test_deco(func):
def innrer_func(*args,**kwargs):
print('args : ',args)
print('kwargs : ',kwargs)
return func(*args , **kwargs)
return innrer_func
@test_deco
def add (x = 2, y= 3 ) :
return x + y
print(add())
这是我的输出:
args : ()
kwargs : {}
5
我的问题是为什么*args
和**kwargs
是空的,但我有正确的结果,我怎样才能通过x
和y
进入test_deco
?
解决方案
我必须使用inspect
模块来做到这一点。
import inspect
def test_deco(func):
def innrer_func(*args):
result = func(*args)
try:
print(f'{args[0]} + {args[1]} = {result}')
except IndexError:
default_args = inspect.getcallargs(func , *args)
print(f'{default_args["x"]} + {default_args["y"]} = {result} | Default Values')
finally:
return result
return innrer_func
@test_deco
def add (x = 5, y = 8 ) :
return x + y
推荐阅读
- python - 如何使用熊猫数据框作为其他数据框的条件
- python - Pandas:从交叉表到计数表
- java - RSA 加密在 Java 中导致 IllegalBlockSizeException
- css - 通过单击并拖动来选择 div flex 框
- php - 如何在 macOS Catalina 上的 PHP 7.3 下安装 intl 扩展?
- react-native - 使用 Image.getSize 函数反应本机问题
- graphql - GraphQL Stitching - 为什么子模式中的字段会返回 null?
- git - 自动设置多个推送 URL
- laravel - Laravel/nexmo 与 elasticsearch/elasticsearch 冲突您的要求或最低稳定性
- javascript - twbsPagination 不是函数