«Логические» операции в Python (например, операторы и / или)

Этот метод выполняет поиск первой группы символов слова (например: [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 , и возвращается результирующее значение.

Однако, будучи логическим оператором (это даже сказано в руководстве), я ожидал, что и вернут логическое значение . В результате я был удивлен , когда узнал (как) это работает.

Каковы другие варианты использования этого, и / или в чем причина этой довольно неинтуитивной реализации?

11
задан NullUserException 29 September 2010 в 22:53
поделиться