このメソッドは、単語文字の最初のグループ (つまり: ) を検索し、[a-zA-Z0-9_]最初に一致したグループを返すかNone、失敗した場合に返します。
def test(str):
m = re.search(r'(\w+)', str)
if m:
return m.group(1)
return None
同じ関数を次のように書き換えることができます。
def test2(str):
m = re.search(r'(\w+)', str)
return m and m.group(1)
これは同じように機能し、文書化された動作です。このページには次のように明確に記載されています。
式
x and yは最初に評価されxます。が false の場合x、その値が返されます。それ以外の場合yは評価され、結果の値が返されます。
ただし、ブール演算子であるため(マニュアルにもそう記載されています)、andブール値を返すことを期待していました。その結果、これが(どのように)機能するかを知ったとき 、私は驚きました。
これの他のユースケースは何ですか、および/またはこのかなり非直感的な実装の理論的根拠は何ですか?