Python:迭代条件内的预定条件

标签 python python-2.7 loops conditional-statements

我需要迭代对象内的多个属性。每个属性都初始化为 None,并且在程序过程中每个属性都将存储一个单独的对象。我需要迭代 16 个属性,条件是这些属性将按预定顺序存储对象。例如,如果属性 10 为空,则属性 11 到 16 也将为空,因此我不需要迭代任何空属性。我的最初结果是对每个属性使用“if”语句,如下所示:

Class Object1:
    def __init__(self):
        self.attribute1=None
        self.attribute2=None
        self.attribute3=None
        self.attribute4=None
        ...

    def repeating_function(self):
        if self.attribute1!=None:
            self.attribute1.attribute=Callback1
        if self.attribute2!=None:
            self.attribute2.attribute=Callback2
        if self.attribute3!=None:
            self.attribute3.attribute=Callback3
        ...

但是,由于属性存储对象的顺序,我最终得到了这个:

class Object1:
    def __init__(self):
        self.attribute1=None
        self.attribute2=None
        self.attribute3=None
        self.attribute4=None
        self.attribute5=None

    def repeating_function(self):
        if self.attribute1!=None:
            self.attribute1.attribute=Callback1
            if self.attribute2!=None:
                self.attribute2.attribute=Callback2
                if self.attribute3!=None:
                    self.attribute3.attribute=Callback3
                    ...

基本上,我的问题是:第二个示例在迭代非空属性方面是否更有效。因为我在第二个示例中在条件内添加条件,所以我不确定哪种方法更有效。

最佳答案

您应该使用列表而不是单独的属性:

class MyClass(object):

    def __init__(self):
        self.attributes = []

有了这个,

  • 要添加属性,请使用 self.attributes.append(...);
  • 要了解有多少个(非 None)属性,请使用 len(self.attributes);
  • 要引用最终的非 None 属性,请使用 self.attributes[-1]

等等。

关于Python:迭代条件内的预定条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26203630/

相关文章:

python - 当多维形状是列表时,Numba 函数中的 NumPy 零不起作用

python - 减少大字典使用的内存

javascript - 带循环的最大公约数

python - 如何以彩色显示 tiff 文件?

python - 初始化应用服务器 : Failed to locate pgAdmin4. py 时发生错误,终止服务器线程

python - 在 Python 中清理属于不同语言的文本

Python 脚本不适用于双击

c# - 异步循环内的异步函数

python - Python 是否有一种方法可以在不显式分配计数器变量的情况下重复给定的次数?

python - xpath 转义 <> 内的所有内容,如何解决?抓取痧