1

我在代码审查中遇到了这个:

def some_method(self, path):
   path = os.path.abspath(os.path.expanduser(path or ""))

我的第一反应是“啊啊啊糟糕!” 但转念一想……是吗?

4

2 回答 2

2

如果表达式的第一部分计算结果为 False,这是实现某种默认值或备用值的常见模式。将其视为最佳实践——不管你喜不喜欢。它也可以用来将 None 变成一个空字符串。

于 2011-04-28T12:38:38.910 回答
1

在这个例子中它有点没有意义,因为这样调用它:

instance.some_method() 

会产生错误。

你必须这样称呼它:

instance.some_method(None)

最好是:

def some_method(self, path=None):
   path = os.path.abspath(os.path.expanduser(path or ""))

或者可以说:

def some_method(self, path=""):
   path = os.path.abspath(os.path.expanduser(path))

...这不会防范 None 值。在这种情况下,人们可以争论是抱怨还是“默认”更好。

无论如何,现在可以完全省略路径:

instance.some_method()
于 2011-04-28T12:41:48.213 回答