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