最常用的做法是什么?
def xstr(s):
if s is None:
return ''
else:
return s
s = xstr(a) + xstr(b)
更新:我正在使用Tryptich的建议来使用str(s),这使得这个例程适用于除字符串之外的其他类型。 Vinay Sajip的lambda建议给我留下了深刻的印象,但我希望保持我的代码相对简单。
def xstr(s):
if s is None:
return ''
else:
return str(s)
答案 0 :(得分:128)
def xstr(s):
return '' if s is None else str(s)
答案 1 :(得分:89)
如果您知道该值将始终为字符串或无:
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) # -> ''
答案 2 :(得分:77)
如果您确实希望函数的行为与str()
内置函数类似,但在参数为None时返回空字符串,请执行以下操作:
def xstr(s):
if s is None:
return ''
return str(s)
答案 3 :(得分:74)
可能是最短的
str(s or '')
因为None为False,如果x为false,则“x或y”返回y。有关详细说明,请参阅Boolean Operators。它很短,但不是很明确。
答案 4 :(得分:55)
return s or ''
可以很好地解决您提出的问题!
答案 5 :(得分:14)
def xstr(s):
return s or ""
答案 6 :(得分:7)
功能方式(单行)
xstr = lambda s: '' if s is None else s
答案 7 :(得分:6)
def xstr(s):
return {None:''}.get(s, s)
答案 8 :(得分:4)
如果您需要与Python 2.4兼容,则上述变化
xstr = lambda s: s is not None and s or ''
答案 9 :(得分:4)
我使用max函数:
max(None, '') #Returns blank
max("Hello",'') #Returns Hello
像魅力一样工作;)只需将字符串放在函数的第一个参数中。
答案 10 :(得分:4)
在一些其他答案的基础上做一个简洁的单行:
s = (lambda v: v or '')(a) + (lambda v: v or '')(b)
甚至只是:
s = (a or '') + (b or '')
答案 11 :(得分:1)
def xstr(s):
return s if s else ''
s = "%s%s" % (xstr(a), xstr(b))
答案 12 :(得分:1)
我们总是可以避免在下面解释的场景中使用类型转换。
customer = "John"
name = str(customer)
if name is None
print "Name is blank"
else:
print "Customer name : " + name
在上面的示例中,如果变量客户的值为“无”,则会在分配给“姓名”时进一步投射。比较'如果'子句总是会失败。
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获取值时,这种情况非常常见,甚至值也需要进行任何操作的进一步类型转换。
答案 13 :(得分:1)
如果仅用于格式化字符串,则可以执行以下操作:
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)
答案 14 :(得分:0)
使用短路评估:
s = a or '' + b or ''
由于+对字符串的操作不是很好,所以最好使用格式字符串:
s = "%s%s" % (a or '', b or '')
答案 15 :(得分:-1)
如果使用的是python v3.7,请使用F字符串
xstr = F"{s}"