gpt4 book ai didi

python - 是否可以将装饰器应用于 python 中的一行?

转载 作者:行者123 更新时间:2023-12-01 00:53:34 25 4
gpt4 key购买 nike

正如您现在所看到的,装饰器的常见用法例如:

@log
def func(...)

实际上以 func 作为参数返回一个以 func 作为参数的函数,例如:

def log(func):
def function_wrapper(*args , **kwargs):
log_enter_func(func, args, kwargs)

result = func(*args, **kwargs)
log_exit_func(func, result )
return result

在上面的代码中,函数调用和返回的日志记录很好,不需要手工制作 log (...) 条目,只需在函数上使用 @log 装饰器。因此测试后很容易删除,因此记录日志不消耗时间。

但是是否可以将其仅卡在代码行上?就像 for 循环等,所以类似:

def func(...):
...
@log
for x in range(whatever)

将该行视为函数的软函数,访问 x 的一些参数,无论什么(行中的变量和代码)导致实际上所有内容都是 python 中的函数?

或者也许有某种方法可以将装饰器应用于方法并将其传播到函数中的源代码行?

这个想法是对每一行发生的事情进行简短的记录,而不需要大量的手写日志条目,例如日志信息(消息)在很多行代码中

对此有什么想法吗?我尝试检查该功能。 __ code __ 内置,但它是 python 字节码,而不是源代码...

最佳答案

这正是上下文管理器的用途。这些由 with block 触发,并定义在进入和退出该 block 时运行的代码。

参见the documentation .

关于python - 是否可以将装饰器应用于 python 中的一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56396219/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com