首页 > 解决方案 > 在循环之前访问“for”循环中的迭代器

问题描述

我正在尝试像这样在“for”循环之前访问迭代器“obj”

class MyClass:
    CLASS_CONST1 = 'some_rand_const'

    def __init__(self, type, age):
        self.type = type
        self.age = age

var1 = 5
age = 7

# # I tried to individually add the following lines here, none of them work
# obj = MyClass
# obj = MyClass()

condition = obj.type == MyClass.CLASS_CONST1

if var1 > 10:
    condition = obj.type == MyClass.CLASS_CONST1 and obj.age == age

list_of_objects = [MyClass('rand1', 'rand2'), MyClass('rand1', 'rand2'), MyClass('rand1', 'rand2')]

for obj in list_of_objects:
    if condition:
        # do some stuff
        pass


问题是它在定义之前被访问(它在 for 循环中定义)。而且我不想在'for'循环中引入条件行,因为这些行将在每次迭代中执行,并且没有必要这样做。

这个想法是所有这些都进入一个函数,'var1'和'age'是函数的参数。

标签: pythonfor-loopoopconditional-statements

解决方案


您声明condition为一个简单的布尔变量,而它的值必须取决于obj. 您可以使用一堆函数并将条件分配给相关的函数,或者由于您的条件很简单,您可以使用 lambda:

条件 = obj.type == MyClass.CLASS_CONST1

if var1 > 10:
    condition = lambda obj: obj.type == MyClass.CLASS_CONST1 and obj.age == age
else:
    condition = lambda obj: obj.type == MyClass.CLASS_CONST1

然后将其用作变量函数:

for obj in list_of_objects:
    if condition(obj):
        # do some stuff
        pass

推荐阅读