Pythonで条件式での代入

Python 3.8でC/C++では馴染み深い条件式での代入表現が機能追加されました


Walrus Operator ( := )

Walrus Operatorというらしいです (セイウチ?)。Python 3.7までは特に正規表現の一致評価時に、Cのように書けないことが毎回ストレスでしたが、Python 3.8からは

def extract_date(date_str):
    m = re.match("(\d{4})/(\d{2})/(\d{2})", date_str)
    if m:
        return (m.group(1), m.group(2), m.group(3))

    return (None, None, None)

と書いていたものが

def extract_date2(date_str):
    if m := re.match("(\d{4})/(\d{2})/(\d{2})", date_str):
        return (m.group(1), m.group(2), m.group(3))

    return (None, None, None)

とすっきり記載することが出来ます。他にもいろいろ使用する場面はありそうです

ちなみに上記コードをautopep8 (version 1.5) に掛けると

def extract_date2(date_str):
    if m:
        = re.match("(\d{4})/(\d{2})/(\d{2})", date_str):
        return (m.group(1), m.group(2), m.group(3))

のように変換されて、正常に動作しません。こちらの方はまだ追い付いていないようですので注意が必要ですね。(latest masterでは修正済みのようですので、そのうちリリースされると思われます)

おすすめ