Булевы сравнения в одной строке против нескольких строк

1

Я не был уверен, как назвать название. Но я новичок в программировании в целом, и я использую python. Мой вопрос заключается в том, как просто написать return вместо сгустки, если и другие утверждения работают точно так же.

#Multiple lines
def parrot_trouble(talking, hour):
  if talking:
    if hour <7 or hour >20:
      return True
  return False
#One line
def parrot_trouble(talking, hour):
  return (talking and (hour < 7 or hour > 20))

Оба эти кода дают точные результаты.. но почему? извините, я супер новый

  • 0
    Это было обновлено
Теги:
python-3.x
boolean

2 ответа

2
Лучший ответ

Оба этих кода дают точные результаты

Это неверно. Это верно только в том случае, если входы имеют определенные типы. Рассмотрим этот тривиальный контрпример:

def parrot_trouble1(talking, hour):
    if talking:
        if hour < 7 or hour > 20:
            return True
    return False

def parrot_trouble2(talking, hour):
    return (talking and (hour < 7 or hour > 20))

parrot_trouble1([], 0)  # False
parrot_trouble2([], 0)  # []

Но обратите внимание and/or спроектированы таким образом:

Обратите внимание, что ни один and ни or ограничивать значение и типа они возвращаются к False и True, а скорее вернуть последний оцененный аргумент.

parrot_trouble2 имеет короткое замыкание. Предположим, что talking является булевым входом. Если talking False, выражение короткого замыкания и возвращает False. Если talking True, parrot_trouble2 вернет True или False зависимости от значения hour.

parrot_trouble1 не parrot_trouble1, но результат тот же. Если talking имеет значение Boolean и False, функция возвращает False. Если talking True, то проверяется второй hour < 7 or hour > 20 критерия hour < 7 or hour > 20. Если условие не указано, то, поскольку ничего не возвращается, Python перемещается за пределы и после оператора if return False.

  • 1
    Спасибо, это действительно помогло мне понять, что происходит.
-2

Вместо того, чтобы

if condition == True:
    return True
else:
    return False

в функции вы могли бы просто вернуть это условие

return condition

поскольку вы проверяете то же значение, которое вы вернете

Ещё вопросы

Сообщество Overcoder
Наверх
Меню