Почему выводится none python
Перейти к содержимому

Почему выводится none python

  • автор:

Откуда None в выводе ? Глупый вопрос

print(Ivan.bio()) печатает то, что возвращает метод bio , а он у вас возвращает ничего, то есть None . А тот принт, который внутри метода bio , печатает вам ивана-18 и не имеет никакого отношения к возвращаемому значению

3 янв 2018 в 18:45

@andreymal, добавь ответ.

3 янв 2018 в 19:10

Добавьте кто-нибудь за меня, я считаю вопрос плохим и мне лень писать развёрнутый ответ

4 янв 2018 в 0:15

@user263096 Выякий метод и всякая функция в Пытоне возвращает какое-то значение: Или то, которое в команде return , или None , когда return не встретится.

4 янв 2018 в 0:52

@MarianD, зачем ты мне это объясняешь? Я — то не создатель этого дурацкого вопроса.

None (null), или немного о типе NoneType

Python 3 логотип

Ключевое слово null обычно используется во многих языках программирования, таких как Java, C++, C# и JavaScript. Это значение, которое присваивается переменной.

Концепция ключевого слова null в том, что она дает переменной нейтральное или «нулевое» поведение.

А что же в Python?

Эквивалент null в Python: None

Он был разработан таким образом, по двум причинам:

Многие утверждают, что слово null несколько эзотерично. Это не наиболее дружелюбное слово для новичков. Кроме того, None относится именно к требуемой функциональности — это ничего, и не имеет поведения.

Присвоить переменной значение None очень просто:

Существует много случаев, когда следует использовать None.

Часто вы хотите выполнить действие, которое может работать либо завершиться неудачно. Используя None, вы можете проверить успех действия. Вот пример:

    Python является объектно-ориентированным, и поэтому None - тоже объект, и имеет свой тип.

Проверка на None

Есть (формально) два способа проверить, на равенство None.

Один из способов — с помощью ключевого слова is.

Второй — с помощью == (но никогда не пользуйтесь вторым способом, и я попробую объяснить, почему).

Посмотрим на примеры:

   Данный код выведет:
Отлично, так они делают одно и то же! Однако, не совсем. Для встроенных типов - да. Но с пользовательскими классами вы должны быть осторожны. Python предоставляет возможность переопределения операторов сравнения в пользовательских классах. Таким образом, вы можете сравнить классы, например, MyObject == MyOtherObject.
 И получаем немного неожиданный результат:
Интересно, не правда ли? Вот поэтому нужно проверять на None с помощью ключевого слова is.

А ещё (для некоторых классов) вызов метода __eq__ может занимать много времени, и is будет просто-напросто быстрее.

Для вставки кода на Python в комментарий заключайте его в теги

  • Модуль csv - чтение и запись CSV файлов
  • Создаём сайт на Django, используя хорошие практики. Часть 1: создаём проект
  • Онлайн-обучение Python: сравнение популярных программ
  • Книги о Python
  • GUI (графический интерфейс пользователя)
  • Курсы Python
  • Модули
  • Новости мира Python
  • NumPy
  • Обработка данных
  • Основы программирования
  • Примеры программ
  • Типы данных в Python
  • Видео
  • Python для Web
  • Работа для Python-программистов
  • Сделай свой вклад в развитие сайта!
  • Самоучитель Python
  • Карта сайта
  • Отзывы на книги по Python
  • Реклама на сайте

Почему функция выводит none в Python?

Достаточно часто возникают вопросы: "почему моя функция ничего не возвращает?!", "почему из функции возвращается None?", "не могу понять откуда появляется None. ".

Для начала необходимо понимать и помнить, что любая функция в Python всегда что-то возвращает и если не используется оператор return для возврата значения (такие случаи бывают, но об этом позднее), то функция возвращает объект None . В случае если return используется, но после него ничего не указывается явно, то по умолчанию считается, что там стоит объект None .

# Не используем оператор return, поэтому результат не возвращается. def func(x): x * x print(func(10)) #=> None # Используем оператор return, но не задаем явное значение/используем некорректно def func(x): x * x return print(func(10)) #=> None # Корректно возвращаем результат с использованием оператора return def func(x): return x * x print(func(10)) #=> 100 

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

def func(x): return print(x * x) a = 5 b = func(a) # Присваиваем результат функции переменной b # Результат работы функции выводится на экран, благодаря print() в теле функции. #=> 25 # Но при этом данный результат не присваивается переменной b. print(b) #=> None 

Если дальше по коду проводятся манипуляции с переменной b, например сложение, то возникнет ошибка TypeError :

c = b + 1 # Пытаемся сложить None и 1 print(c) # => TypeError: unsupported operand type(s) for +: 'NoneType' and 'int' 

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

