Python 在'中访问迭代器;对于';循环,在循环之前
我正试图在像这样的“for”循环之前访问迭代器“obj”Python 在'中访问迭代器;对于';循环,在循环之前,python,for-loop,oop,conditional-statements,Python,For Loop,Oop,Conditional Statements,我正试图在像这样的“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
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”是函数的参数。
obj=MyClass
只是将类对象(而不是实例)分配给另一个变量obj=MyClass()
将抛出一个错误,因为您没有为类型和年龄
提供\uuuuu init\uuuu
中所需的值。您是否尝试过obj=MyClass(var1,age)
?您后来为对象列表
执行了此操作
无论如何,您已经尝试将条件
创建为一个变量,该变量应该在迭代过程中应用自身。Python不是这样工作的。当它被计算一次时,它被赋予一个静态值。要使其应用于所有对象,请将条件
作为函数,将对象或两个变量类型
和变量
作为参数,然后返回检查结果:
var1=5
年龄=7
def状况(obj):
#将返回下面检查的真/假结果
返回obj.type==MyClass.CLASS_CONST1和obj.age==age
对于对象列表中的对象:
if条件(obj):#使用该对象调用函数
#做点什么
通过
从您的代码中,不清楚您在条件下想要什么。也许是这个
var1=5#或者将它们放在“条件”中,使它们是本地的
年龄=7#适合条件,而非全局。
#或者将它们作为参数传入,并修改“条件”以接受
#附加参数
def状况(obj):
结果=obj.type==MyClass.CLASS\u CONST1
如果结果和变量1>10:
#不要重新检查'obj.type==MyClass.CLASS\u CONST1`
结果=对象。年龄==年龄
返回结果
您将条件
声明为一个简单的布尔变量,而其值必须取决于obj
的当前值。您可以使用一组函数并将条件分配给相关函数,或者由于条件很简单,您可以使用lambdas:
条件=obj.type==MyClass.CLASS\u 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
你到底想达到什么目的?您希望在每次迭代中使用以下参数执行函数:obj.type
和obj.age
,因为只要这样做,每次迭代都会执行:func(obj.type,obj.age)
基于“var1”,“for”循环中的“条件”会发生变化。我怎样才能在for循环之外更改condition?你只能在for循环之前更改一次,除非你在for循环内部更改它,或者你可以尝试使用线程,否则我仍然不知道你想要什么。