Почему переменная возвращает «none», когда функция в этой переменной является «void functions»? [Дубликат]

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>
28
задан martineau 7 June 2018 в 15:14
поделиться

6 ответов

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

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

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

Затем

>>> print yourfunction(2, 3)
2
0
ответ дан Alexis Métaireau 17 August 2018 в 10:31
поделиться

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

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
7
ответ дан Antti Haapala 17 August 2018 в 10:31
поделиться

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

1
ответ дан de1337ed 17 August 2018 в 10:31
поделиться

Проблема в том, что вы написали 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
0
ответ дан Jared Ng 17 August 2018 в 10:31
поделиться

Откуда взялось «Нет»?

Функция.

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

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

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

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

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

1
ответ дан Karl Knechtel - away from home 17 August 2018 в 10:31
поделиться

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

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 только. Почему я не вижу ничего противного?

-1
ответ дан spejsy 17 August 2018 в 10:31
поделиться
  • 1
    Вы печатаете возвращаемое значение функции print (), которая всегда является None. Функции input () принимают строку как входную, вам вообще не нужно использовать print (). Второй вызов функции печати не отображает None. – spejsy 6 July 2018 в 12:43
Другие вопросы по тегам:

Похожие вопросы: