Python:为循环体添加语句

Python:为循环体添加语句,python,Python,我有很多这样的for循环: 枚举(iter)中(i,elem)的 x=做某事1(i,元素) 做点什么2(我,元素) 我想用一堆打印语句来包装每个迭代,以便更清楚地说明发生了什么,例如: 枚举(iter)中(i,elem)的 打印(f“迭代{i}”) 打印(------------) x=做某事1(i,元素) 做点什么2(我,元素) 打印(“”) 请注意,我不打算在循环体的现有行之间插入print语句,只是为了将其环绕,也不打算在prints中使用除I以外的任何变量。 问题:有没有一种简单的方

我有很多这样的for循环:

枚举(iter)中(i,elem)的

x=做某事1(i,元素)
做点什么2(我,元素)
我想用一堆打印语句来包装每个迭代,以便更清楚地说明发生了什么,例如:

枚举(iter)中(i,elem)的

打印(f“迭代{i}”)
打印(------------)
x=做某事1(i,元素)
做点什么2(我,元素)
打印(“”)
请注意,我不打算在循环体的现有行之间插入print语句,只是为了将其环绕,也不打算在prints中使用除
I
以外的任何变量。

问题:有没有一种简单的方法(可能是
@decorator
-like语句)来避免复制粘贴?

旁注:您可以简化
(i,elem)
->
i,elem
print(“”
->
print()
这些循环在它们自己的函数中吗?将它们提取到一个高阶函数中是可行的。您还可以设置日志记录,以便轻松切换。这是相当普遍的。或者只做它自己的函数(调用doiSothTung1和doiAsthTung2)或者做一个装饰器。@ OnCeRekter,不,它们在其他代码的中间。肯尼·奥斯特罗姆:我不太明白你的意思:在这种情况下,我怎么做一个装饰师?我认为装饰器只适用于
def
s和
class
esSide注意:你可以简化
(I,elem)
->
I,elem
print(“”)
->
print()
这些循环在它们自己的函数中吗?将它们提取到一个高阶函数中会起作用。您还可以设置日志记录,以便轻松切换。这是相当普遍的。或者只做它自己的函数(调用doiSothTung1和doiAsthTung2)或者做一个装饰器。@ OnCeRekter,不,它们在其他代码的中间。肯尼·奥斯特罗姆:我不太明白你的意思:在这种情况下,我怎么做一个装饰师?我认为decorator只适用于
def
s和
class
esIt。这似乎只适用于所有循环都具有相同的主体的情况,以便将其提取到函数(
wrapper
)?在这种情况下,没有必要使用decorator我的英语不好,我试着理解你,我想你需要decorator这样做:)你可以使用
doFor(iter,withInfo)
wrapper(item,withInfo):如果withInfo:for with info其他:for withoutInfo
我想在循环体周围添加打印语句,但是尽可能少地修改代码:)以避免使用新函数。这似乎只有在所有循环都具有相同的主体时才起作用,以便可以将其提取到函数(
包装器
)?在这种情况下,没有必要使用decorator我的英语不好,我试着理解你,我想你需要decorator这样做:)你可以使用
doFor(iter,withInfo)
wrapper(item,withInfo):如果withInfo:for with info其他:for withoutInfo
我想在循环体周围添加打印语句,但是尽可能少地修改代码:),这样就不用使用新函数了。
iter = ("a", "b", "c")
iter2 = ("x", "y", "z", "t")

def do_something1(i, elem):
    print("do something 1")
    return 15

def do_something2(i, elem):
    print("do something 2")

def wrapForLoop(doFor):
    def wrapper(iter):
        for (i, elem) in enumerate(iter):
            print(f"Iteration #{i} - Elem #{elem}")
            print("----------")
            x = do_something1(i, elem)
            do_something2(i, elem)
            print("")
    return wrapper

@wrapForLoop
def doFor(iter):
    pass

doFor(iter)
doFor(iter2)