# Бесполезная функция необходимая только в качестве примера. def extend_list(list1, list2): list1.extend(list2) list1 = [1, 2] list2 = [3, 4] print(extend_list(list1, list2)) # => None # При этом поставленную задачу функция выполнила - изменила list1 print(list1) # => [1, 2, 3, 4] 

В примере выше использовался метод работы со списками extend() и необходимо понимать, что метод изменяет объект, к которому применен, а не возвращает результат изменения объекта.

list3 = extend_list(list1, list2) print(list3) # => None 

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

Здравствуйте, не могли бы объяснить, почему такая функция возвращает None?

1 2 3 4
def f(a, b): print(a.append(b)) f([44, 11], 5)

Лучшие ответы ( 2 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Функция возвращает None
Сам код: def get_code(mail_server, emaila): mail_server.select("inbox") try: .

Функция возвращает 0
Добрый день не могу понять что делаю не так . Функция после сдвига или деления возвращает 0 ((( .

1007 / 351 / 59
Регистрация: 28.02.2013
Сообщений: 931
onelifeitsme, и нам расскажите, пожалуйста) может еще кому то надо будет.
954 / 340 / 114
Регистрация: 04.08.2018
Сообщений: 2,533

Лучший ответ

Сообщение было отмечено dondublon как решение

Решение

onelifeitsme, помогите Даше-путешественнице найти слово return.

Эксперт Python

1354 / 651 / 207
Регистрация: 23.03.2014
Сообщений: 3,057

1 2 3 4 5 6 7
def f(a: list, b: int) -> list: a.append(b) res = a return res print(f([44, 11], 5))

1727 / 967 / 199
Регистрация: 22.02.2018
Сообщений: 2,694
Записей в блоге: 6

Лучший ответ

Сообщение было отмечено Welemir1 как решение

Решение

ЦитатаСообщение от onelifeitsme Посмотреть сообщение

почему такая функция возвращает None?

Любая функция всегда что-то возвращает. Если мы хотим возвратить что то конкретное то для этого используется оператор return.
Однако существуют функции, которые не предназначаются для того, что бы что то возвращать, а создаются для того, что бы просто произвести какие либо действия. В таких функциях не используют return. Но так как функция обязательно должна что то возвращать, то питон для таких функций возвращает None. Вы должны это понимать, и для таких функций не нужно использовать возвращаемое ими значения, то есть не нужно присваивать его каким либо переменным.
Собственно, что делает Ваша функция, она заменяет встроенный в питон метод append(). То есть в Вашем примере, функция это мусор. Вместо функции достаточно просто написать

1 2 3 4 5
a = [44, 11] b = 5 a.append(b) print(a)

Собственно метод, это тоже функция, но описываемая внутри класса и потому привязываемая к экземпляру класса.
В данном случае метод append , всегда привязан к изменяемому объекту. Все, что он делает, это изменяет этот объект. Поэтому питон для этого метода возвращает None . И это важно хорошо понимать. Так как если Вы присвоите возвращаемое значение самому списку, к которому применяется метод, то Вы этот список потеряете.

a = a.append(b) # получите, что a = None

Но если Вам уж очень хочется заменить метод на функцию, то это можно сделать так, как предложил Dax,
или использовать Ваш вариант, но инициировать список до вызова функции

1 2 3 4 5 6 7 8
a = [44, 11] b = 5 def f(a, b): a.append(b) f(a, b) print(a) # [44, 11, 5]

Добавлено через 12 минут
onelifeitsme, Хотя поправлюсь. Если Вам нужно только вывести на экран измененный список, а не работать с ним в дальнейшем, тогда Ваш вариант нужно изменить так

1 2 3 4 5
def f(a, b): a.append(b) print(a) # [44, 11, 5] f([44, 11], 5)

87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Функция которая возвращает X и Y
Здравствуйте. как написать функцию что бы она возвращала не одно значение X или Y, а XиY вместе? .

Функция не возвращает true
Доброго времени суток. Две функции, абсолютно одинаковые, одна работает, а другая всегда.

Функция возвращает ошибку
Вот часть кода вывода комментариев $sql = ("SELECT id, post, parent_id, name, comment, .

Функция не возвращает результат
Есть функция extractname: #include <stdio.h> #include <string.h> char* extractname(char*.

Функция не возвращает результат
Функция не возвращает результат Помогите новичку, запускаю функцию и вместо =12, выдает все.

Функция возвращает массив
На многих зарубежных сайтах, когда кто-нибудь спрашивает о создании функции, которая возвращает.

Функция не возвращает false
Вообщем str это строка, которая может содержать в себе знак математической операции, скобки, число.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *