Python:如果有好的想法,可以用三元替换“单行”

时间:2015-04-23 09:19:03

标签: python python-3.x

在我目前正在维护的代码中,我经常会看到一行“如果'构造如下:

if self.verbose >= 1:
    print("Starting...")

我想将其替换为:

print("Starting...") if self.verbose >= 1 else None

甚至:

self.verbose >= 1 and print("Starting...")

在性能和/或可维护性方面,这是一个好主意还是一个坏主意?

编辑:虽然允许,但我不想将其变成完全单行,例如,if self.verbose >=1: print("Starting...")

2 个答案:

答案 0 :(得分:3)

两种情况的表现没有区别,但第一种情况更具可读性!

有关详细信息,请参阅有关条件表达式的PEP 308

答案 1 :(得分:3)

我不确定你为什么要这样做。我认为你提出的所有替代方案都不太可读。 (但这当然是主观的)

一般情况下删除病情怎么样?这至少会消除if的重复。

def print_verbose(self, *args, **kwargs):
    if self.verbose>=1:
        print(*args, **kwargs)

...
self.print_verbose("Starting...")

甚至迁移到使用已经支持不同日志记录级别的logging模块。使用已配置的日志记录,这将变为:(前提是通过logger为此模块创建logging.getLogger()

logger.verbose("Starting")

关于性能......如果你写if的方式实际上对这个程序的性能很重要,那么Python本身可能不是一个好主意;)(差异将以纳秒为单位测量,很可能不会没关系)