![](/img/trans.png)
[英]What is the most idiomatic way to convert a string to characters in Erlang?
[英]Python: most idiomatic way to convert None to empty string?
執行以下操作最慣用的方法是什么?
def xstr(s):
if s is None:
return ''
else:
return s
s = xstr(a) + xstr(b)
更新:我正在采納 Trypich 的使用 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(s or '')
因為 None 為假,如果 x 為假,“x 或 y”將返回 y。 有關詳細說明,請參閱布爾運算符。 它很短,但不是很明確。
如果你真的希望你的函數表現得像內置的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 ""
功能方式(單行)
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)
更新:
我現在主要用這個方法:
some_string = None
some_string or ''
如果 some_string 不是NoneType
, or
會在那里短路並返回它,否則它返回空字符串。
老的:
Max 函數在 python 2.x 中有效,但在 3.x 中無效:
max(None, '') # Returns blank
max("Hello", '') # Returns Hello
如果您需要與 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}"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.