Python'if'在赋值中可以接受吗?

时间:2012-08-18 16:53:43

标签: python

星期五我与某人就下面的建设进行了讨论:

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(在这种情况下,我必须完全重复。

3 个答案:

答案 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语法,或至少足以谷歌其余的。

相关问题