Я изучал Python и прочитал главу, в которой описывается его None
ценность, но, к сожалению, эта книга в некоторых моментах не очень ясна. Думал, что найду ответ на свой вопрос, если поделюсь им там.
Я хочу знать , что None
значение является и то , что вы используете это?
А еще я не понимаю эту часть книги:
Присвоение значения
None
переменной - это один из способов вернуть ее в исходное пустое состояние.
Что это значит?
Ответы были отличными, хотя я не понимал большинство ответов из-за моего низкого знания компьютерного мира (я не знал о классах, объектах и т. Д.). Что означает это предложение?
Присвоение значения
None
переменной - это один из способов вернуть ее в исходное пустое состояние.
Финал:
Наконец, я получил свой ответ, глядя на разные ответы. Я должен ценить всех людей, которые потратили свое время, чтобы помочь мне (особенно Мартин Питерс и DSM), и я хотел бы выбрать все ответы как лучшие, но выбор ограничен одним. Все ответы были отличными.
источник
None
не является пустым состоянием по умолчанию для переменных.undef
. также, возможно, javascript, хотя в нем естьnull
иundefined
.undefined
, если оно не инициализировано.null
, о чем я не могу сказать @MartijnPieters в его ответе.Ответы:
Ответ Мартейна объясняет, что
None
есть в Python, и правильно заявляет, что книга вводит в заблуждение. Поскольку программисты Python, как правило, никогда не скажутТрудно объяснить, что имеет в виду Бриггс, так, чтобы это имело смысл и объясняло, почему никого здесь это не устраивает. Одна аналогия, которая может помочь:
В Python имена переменных похожи на наклейки, наклеенные на объекты. На каждой наклейке написано уникальное имя, и одновременно она может быть только на одном объекте, но при желании вы можете наклеить более одной наклейки на один и тот же объект. Когда ты пишешь
вы наклеиваете наклейку «F» на строковый объект
"fork"
. Если вы затем напишетевы перемещаете наклейку на
None
объект.Бриггс просит вас представить, что вы не писали наклейку
"F"
, на ней уже былаF
наклейкаNone
, и все, что вы сделали, это переместили ее сNone
на"fork"
. Поэтому, когда вы печатаетеF = None
, вы «сбрасываете [ting] его в исходное, пустое состояние», если мы решили рассматривать егоNone
как значениеempty state
.Я понимаю, к чему он клонит, но это плохой способ смотреть на это. Если вы запустите Python и наберете
print(F)
, вы увидитеа это
NameError
означает, что Python не распознает имяF
, потому что такой наклейки нет . Если Бриггс был прав иF = None
возвращаетсяF
в исходное состояние, тогда он должен быть там сейчас, и мы должны увидетькак мы делаем после того, как напечатали
F = None
и наклеили наклейкуNone
.Вот и все, что происходит. На самом деле, Python поставляется с некоторыми наклейками уже прикрепленных к объектам (встроенные имена), а другие вы должны написать сам с линиями , как
F = "fork"
иA = 2
иc17 = 3.14
, а затем вы можете наклеить их на других объектах позже (например ,F = 10
илиF = None
, это все равно .)Бриггс делает вид, что все возможные наклейки, которые вы, возможно, захотите написать, уже приклеены к
None
объекту.источник
None
это просто значение, которое обычно используется для обозначения «пусто» или «здесь нет значения». Это сигнальный объект ; он имеет значение только потому, что в документации Python сказано, что он имеет это значение.В данном сеансе интерпретатора Python есть только одна копия этого объекта.
Если вы пишете функцию, и эта функция не использует явный
return
оператор,None
вместо этого возвращается, например. Таким образом, программирование с помощью функций значительно упрощается; функция всегда что-то возвращает , даже если это только одинNone
объект.Вы можете проверить это явно:
Другое использование - присвоить функциям необязательные параметры по умолчанию:
Функция
spam()
имеет необязательный аргумент; если вы вызываетеspam()
без его указания, емуNone
присваивается значение по умолчанию , что позволяет легко определить, была ли функция вызвана с аргументом или нет.В других языках есть похожие концепции. SQL имеет
NULL
; В JavaScript естьundefined
иnull
т. Д.Обратите внимание, что в Python переменные существуют в силу того, что они используются. Вам не нужно сначала объявлять переменную, поэтому в Python нет действительно пустых переменных.
None
Тогда установка переменной в значение - это не то же самое, что установка ее в пустое значение по умолчанию;None
это значение тоже, хотя тот , который часто используется для сигнала пустота. Книга, которую вы читаете, вводит в заблуждение в этом отношении.источник
undefined
иnull
.undefined
это объект в JavaScript, и вы можете использовать этот объект явно, как иNone
в Python. Это сигнальный объект, имеющий почти то же значение.NULL
все же это то, что можно явно назначить и протестировать.Вот о чем говорится в документации Python
None
:Подтвердим тип
None
первогоВывод
По сути,
NoneType
это такой же тип данных, какint
,float
и т.д. Вы можете проверить список типов по умолчанию, доступных в Python в 8.15. types - Имена встроенных типов .И
None
это экземплярNoneType
класса. Так что мы можем захотеть создать экземплярыNone
самих себя. Давай попробуем этоВывод
Итак, ясно, что нельзя создавать
NoneType
экземпляры. Нам не нужно беспокоиться об уникальности стоимостиNone
.Давайте проверим, как мы реализовали это
None
внутри.Вывод
За исключением того
__setattr__
, что все остальные атрибуты доступны только для чтения. Итак, мы не можем изменить атрибутыNone
.Попробуем добавить новые атрибуты в
None
Вывод
Приведенные выше операторы соответственно создают эти сообщения об ошибках. Это означает, что мы не можем динамически создавать атрибуты в
None
экземпляре.Давайте проверим, что происходит, когда мы что-то назначаем
None
. Согласно документации, он должен генерировать файлSyntaxError
. Значит, если мы что-то присвоимNone
, программа вообще не будет выполняться.Вывод
Мы установили, что
None
это примерNoneType
None
не может иметь новых атрибутовNone
нельзя изменить.NoneType
None
, присвоив ей значения.Итак, как уже упоминалось в документации,
None
действительно может рассматриваться какtrue constant
.Счастливое знание
None
:)источник
__setattr__
для NoneКнига, на которую вы ссылаетесь, явно пытается значительно упростить смысл
None
. Переменные Python не имеют начального пустого состояния - переменные Python связаны (только), когда они определены . Вы не можете создать переменную Python, не присвоив ей значения.но иногда вы хотите, чтобы функция означала разные вещи в зависимости от того, определена ли переменная или нет. Вы можете создать аргумент со значением по умолчанию
None
:То, что это значение является особенным,
None
в данном случае не так уж важно. Я мог бы использовать любое значение по умолчанию:… Но наличие
None
окружения дает нам два преимущества:-1
, значение которого неясно, и-1
как обычном вводе.упс!
Таким образом, книга немного вводит в заблуждение, в основном, в своем использовании слова reset - присвоение
None
имени является сигналом программисту о том, что это значение не используется или что функция должна вести себя как-то по умолчанию, но для сброса значения в исходное, неопределенное состояние, вы должны использоватьdel
ключевое слово:источник
Другие ответы уже прекрасно объяснили значение None . Однако я все же хотел бы пролить свет на это на примере.
Пример:
Теперь попробуем угадать вывод вышеприведенного списка. Что ж, ответ на удивление выглядит следующим образом:
Но почему?
Многие ошибочно ожидают, что list1 будет равен [10], а list3 будет равен ['a'] , думая, что аргумент списка будет иметь значение по умолчанию [] при каждом вызове extendList.
Однако на самом деле происходит то, что новый список по умолчанию создается только один раз, когда функция определена , и тот же самый список затем используется впоследствии всякий раз, когда extensionList вызывается без указания аргумента списка. Это связано с тем, что выражения в аргументах по умолчанию вычисляются при определении функции, а не при ее вызове .
Таким образом, list1 и list3 работают с одним и тем же списком по умолчанию, тогда как list2 работает с отдельным списком, который он создал (передав свой собственный пустой список в качестве значения для параметра списка).
«Нет» спаситель: (Измените пример выше, чтобы добиться желаемого поведения)
С этой пересмотренной реализацией результат будет:
Примечание - Пример кредита toptal.com
источник
None - одноэлементный объект (имеется в виду только один None), используемый во многих местах языка и библиотеки для обозначения отсутствия какого-либо другого значения.
Например:
если
d
это словарь,d.get(k)
вернется,d[k]
если он существует, ноNone
если уd
него нет ключаk
.Прочтите эту информацию из отличного блога: http://python-history.blogspot.in/
источник
Все это хорошие ответы, но я думаю, что есть еще кое-что, чтобы объяснить, почему
None
это полезно.Представьте, что вы собираете приглашения на свадьбу. Вы хотите записать, будет ли присутствовать каждый человек. Если они присутствуют, вы устанавливаете
person.attending = True
. Если они не присутствуют, вы устанавливаетеperson.attending = False
. Если вы не получили ответа, тогдаperson.attending = None
. Таким образом вы сможете отличить отсутствие информации -None
- от отрицательного ответа.источник
Я люблю примеры кода (а также фрукты), поэтому позвольте мне показать вам
Нет ничего не значит, это не имеет значения.
None оценивается как False.
источник
print(None)
печать ..None
. Это делает не , как вы не предлагаете, печать ничего.None
если это результат последнего выражения. (что в основном полезно для функций, не предназначенных для возврата значения.)None
если это результат выражения, в основном, чтобы не загромождать вывод.источник