Булевы сравнения в одной строке против нескольких строк - PullRequest
0 голосов
/ 14 октября 2018

Я не был уверен, что назвать название.Но я новичок в программировании в целом, и я использую Python.У меня вопрос: почему просто написать return вместо множества, если операторы else и else работают одинаково?

#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))

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

Ответы [ 2 ]

0 голосов
/ 14 октября 2018

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

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

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 nor or ограничивает значение и тип, который они возвращают, False и True, но скорее возвращает последний оцененный аргумент.

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

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

0 голосов
/ 14 октября 2018

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

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

в функции, вы можете просто заставить ее возвращать условие

return condition

, так как вы проверяете то же значение, которое вы возвращаете

...