ok, для меня:
<style type="text/css">
div{
position: relative;
display: inline-block;
width:25px;
height:25px;
}
</style>
<div>toto</div>
<div>toto</div>
<div>toto</div>
Вы делаете два отпечатка, первый из которых находится в корпусе вашей функции, а второй печатает результат функции, которая как фактически отсутствует.
Вы должны сделать что-то вроде этого:
def yourfunction(x, y):
if x > y:
return y
else:
return x
Затем
>>> print yourfunction(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 return? Nothing. Поэтому, когда вы 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
print print 2
не работал ни в 2, ни в 3 ...
– Antti Haapala
27 November 2016 в 12:37
return None
добавлен»?
– Micha Wiedenmann
1 June 2018 в 07:41
return None
в cpython .
– phihag
1 June 2018 в 09:24
Ya, в основном вы используете операторы печати в своей функции как способ возврата информации. Вы не должны этого делать. Печать - это не то же самое, что и оператор возврата. Если вы просто хотите, чтобы ваша функция давала ваш ответ без них, просто введите jiskya (2, 3). Вы увидите, что функция выбрасывает, потому что у вас есть инструкции печати в функции. Если вместо этого вы набрали «возврат» в своей функции, это не даст вам ничего, кроме «печати», предшествующей вызову функции.
Проблема в том, что вы написали 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
Откуда взялось «Нет»?
blockquote>Функция.
И что это такое?
blockquote>Это то, что возвращала функция.
В Python каждая функция возвращает что-то. Он может «быть несколькими вещами», используя кортеж, или он может «быть ничем», используя
None
, но он должен что-то вернуть. Вот как мы имеем дело с тем, что не существует способа указать тип возврата (что не имеет смысла, поскольку вы не указываете типы для чего-либо еще). Когда интерпретируется как строка для печати,None
заменяется строкой «Нет».
None
- это особый объект, который должен представлять отсутствие какой-либо реальной вещи. Его типNoneType
(это экземпляр этого класса). Всякий раз, когда вы явно ничего не возвращаете, вы неявно возвращаете None.Вы написали функцию для печати одного из двух значений
x
илиy
, но ничего не возвращали. Итак,None
был возвращен. Затем вы попросили Python распечатать результат вызова функции. Поэтому он назвал функцию (печать одного из значений), а затем напечатал возвращаемое значение, которое былоNone
, как текст «Нет».
Я вижу, что все ваши ответы говорят то же самое. Взгляните на этот код:
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 только. Почему я не вижу ничего противного?