Вопрос-Ответ

Why is "None" printed after my function's output?

Почему "None" печатается после вывода моей функции?

Я пытался написать этот код:

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

print(smaller(2, 3))

Я получил этот результат:

>>>
2
None

Откуда взялось None? Что это значит?


Смотрите также

Принятый ответ объясняет важность returnввода значения из функции, а не printего редактирования. Для получения дополнительной информации см. Какова цель оператора return? Чем это отличается от печати?.

Чтобы понять None сам результат, см. Что такое объект 'NoneType'?.

Если вы printвходите внутрь функции, чтобы увидеть несколько значений, возможно, было бы лучше вместо этого собрать эти значения, чтобы их можно было распечатать вызывающим кодом. Подробнее см. в разделе Как я могу использовать `return` для получения нескольких значений из цикла? Могу ли я поместить их в список?.

Переведено автоматически
Ответ 1

Это возвращаемое значение функции, которое вы распечатываете. Если нет оператора return (или просто 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 print someVariable, вы получите None в качестве второй части, потому что возвращаемое значение print равно 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

Откуда взялось "None"?


Функция.


И что это?


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

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

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

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

Ответ 4

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

Вам лучше сделать что-то вроде этого:

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

Тогда,

>>> print yourfunction(2, 3)
2
python function