执行以下操作最惯用的方法是什么?
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)
def xstr(s):
return '' if s is None else str(s)
如果您确实希望函数的行为类似于内置函数
str()
,但在参数为 None 时返回空字符串,请执行以下操作:
def xstr(s):
if s is None:
return ''
return str(s)
如果您知道该值始终是字符串或 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 ''
可以很好地解决您所说的问题!
def xstr(s):
return s or ""
更新:
我现在主要用这个方法:
some_string = None
some_string or ''
如果 some_string 不是
NoneType
,则 or
会在那里短路并返回它,否则返回空字符串。
旧:
Max 函数在 python 2.x 中有效,但在 3.x 中无效:
max(None, '') # Returns blank
max("Hello", '') # Returns Hello
功能方式(单行)
xstr = lambda s: '' if s is None else s
在其他一些答案的基础上进行此构建的简洁的一句话:
s = (lambda v: v or '')(a) + (lambda v: v or '')(b)
甚至只是:
s = (a or '') + (b or '')
def xstr(s):
return {None:''}.get(s, s)
如果您需要与 Python 2.4 兼容,请对上述内容进行变体
xstr = lambda s: s is not None and s or ''
如果是关于格式化字符串,可以执行以下操作:
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)
def xstr(s):
return s if s else ''
s = "%s%s" % (xstr(a), xstr(b))
我们总是可以避免在下面解释的场景中进行类型转换。
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 获取值,甚至值需要进一步类型转换以进行任何操作时,这种情况非常常见。
使用短路评估:
s = a or '' + b or ''
由于 + 对字符串的操作不是很好,所以最好使用格式字符串:
s = "%s%s" % (a or '', b or '')
与 Vinay Sajip 的答案相同,带有类型注释,这样就不需要
str()
结果。
def xstr(s: Optional[str]) -> str:
return '' if s is None else s
如果您使用的是 python v3.7,请使用 F 字符串
xstr = F"{s}"