在Python3.6中,是否有一种装饰风格的语法可以用于for循环?

在Python3.6中,是否有一种装饰风格的语法可以用于for循环?,python,syntax,progress-bar,decorator,tqdm,Python,Syntax,Progress Bar,Decorator,Tqdm,我发现自己经常在Python中使用progressbars的TQM修改iterables,我想知道是否有一个快捷方式可以实现这一点。有时候,我的iterables是非常长的复杂对象,所以找到括号应该放在哪里是很乏味的 在for循环上使用这些类型的方法是否有装饰风格的语法? @tqdm_decorator_style_object for element in data: print(element) # 100%|██████████| 3/3 [00:00<00:00, 5300

我发现自己经常在Python中使用progressbars的
TQM
修改iterables,我想知道是否有一个快捷方式可以实现这一点。有时候,我的iterables是非常长的复杂对象,所以找到括号应该放在哪里是很乏味的

在for循环上使用这些类型的方法是否有装饰风格的语法?

@tqdm_decorator_style_object
for element in data:
    print(element)
# 100%|██████████| 3/3 [00:00<00:00, 5300.30it/s]
# a
# b
# c
例如:

# Regular for-loop
data = list("abc")

for element in data:
    print(element)
# a
# b
# c

# Progressbar
for element in tqdm(data):
    print(element)
# 100%|██████████| 3/3 [00:00<00:00, 5300.30it/s]
# a
# b
# c

我知道装饰程序要修改函数,但我想知道是否有类似的东西可以用于非函数事件。如果不是,在Python中引入这种类型的功能会有多困难?

装饰for循环可以被认为与装饰iterable的
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

因为大多数(如果不是全部)预定义对象的
。\uuuuuuuuuuuuuuuuuuuuu next()
函数是只读的,所以您必须非常狡猾

解决这个问题的一个简单方法是修饰自定义类的
\uuuu next\uuuu()
函数

def timesTwo(f):
    def wrapper(*args,**kwargs):
        return f(*args,**kwargs)*2
    return wrapper

class wrapIter():
    def __init__(self,f):
        self.f = f

    @timesTwo
    def __next__(self):
        return self.f.__next__()

    def __iter__(self):
        self.f = self.f.__iter__()
        return self

data = [1,2,3,4]
for x in wrapIter(data):
    print(x)

Output: 2 4 6 8

这可能有点笨重,但希望您能找到它的一些好用途。

装饰for循环可以被认为与装饰iterable的
\uuuuuuu next\uuuu()
函数相同

因为大多数(如果不是全部)预定义对象的
。\uuuuuuuuuuuuuuuuuuuuu next()
函数是只读的,所以您必须非常狡猾

解决这个问题的一个简单方法是修饰自定义类的
\uuuu next\uuuu()
函数

def timesTwo(f):
    def wrapper(*args,**kwargs):
        return f(*args,**kwargs)*2
    return wrapper

class wrapIter():
    def __init__(self,f):
        self.f = f

    @timesTwo
    def __next__(self):
        return self.f.__next__()

    def __iter__(self):
        self.f = self.f.__iter__()
        return self

data = [1,2,3,4]
for x in wrapIter(data):
    print(x)

Output: 2 4 6 8

这可能有点笨重,但希望您能找到它的一些好用途。

不,没有。但是为什么不仅仅是
it=
,然后在TQM(it)
中为x添加
:这就是我一直在做的事情,但是如果可以使用decorator选项,我将把这个想法扩展到更多的事情。谢谢你的建议!不,没有。但是为什么不仅仅是
it=
,然后在TQM(it)
中为x添加
:这就是我一直在做的事情,但是如果可以使用decorator选项,我将把这个想法扩展到更多的事情。谢谢你的建议!