我碰到这在代码审查来表达:追赶无与价值“或”
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()
我看到'如果x为无:X = defaultValue'更频繁。利用逻辑运算符返回它们的一个操作数更常用于实现条件运算符('?:'),但是由于几个版本的原因,这可以说是过时了。 – delnan 2011-04-28 12:44:42
你总是使用if ...然后用任何语言。但也有其他语言提供了像C中的tenary操作符那样的快捷方式...并且在更新的Python版本中存在一个类似的构造“foo if a else b”,据我所知(丑陋或不丑陋...这是一个不同的话题)。 – 2011-04-28 12:50:49
其他语言支持哪些并不重要。我说AFAIK'是x是None:x = default'在Python *中更常见*。你能确认吗? – delnan 2011-04-28 13:05:30