gpt4 book ai didi

python - 有没有办法在 Python 中对函数的每一行进行修饰/执行操作?

转载 作者:太空宇宙 更新时间:2023-11-03 13:49:09 25 4
gpt4 key购买 nike

假设我有一个函数或方法在执行它所做的每个操作之前重复执行某些操作,例如检查值,如下所示:

def myfunc():
if mybool:
do_operation_1()
else:
return

if mybool:
do_operation_2()
else:
return

...

这些检查变得重复,最终会浪费大量时间和键盘 Spring ,尤其是在经常需要它们的时候。

如果您可以控制操作函数,例如 do_operation_N,您可以用检查 bool 值的东西来修饰函数。

但是,如果您无法控制单个 do_operation_N 操作怎么办?如果对于函数或方法中的每一行,我都希望执行相同的检查,是否有某种方法可以“插入”它而无需在每个操作行上明确写入它?例如,是否有一些装饰魔术可以让我执行以下操作?

def magic_decorator(to_decorate):
def check(*args, **kwargs):
for call in to_decorate: #magic
if mybool:
to_decorate.do_call(call) #magic
else:
return #or break, raise an exception, etc
return check

@magic_decorator
def myfunc():
do_operation_1()
do_operation_2()
...

如果有办法做到这一点,我不关心它是否使用装饰器;我只想用某种方式说“对于函数/方法 X 中的每一行,先执行 Y”。

上面的 do_call 方法的“神奇”示例是我所追求的简写,但它会遇到个别行的乱序执行的严重问题(例如,如果函数的第一行是变量赋值,第二行是变量的使用,乱序执行会导致问题)。

明确一点:外部控制函数执行的逐行顺序的能力不是我想要实现的目标:理想情况下,我只是实现一些东西,按照自然的执行顺序,每次 myfunc 做某事时都会执行一个操作。如果“做某事”最终被限制为“调用函数或方法”(不包括赋值、if 检查等),那很好。

最佳答案

按顺序存储您的操作,然后使用循环:

ops = (do_operation_1, do_operation_2, do_operation_3)

for op in ops:
if mybool:
op()
else:
return

关于python - 有没有办法在 Python 中对函数的每一行进行修饰/执行操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13198821/

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