Я не был уверен, как назвать название. Но я новичок в программировании в целом, и я использую 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))
Оба эти кода дают точные результаты.. но почему? извините, я супер новый
Оба этих кода дают точные результаты
Это неверно. Это верно только в том случае, если входы имеют определенные типы. Рассмотрим этот тривиальный контрпример:
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
.
Вместо того, чтобы
if condition == True:
return True
else:
return False
в функции вы могли бы просто вернуть это условие
return condition
поскольку вы проверяете то же значение, которое вы вернете