Откуда 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
Ключевое слово 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.
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 это строка, которая может содержать в себе знак математической операции, скобки, число.