我在代码审查中遇到了这个:
def some_method(self, path):
path = os.path.abspath(os.path.expanduser(path or ""))
我的第一反应是“啊啊啊糟糕!” 但转念一想……是吗?
我在代码审查中遇到了这个:
def some_method(self, path):
path = os.path.abspath(os.path.expanduser(path or ""))
我的第一反应是“啊啊啊糟糕!” 但转念一想……是吗?
如果表达式的第一部分计算结果为 False,这是实现某种默认值或备用值的常见模式。将其视为最佳实践——不管你喜不喜欢。它也可以用来将 None 变成一个空字符串。
在这个例子中它有点没有意义,因为这样调用它:
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()