Python:大多数惯用的方式将None转换为空string?

什么是最习惯的方式来做到以下几点?

def xstr(s): if s is None: return '' else: return s s = xstr(a) + xstr(b) 

更新:我纳入Tryptich的build议使用str(s),这使得这个例程除了string以外的其他types的工作。 Vinay Sajip的lambdabuild议令我印象深刻,但我想保持我的代码相对简单。

 def xstr(s): if s is None: return '' else: return str(s) 

如果你真的希望你的函数像内置的str()那样工作,但是当参数是None时返回一个空string,这样做:

 def xstr(s): if s is None: return '' return str(s) 
 def xstr(s): return '' if s is None else str(s) 

如果您知道该值将始终是string或None:

 xstr = lambda s: s or "" print xstr("a") + xstr("b") # -> 'ab' print xstr("a") + xstr(None) # -> 'a' print xstr(None) + xstr("b") # -> 'b' print xstr(None) + xstr(None) # -> '' 

return s or ''将适用于您陈述的问题!

最短的可能是str(s or '')

因为无是假的,如果x是假的,“x或y”返回y。 有关详细说明,请参阅布尔运算符 。 这很短,但不是很明确。

 def xstr(s): return s or "" 

function方式(单行)

 xstr = lambda s: '' if s is None else s 
 def xstr(s): return {None:''}.get(s, s) 

上面的变化,如果你需要与Python 2.4兼容

 xstr = lambda s: s is not None and s or '' 

我使用max函数:

 max(None, '') #Returns blank max("Hello",'') #Returns Hello 

像魅力一样工作;)把你的string放在函数的第一个参数中。

 def xstr(s): return s if s else '' s = "%s%s" % (xstr(a), xstr(b)) 

在下面解释的情况下,我们总是可以避免types转换

 customer = "John" name = str(customer) if name is None print "Name is blank" else: print "Customer name : " + name 

在上面的例子中,如果variablescustomer的值是None,那么在赋值给'name'的时​​候它进一步得到了cast。 'if'子句中的比较总是失败。

 customer = "John" # even though its None still it will work properly. name = customer if name is None print "Name is blank" else: print "Customer name : " + str(name) 

上面的例子将正常工作。 当从URL,JSON或XML获取值时,这种情况非常普遍,甚至值需要进一步的types转换来进行任何操作。

一个整洁的单线来做这个build设的一些其他的答案:

 s = (lambda v: v or '')(a) + (lambda v: v or '')(b) 

甚至只是:

 s = (a or '') + (b or '') 

使用短路评估:

 s = a or '' + b or '' 

由于+对string不是很好的操作,所以最好使用格式化string:

 s = "%s%s" % (a or '', b or '')