2024-04-25 07:56:49 发布
网友
可以让logger decorator打印修饰函数的变量名和值
def logger(f): def inner(*args): f(*args) print(vars()) return inner @logger def add(a,b): c = 5 d = a + b +c return d add(1,2)
输出:
{'args': (1, 2)}
预期产出:
{'d': 8, 'c': 5, 'b': 2, 'a': 1}
是的,您可以使用inspect模块获取有关传递给函数的参数的信息,也可以从func.__code__.co_varnames读取函数的所有局部变量
inspect
func.__code__.co_varnames
例如:
import inspect def logger(f): def inner(*args): print(f'signature: {inspect.signature(f)}') print(f'variables: {f.__code__.co_varnames}') return f(*args) return inner @logger def add(a,b): c = 5 d = a + b +c return d
结果:
>>> add(4,5) signature: (a, b) variables: ('a', 'b', 'c', 'd') 14
无法获取内部变量的值,但可以获取参数的值:
def logger(f): def inner(*args): print(f'signature: {inspect.signature(f).bind(*args)}') return f(*args) return inner
>>> add(9,10) signature: <BoundArguments (a=9, b=10)> 24
请注意Signature和BoundArguments都有额外的信息,如果您深入研究它们,您可以获得这些信息。有关更多信息,请参见^{} module docs
Signature
BoundArguments
是的,您可以使用
inspect
模块获取有关传递给函数的参数的信息,也可以从func.__code__.co_varnames
读取函数的所有局部变量例如:
结果:
无法获取内部变量的值,但可以获取参数的值:
结果:
请注意} module docs
Signature
和BoundArguments
都有额外的信息,如果您深入研究它们,您可以获得这些信息。有关更多信息,请参见^{相关问题 更多 >
编程相关推荐