Этот метод выполняет поиск первой группы символов слова (например: [a-zA-Z0-9 _]
), возвращая первую совпавшую группу или Нет
в случай сбоя.
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 и y
сначала вычисляетx
; еслиx
ложно, возвращается его значение; в противном случае вычисляетсяy
, и возвращается результирующее значение.
Однако, будучи логическим оператором (это даже сказано в руководстве), я ожидал, что и
вернут логическое значение . В результате я был удивлен , когда узнал (как) это работает.
Каковы другие варианты использования этого, и / или в чем причина этой довольно неинтуитивной реализации?