Подтвердить что ты не робот

Функция возвращает None без оператора return

Я только что узнал (изучая), как работают параметры функции в Python, и я начал экспериментировать с ним без видимой причины, когда это:

def jiskya(x, y):
    if x > y:
        print y
    else:
        print x

print(jiskya(2, 3))

дал вывод:

>>>
2
None

Откуда взялся None? И что это?

4b9b3361

Ответ 1

Это возвращаемое значение функции, которую вы распечатываете. Если нет оператора return (или просто a return без аргумента), неявный return None добавляется в конец функции.

Вероятно, вы захотите вернуть значения в функции вместо их печати:

def jiskya(x, y):
    if x > y:
        return y
    else:
        return x

print(jiskya(2, 3))

Ответ 2

Хорошо, чтобы начать, когда вы это сделаете:

print(jiskya(2, 3))

Вы получаете что-то в значительной степени эквивалентное этому:

print(print(2))

Итак, что происходит? print(2) печатает 2 и возвращает None, который печатается внешним вызовом. Достаточно прямо.

Теперь посмотрим на это:

def hello():
    return 2

Если вы выполните:

print(hello())

Вы получаете 2, потому что, если вы распечатываете функцию, вы получаете то, что имеет значение return. (Значение return обозначается символом return someVariable.

Теперь, даже если print не имеет круглых скобок, таких как большинство функций, это функция, немного особенная в этом отношении. Что возвращает печать? Ничего. Поэтому, когда вы print print someVariable, вы получите None как вторую часть, потому что возвращаемое значение печати None.

Так как другие заявили:

def jiskya(x, y):
    if x > y:
        print(y)
    else:
        print(x)

Необходимо переписать:

def jiskya(x, y):
    if x > y:
        return y
    else:
        return x

Ответ 3

Откуда появился "Нет" ?

Функция.

И что это такое?

Это то, что возвращала функция.

В Python каждая функция возвращает что-то. Он может "быть несколькими вещами", используя кортеж, или он может "быть ничем" с помощью None, но он должен что-то вернуть. Вот как мы имеем дело с тем, что не существует способа указать тип возврата (что не имеет смысла, поскольку вы не указываете типы для чего-либо еще). Когда интерпретируется как строка для печати, None заменяется строкой "Нет" .

None - это особый объект, который должен представлять отсутствие какой-либо реальной вещи. Его тип NoneType (это экземпляр этого класса). Всякий раз, когда вы явно не возвращаете ничего, вы неявно возвращаете None.

Вы написали функцию для печати одного из двух значений x или y, но ничего не возвращали. Итак, None был возвращен. Затем вы попросили Python распечатать результат вызова функции. Поэтому он назвал функцию (печать одного из значений), а затем напечатал возвращаемое значение, которое было None, как текст "Нет" .

Ответ 4

Ya, в основном вы используете операторы печати в своей функции как способ возврата информации. Вы не должны этого делать. Печать - это не то же самое, что и оператор возврата. Если вы просто хотите, чтобы ваша функция давала ваш ответ без них, просто введите jiskya (2, 3). Вы увидите, что функция выбрасывает, потому что у вас есть инструкции печати в функции. Если вместо этого вы набрали "возврат" в своей функции, это не даст вам ничего, кроме "печати", предшествующей вызову функции.

Ответ 5

Проблема заключается в том, что вы написали print jiskya(2,3). Вы передаете возвращаемое значение jiskya в функцию print. Сам jiskya печатает x или y, поэтому вы видите 2. Но тогда print в операторе print jiskya(2, 3) выполняется без аргумента.

Для интерпретатора это упрощение того, что происходит:

print jiskya(2,3)
>> Executing jiskya with arguments 2, 3
>> jiskya evaulates `print x`
>> 2 is printed
>> Function jiskya exits with no return value
print None
>> None is printed

Ответ 6

Вы делаете две печати, первую в корпусе своей функции, а вторую печатаете результат функции, которая, как фактически, отсутствует.

Вы должны сделать что-то вроде этого:

def yourfunction(x, y):
    if x > y:
        return y
    else:
        return x

Тогда

>>> print yourfunction(2, 3)
2

Ответ 7

Вы можете попробовать что-то вроде этого:

def jiskya (x, y):

if x > y:
    return y
else:
    return x

jiskya (2, 3) # Это удалит None в выводе

Ответ 8

Я вижу, что все ваши ответы говорят одинаково. Посмотрите на этот код:

def factorial(x):
   if x == 0 or x == 1:
      return (1)
   else:
      return (x * factorial(x-1))

x = (int(input(print('Enter a number: '))))
print(factorial(x))

И вывод:

 Enter a number: 
 None

Поэтому я использовал только Return. Почему тогда я не вижу ничего противного?