更新。
我采纳了Tryptich的建议,使用str(s),这使得这个例程可以用于除字符串以外的其他类型。 我对Vinay Sajip的lambda建议印象非常深刻,但我想保持我的代码相对简单。
def xstr(s):
if s is None:
return ''
else:
return str(s)
16 个回答
0 人赞同
最短的可能是
替换代码0
因为None是假的,而 "x或y "在x是假的情况下返回y。见布尔运算符的详细解释。它很短,但不是很明确。
0 人赞同
def xstr(s):
return '' if s is None else str(s)
0 人赞同
如果你真的想让你的函数表现得像str()
内置的,但当参数为None时返回一个空字符串,请这样做。
def xstr(s):
if s is None:
return ''
return str(s)
0 人赞同
如果你知道该值将永远是一个字符串或无。
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) # -> ''
0 人赞同
def xstr(s):
return s or ""
0 人赞同
职能方式(单行本)
xstr = lambda s: '' if s is None else s
0 人赞同
在其他一些答案的基础上,做这个整齐的单行线。
s = (lambda v: v or '')(a) + (lambda v: v or '')(b)
or even just:
s = (a or '') + (b or '')
0 人赞同
我现在主要使用这种方法。
some_string = None
some_string or ''
如果some_string不是NoneType
,or
会在那里短路并返回它,否则会返回空字符串。
Max函数在Python 2.x中工作,但在3.x中不工作。
max(None, '') # Returns blank
max("Hello", '') # Returns Hello
0 人赞同
def xstr(s):
return {None:''}.get(s, s)
0 人赞同
如果你需要与Python 2.4兼容,可以在上述基础上做一些改变
xstr = lambda s: s is not None and s or ''
0 人赞同
如果是关于字符串的格式化,你可以做以下工作。
from string import Formatter
class NoneAsEmptyFormatter(Formatter):
def get_value(self, key, args, kwargs):
v = super().get_value(key, args, kwargs)
return '' if v is None else v
fmt = NoneAsEmptyFormatter()
s = fmt.format('{}{}', a, b)
0 人赞同
def xstr(s):
return s if s else ''
s = "%s%s" % (xstr(a), xstr(b))
0 人赞同
在下面解释的情况下,我们总是可以避免类型转换。
customer = "John"
name = str(customer)
if name is None
print "Name is blank"
else:
print "Customer name : " + name
在上面的例子中,如果变量customer的值是None,那么它在被分配到'name'的时候会进一步被铸造。在'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中获取数值,甚至需要进一步的类型转换来进行任何操作时,这种情况非常常见。
0 人赞同
使用短路评估。
s = a or '' + b or ''
由于 "+"在字符串上不是一个很好的操作,最好使用格式化字符串。
s = "%s%s" % (a or '', b or '')