星期五我与某人就下面的建设进行了讨论:
class C(....
c = C()
d = C()
...
(c if some_boolean else d).some_function_of_class_C()
这种if语句是否可以接受/鼓励?
问题在于,我工作的很多人都有C经验,但没有那么多的Python经验,也不习惯这样的陈述(与列表理解相同)。 但是,Python不是C,我认为应该使用Python语言的优点。 或者不是?
(顺便说一下,我使用普通的函数名和变量名,但这只是为了保持样本。我不仅调用f()而且还调用了一些函数(如f()。g(在这种情况下,我必须完全重复。
答案 0 :(得分:8)
您的代码在技术上没有任何问题,但看到这样的代码有点奇怪和令人惊讶。
将您的语句拆分为两个单独的语句可提高可读性:
c = c1 if some_boolean else c2
c.some_function_of_class_C()
您选择的可怕变量名称仍然让它看起来很糟糕。但是更改变量名也有助于提高可读性:
vehicle = plane if distance > 1000 else car
vehicle.travel()
在我看来,这是很多比您最初提出的更具可读性,而且只需要进行很小的改动。
答案 1 :(得分:3)
它在语法和语义上都是有效的,但肯定不是Pythonic。请考虑使用策略模式。
答案 2 :(得分:1)
从一种语言编写代码,但使用另一种语言的风格和限制从长远来看绝不是一个好主意。你的python代码应该始终是pythonic。
也就是说,确保您的代码是可读的,假设阅读代码的人理解python语法,或至少足以谷歌其余的。