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
Функция ищет наименьший общий делитель двух чисел:
def f(a, b): r = a % b if (r == 0): print b return b a,b = b, r f(a, b) print f(25, 10)
На экран выводится:
Почему в функции b еще равна 5, но при этом фунция возвращает None ?
Re: [Python] - Возврат значения из функции
| От: | DenisY |
| Дата: | 08.08.07 09:33 |
| Оценка: |
return f(a, b)
Re[2]: [Python] - Возврат значения из функции
| От: | DemAS | http://demas.me |
| Дата: | 08.08.07 09:35 | |
| Оценка: |
Здравствуйте, DenisY, Вы писали:
DY>return f(a, b)
Будет бесконечная рекурсия
Re[3]: [Python] - Возврат значения из функции
| От: | DenisY | |
| Дата: | 08.08.07 10:04 | |
| Оценка: | 2 (1) | |
Здравствуйте, DemAS, Вы писали:
DAS> Будет бесконечная рекурсия
def f(a, b): r = a % b if (r == 0): print b return b a,b = b, r return f(a, b) print f(25, 10)
Re[4]: [Python] - Возврат значения из функции
| От: | DemAS | http://demas.me |
| Дата: | 08.08.07 10:13 | |
| Оценка: |
Здравствуйте, DenisY, Вы писали:
Спасибо.
Я правильно понял, что при любом рекурсивном вызове функции перед вызовом функции надо писать слово return?
Re[5]: [Python] - Возврат значения из функции
| От: | DenisY |
| Дата: | 08.08.07 10:32 |
| Оценка: |
DAS> Спасибо.
DAS> Я правильно понял, что при любом рекурсивном вызове функции перед вызовом функции надо писать слово return?
вряд ли при любом, только если вы хотите вернуть это значение наружу.
если это последний statement в функции — то тогда почти наверняка.
без return'а питон действует как си — просто выполняет процедуру f(a,b) — сохранить её результат ваша забота.
в этом он отличается от других языков (ruby, lisp, все функциональные) где последнее вычисленное выражение
автоматически становится возвращаемым значением.
Re: [Python] - Возврат значения из функции
| От: | Кодт | |
| Дата: | 08.08.07 10:57 | |
| Оценка: | 2 (1) | |
Здравствуйте, DemAS, Вы писали:
DAS>Функция ищет наименьший общий делитель двух чисел:
DAS>Почему в функции b еще равна 5, но при этом фунция возвращает None ?
Потому что последняя инструкция — просто вызывает f(a,b), а возвращать забывает. И выходит. Выход без return — это return None.
Насчёт рекурсии: тут либо нужно цикл вместо концевой рекурсии, либо — для красоты — не делать переприсваивание
def gcd(a,b) : r = a%b if r==0 : return b else : return gcd(b,r) def gcd(a,b) : while True : a,b = b,a%b if b==0 : return a
Перекуём баги на фичи!
Re[5]: [Python] - Возврат значения из функции
| От: | no4 |
| Дата: | 08.08.07 11:28 |
| Оценка: |
Здравствуйте, DemAS, Вы писали:
DAS> Спасибо.
DAS> Я правильно понял, что при любом рекурсивном вызове функции перед вызовом функции надо писать слово return?
return x это выйти из функции и возвратить значение инаяе none вернется
Почему выводится none python
![]()
Объект None (null) в Python: как работает и зачем необходим
22 марта 2023
Оценки статьи
Еще никто не оценил статью
В Python объект None , также известный как null , представляет отсутствие значения или неопределенность. В этой статье мы рассмотрим, что такое объект None , как его использовать в Python, а также примеры его применения.
Что такое объект None в Python?
Объект None - это объект-сентинел, который используется для представления отсутствия значения в Python. Он является единственным экземпляром класса NoneType и имеет значение None .
Объект None может использоваться для нескольких целей, включая:
- Показать отсутствие значения, когда переменная не имеет определенного значения
- Указать на то, что функция не возвращает никакого значения
- Использовать в качестве заполнителя при создании списков, словарей и других структур данных
Примеры использования объекта None в Python
Использование объекта None для необязательных аргументов функции
Объект None может использоваться в качестве значения по умолчанию для необязательных аргументов функции. В следующем примере функция print_message() принимает необязательный аргумент name , который по умолчанию равен None :
def print_message(message, name=None): if name: print(f"message>, name>!") else: print(message)
В этой функции мы используем условное выражение, чтобы проверить, задан ли аргумент name . Если name является истинным (например, не равен None), мы выводим сообщение, которое включает имя, переданное в функцию. В противном случае мы просто выводим сообщение без имени.
Использование объекта None для заполнения списков
Объект None может использоваться для заполнения списков, когда требуется задать начальный размер списка, но необходимых значений нет. В следующем примере мы создаем список длиной в 5 элементов и заполняем его объектами None :
my_list = [None] * 5 print(my_list) # [None, None, None, None, None]
Использование объекта None для проверки наличия значения
Объект None может использоваться для проверки, имеет ли переменная значение или нет. В следующем примере мы создаем переменную my_var , которой мы не присваиваем никакого значения, а затем проверяем, равна ли она None :
my_var = None if my_var is None: print("my_var is None") else: print("my_var is not None")
В этом примере мы используем оператор is, чтобы проверить, является ли переменная my_var объектом None. Если это так, выведем значение равное условию is None .
Меню категорий
-
Загрузка категорий.
Добро пожаловать в Блог Разработчика Владислава Александровича.
Ведется медленная, но уверенная разработка функционала сайта.
Django Core: 0.3.4 / Next.js 1.0 / UPD: 05.06.2023
Почему функция возвращает None?
Доброго времени суток. Решил начать самообучаться азам Python. Сейчас играюсь с функциями и return. Написал вот такой калькулятор, но он возвращает None, хотя весь код исполняется.
Подскажите, пожалуйста, в чем я ошибаюсь. Самостоятельный поиск в гугле не помог.
#Вычисляем факториал def factorial(num1): if num1 == 1: return 1 elif num1 > 0: return num1 * factorial (num1 - 1) else: return ('Не верное число') #Вычисляем сумму def summa(num1, num2): return (num1 + num2) #Вычисляем разность def raznost(num1, num2): return (num1 - num2) #Вычисляем произведение def proisvedenie(num1, num2): return (num1 * num2) #Вычисляем деление def delenie(num1, num2): if num2 == 0: return ('Делить на 0 нельзя') else: return (num1 / num2) #Определяем что делать def deistvie(znak, num1, num2): if znak == '!': factorial(num1) elif znak == '+': summa(num1, num2) elif znak == '-': raznost(num1, num2) elif znak == '*': proisvedenie(num1, num2) elif znak == '/': delenie(num1, num2) else: return ('Нет такого действия') #Получаем данные def inputs(): num1 = float(input('Введите число: ')) znak = input('Введите знак (+, -, *, /, !): ') if znak == '!': num2 = '' else: num2 = float(input('Введите второе число: ')) deistvie (znak, num1, num2) print (inputs())
- Вопрос задан более трёх лет назад
- 6811 просмотров
Комментировать
Решения вопроса 1
В вашей функции deistvie происходит просто вызов функций сложение, вычитания, умножения и т.д. И вы с ними ничего не делатете, т.е. как вариант, это выводить результат, например так:
#Определяем что делать def deistvie(znak, num1, num2): if znak == '!': print(factorial(num1)) elif znak == '+': print(summa(num1, num2)) elif znak == '-': print(raznost(num1, num2)) elif znak == '*': print(proisvedenie(num1, num2)) elif znak == '/': print(delenie(num1, num2)) else: return ('Нет такого действия')
либо надо возвращать значения в deistvie и в inputs, т.е. таким образом
#Определяем что делать def deistvie(znak, num1, num2): if znak == '!': return factorial(num1) elif znak == '+': return summa(num1, num2) elif znak == '-': return raznost(num1, num2) elif znak == '*': return proisvedenie(num1, num2) elif znak == '/': return delenie(num1, num2) else: return ('Нет такого действия') #Получаем данные def inputs(): num1 = float(input('Введите число: ')) znak = input('Введите знак (+, -, *, /, !): ') if znak == '!': num2 = '' else: num2 = float(input('Введите второе число: ')) return deistvie (znak, num1, num2)
