Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在'中访问迭代器;对于';循环,在循环之前_Python_For Loop_Oop_Conditional Statements - Fatal编程技术网

Python 在'中访问迭代器;对于';循环,在循环之前

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

我正试图在像这样的“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”是函数的参数。

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循环内部更改它,或者你可以尝试使用线程,否则我仍然不知道你想要什么。