2011-04-28 65 views
1

我碰到这在代码审查来表达:追赶无与价值“或”

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

我的第一反应是“!哈啊,坏”但是第二个想法......是吗?

回答

2

如果表达式的第一部分计算结果为False,这是用于实现某种默认值或回退值的常见模式。将其视为最佳做法 - 喜欢与否。它也可以用来将None变成空字符串。

+0

我看到'如果x为无:X = defaultValue'更频繁。利用逻辑运算符返回它们的一个操作数更常用于实现条件运算符('?:'),但是由于几个版本的原因,这可以说是过时了。 – delnan 2011-04-28 12:44:42

+0

你总是使用if ...然后用任何语言。但也有其他语言提供了像C中的tenary操作符那样的快捷方式...并且在更新的Python版本中存在一个类似的构造“foo if a else b”,据我所知(丑陋或不丑陋...这是一个不同的话题)。 – 2011-04-28 12:50:49

+0

其他语言支持哪些并不重要。我说AFAIK'是x是None:x = default'在Python *中更常见*。你能确认吗? – delnan 2011-04-28 13:05:30

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()