【发布时间】:2022-11-28 17:39:08
【问题描述】:
假设我有一个类有一个名为MyClass.name 的属性。我正在遍历一些数据,我想将名称安排为 MyClass.name 或 other。我有一个方法:
def return_name(self, the_name):
if the_name == self.name:
return the_name
else:
return 'other'
将方法重写为:
def return_name(self, the_name):
return the_name * (self.name == the_name) + 'other' * (self.name != the_name)
我知道这两个示例都产生相同的输出(由于无分支,第二个示例的性能甚至可能略好,但这可以忽略不计,该方法太短了,根本不会影响运行时),所以我纯粹从可读性和代码长度的角度提问。
哪一个是首选?
【问题讨论】:
-
如果你真的想写一个单行代码,你可以考虑
return the_name if the_name == self.name else 'other' -
Python 支持条件表达式 - 请参阅PEP 308
-
您正在使用 Python,它使您所做的一切都变得缓慢,但同时您正在尝试在 CPU 级别上进行优化。在 python 中执行
2 * 4时,你甚至不知道执行了多少个分支。不要那样做。如果您想要真正优化的代码,请不要使用 Python。如果您使用的是 Python,请接受它的缺点并利用它的优点。 -
实际上并没有“无分支 Python”这样的东西。你正在用一种解释性语言写作,而解释器充满了分支。
-
我更喜欢
if...else实现。除非性能增益是明确的,否则第一种方法的明确性非常有吸引力。
标签: python