4

星期五,我与某人讨论了以下构造:

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

4

3 回答 3

8

您的代码在技术上没有任何问题,但看到这样的代码有点奇怪和令人惊讶。

将您的语句分成两个单独的语句可以提高可读性:

c = c1 if some_boolean else c2
c.some_function_of_class_C()

你选择的可怕的变量名仍然让它看起来很糟糕。但更改变量名也有助于提高可读性:

vehicle = plane if distance > 1000 else car
vehicle.travel()

在我看来,这你最初提出的更具可读性,而且只做了很小的改动。

于 2012-08-18T16:57:08.280 回答
3

它在语法和语义上都是有效的,但它肯定不是 Pythonic。考虑改用策略模式。

于 2012-08-18T16:56:57.530 回答
1

从长远来看,用一种语言编写代码但使用另一种语言的风格和限制绝不是一个好主意。您的 python 代码应该始终是pythonic

也就是说,确保您的代码是可读的,假设阅读代码的人理解 python 语法,或者至少足以谷歌其余部分。

于 2012-08-18T16:59:04.067 回答