Foreach循环具有一个特定迭代的附加行为

2024-03-28 22:03:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用foreach循环迭代一个列表,我想对我迭代的x中的一个做一些额外的事情(特别是下面代码中的cryoTemp)。我可以在循环体中使用一个简单的if语句来添加此功能,但它会在我的脑海中引发一个潜意识的“坏代码”警报,因为if语句在每次迭代时都会被求值,即使它只会求值一次为true。有没有一个更聪明,也许更“Python”的方式来做到这一点?你知道吗

for p in self.params:
    < get parameter p from server >
    < parse response >
    log_in_redis_and_mysql(p, value)

    # log cooling rate based on cryoTemp value
    if p == 'cryoTemp':
        self.pastCryoTemps.append(value)
        # calculate average of queue when it fills up then remove the oldest (first) element
        if (len(self.pastCryoTemps) == 4):
            differences = []
            for i in range(len(self.pastCryoTemps) - 1):
                differences.append(-(self.pastCryoTemps[i] - self.pastCryoTemps[i + 1]))
            average = sum(differences) / len(differences)
            log_in_redis_and_mysql('cooling_rate', average)
            self.pastCryoTemps.pop(0)

Tags: and代码inselfredislogforlen
1条回答
网友
1楼 · 发布于 2024-03-28 22:03:04

如果知道哪个索引具有特殊cased行为,可以执行以下操作:

for i, x in enumerate(y):
    if i == known_index:
        g(x)
    else:
        f(x)

如果不这样做,那么简单地对照谓词检查每个x也没有什么错。你知道吗

相关问题 更多 >