簡體   English   中英

更pythonic的方式來寫這個嗎?

[英]More pythonic way to write this?

我在這里有此代碼:

import re
def get_attr(str, attr):
    m = re.search(attr + r'=(\w+)', str)
    return None if not m else m.group(1)

str = 'type=greeting hello=world'

print get_attr(str, 'type')   # greeting    
print get_attr(str, 'hello')  # world
print get_attr(str, 'attr')   # None

哪個可行,但我並不特別喜歡這一行:

return None if not m else m.group(1)

我認為,如果我們可以使用三元運算符,這看起來會更干凈:

return (m ? m.group(1) : None)

但是,那當然不存在。 你有什么建議?

Python 具有三元運算符。 您正在使用它。 X if Y else Z只是X if Y else Z形式的X if Y else Z

也就是說,我傾向於將這些內容寫出來。 如果您犧牲了清晰度,那么將事情放在一條線上並不是那么好。

def get_attr(str, attr):
    m = re.search(attr + r'=(\w+)', str)
    if m:
        return m.group(1)

    return None

另一種選擇是使用:

return m.group(1) if m else m

它是明確的,並且您不必為理解它而做任何邏輯難題:)

return m and m.group(1)

這將是一種Python的方式。

如果mNone (或其他評估為“錯誤”的東西),則返回m ,但如果m為“ true-ish”,則返回m.group(1)

您所擁有的是python的條件運算符。 IMO完全是pythonic形式,不需要任何更改。 請記住, explicit is better than implicit 您現在擁有的是可讀且立即可理解的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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