почему условный оператор в питоне себя не так ведёт
Я новичок и мне очень хотелось бы разобраться. Почему условный оператор в Питоне ведет себя не должным образом. Я создаю функцию, которая принимает один параметр. И если он меньше 5, то функция должна возвратить None, а если больше, то само это число. Когда я задаю аргумент этой функции меньше 5, например 3, то все в порядке, функция возвращает None, как и положено. Но, когда аргумент функции я ввожу больше 5, например 8, то в консоли вижу вывод и 8, и None. Почему так происходит?
def xxx(n):
if n < 5:
return None
else:
print(n)
y = 8
variable = xxx(y)
print(variable)
Out: 8 None
Ответы (2 шт):
Чтобы возвратить число, нужно его возвратить, а не напечатать
def xxx(n):
if n < 5:
return None
else:
return n
Любая функция python неявно возвращает None, если в функции не происходит return, т.е. даже если вы не пишите return, то функция вернет None - по умолчанию.
Разберу ваш код:
Случай первый: вы вводите в функцию число меньше, чем 5.
В таком случае работает первая часть условного оператора:
if n < 5:
return None
и в результате работы функции выходит None (тот, что вы написали)
Случай второй: на вход подаётся число больше или равное 5. В таком случае работает работает вторая часть условного оператора:
else:
print(n)
она печатает в консоль введённое значение, и возвращает None (неявно)
после объявления функции следует код, где: вы объявляете входное значение, как число 8,
y = 8
вызываете функцию, и записываете её результат,
variable = xxx(y)
после чего, вы выводите этот результат
print(variable)
в первом случае ничего тривиального, функция выводит ваш None, а потом этот результат сохраняется и выводится, но если происходит второй случай, тогда (как раньше писалось) в консоль выводится входное значение, в коде - 8, а также записывается результат работы функции, т.к. мы ничего не вернули, то результат - стандартный None. После чего вы также выводите этот результат, и получается два вывода - сначала print в функции, а потом вне её.
Мои предложения: во втором случае, вместо вывода в консоль, верните результат:
print(n)
замените на ->
return n
или же
в первом случае выводите ответ в консоль из функции и не сохраняйте результат выполнения функции:
return None
# пропускаю код
y = 8
variable = xxx(y)
print(variable)
замените на ->
print(None)
# пропускаю код
y = 8
xxx(y)
поправка 1: советую воспринимать объявление функции, таким образом:
def some_func(some_inputs):
# some code
превращается в
def some_func(some_inputs):
# some code
return None
(т.к. если в функции python сталкивается с return, он выходит из функции и не выполняет код, который может быть написан после первого return)
если ваш return будет происходить раньше, то вы не наткнётесь на стандартный вывод
поправка 2: можете поиграться со стандартным выводом, например:
def func():
pass
print(func())
- функция выполнится, и вернёт стандартный None