簡體   English   中英

Python:將 None 轉換為空字符串的最慣用方法?

[英]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 不是NoneTypeor會在那里短路並返回它,否則它返回空字符串。

老的:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM