#python #function #return-value
#python #функция #возвращаемое значение
Вопрос:
У меня есть эта функция здесь:
def g(x: int) -> int:
if x > 0:
x = x * (-1)
if x < 0:
x = x * (-1)
return x
Когда я вызываю функцию для g(10), она возвращает 10. Почему она не возвращает -10? Что я могу сделать, чтобы вернуть -10?
Комментарии:
1. Замените второе
if
наelif
. Или вообще удалите условие, поскольку вы выполняете одну и ту же операцию в обоих случаях2. Также можно напрямую вернуться изнутри
if
, чтобы предотвратить продолжение операции при успешном завершении. Создание исключения в конце потока (случай, когда неif
возвращается) может помочь найти ошибки3. @UnholySheep Спасибо, это исправляет проблему. Хотя, разве значение x не было бы задано первым оператором if независимо? Почему добавление elif устраняет проблему? Редактировать: Неважно, теперь я понимаю, почему. Спасибо!
4. Целая функция может быть
return -x
(если вы вызываете ее только с целыми числами).5. Второй
if
проверяется после выполнения первого, включая первое умножение
Ответ №1:
Вы дважды проверили и, следовательно, дважды получили отрицательное значение, простое решение:
def g(x: int) -> int:
if x > 0:
x = x * (-1)
elif x < 0:
x = x * (-1)
return x
print(g(10))
вывод:
-10
Ответ №2:
Ваш код слишком сложный, поскольку операция одинакова в обоих условиях if — вы могли бы упростить ее :
def g(x: int) -> int:
return x * (-1)
Но что касается того, почему ваш исходный код не работал —
Представьте, что переданное вами значение равно 10.
Итак, первое условие if if x > 0
выполнено, и теперь x становится -10 ( x=x * -1
)
Затем проверяется 2-е условие if if x < 0
— и это также теперь верно, поэтому x изменяется обратно на 10.
Эти два оператора if независимы друг от друга, и они выполняются в том порядке, в котором вы их задаете, один за другим.
Если вы хотите, чтобы они были зависимыми, используйте elif :
def g(x: int) -> int:
if x > 0:
x = x * (-1)
elif x < 0:
x = x * (-1)
return x
Это дало бы желаемый результат, но, как упоминалось в верхней части этого ответа, это просто слишком сложно для того, что вы на самом деле пытались сделать.