Что значение "None"?



Я изучал Python, и я прочитал главу, которая описывает None значение, но, к сожалению, эта книга не очень понятно в некоторых моментах. Я думал, что найду ответ на свой вопрос, если поделюсь им там.



Я хочу знать, что None стоимостью и и для чего вы его используете?



и еще, я не понимаю эту часть книги:




присвоить значение None к переменной-это один из способов ее сброса к
его исходное, пустое состояние.




что это значит?



ответы были великолепны, хотя я не понимал большинство ответов из-за моего низкого знания компьютерного мира (я не узнал о классах, объектах и т. д.). Что означает это предложение?




присвоить значение None к переменной-это один из способов ее сброса
в исходное, пустое состояние.




финал:



наконец-то я получил свой ответ от поиска до разных ответов. Я должен ценить всех людей, которые вкладывают свое время, чтобы помочь мне (особенно Martijn Pieters и DSM), и я хотел бы, чтобы я мог выбрать все ответы как лучшие, но выбор ограничен одним. Все ответы были великолепны.

1775   8  

8 ответов:

Мартейн объясняет, что None находится в Python, и правильно заявляет, что книга вводит в заблуждение. Так как программисты Python как правило никогда бы не сказали

присвоить значение None к переменной-это один из способов сбросить его его исходное, пустое состояние.

трудно объяснить, что Бриггс имеет в виду таким образом, который имеет смысл и объясняет, почему никто здесь не кажется счастливым с ним. Одна аналогия, которая может помочь:

In Python, имена переменных похожи на наклейки, нанесенные на объекты. Каждая наклейка имеет уникальное имя, написанное на ней, и она может быть только на одном объекте одновременно, но вы можете поместить более одной наклейки на один и тот же объект, если хотите. Когда вы пишете

F = "fork"

вы ставите наклейку " F " на строковый объект "fork". Если вы тогда пишете

F = None

вы перемещаете наклейку в

None - это просто значение, которое обычно используется для обозначения 'пустой', или 'не здесь'. Это сигнал объекта; он имеет значение только потому, что документация Python говорит, что он имеет это значение.

существует только одна копия этого объекта в данном сеансе интерпретатора Python.

если вы пишете функцию, и эта функция не использует явное return заявление None не возвращается, например. Таким образом, Программирование с помощью функции значительно упрощены; функция всегда возвращает что-то, даже если это только один

это документация Python должен сказать о None:

единственное значение типов.NoneType. Не часто используется для представления отсутствие значения, а когда аргументы по умолчанию не передается функция.

изменено в версии 2.4: задания не являются незаконными и поднять Синтаксис ошибка.

обратите внимание на имена None и debug не может быть переназначен (назначения к их, даже как имя атрибута, поднимают SyntaxError), поэтому они могут быть считается" истинными " константами.

  1. давайте подтвердим тип None первый

    print type(None)
    print None.__class__
    

    выход

    <type 'NoneType'>
    <type 'NoneType'>
    

по сути, NoneType это тип данных так же, как int,float и т. д. Вы можете проверить список типов по умолчанию в Python в 8.15. типы-имена для встроенных устройств типы.

  1. и None пример NoneType класса. Поэтому мы могли бы создать экземпляры None сами. Давайте попробуем это

    print types.IntType()
    print types.NoneType()
    

    выход

    0
    TypeError: cannot create 'NoneType' instances
    

так ясно, не может создать NoneType экземпляров. Нам не нужно беспокоиться об уникальности значения None.

  1. давайте проверим, как мы реализовали None внутренне.

    print dir(None)
    

    выход

    ['__class__', '__delattr__', '__doc__', '__format__', '__getattribute__', 
     '__hash__', '__init__', '__new__', '__reduce__', '__reduce_ex__',
     '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']
    

за исключением __setattr__, все остальные атрибуты доступны только для чтения. Таким образом, мы не можем изменить атрибуты None.

  1. давайте попробуем добавить новые атрибуты к None

    setattr(types.NoneType, 'somefield', 'somevalue')
    setattr(None, 'somefield', 'somevalue')
    None.somefield = 'somevalue'
    

    выход

    TypeError: can't set attributes of built-in/extension type 'NoneType'
    AttributeError: 'NoneType' object has no attribute 'somefield'
    AttributeError: 'NoneType' object has no attribute 'somefield'
    

приведенные выше операторы создают эти сообщения об ошибках, соответственно. Это значит что, мы не можем создавать атрибуты динамически на None экземпляра.

  1. давайте проверим, что происходит, когда мы приписываем чему-то None. Согласно документации, он должен бросить SyntaxError. Это значит, если мы назначим что-то None программа не будет выполняться вообще.

    None = 1
    

    выход

    SyntaxError: cannot assign to None
    

установлено, что

  1. None экземпляр из NoneType
  2. None не может иметь новые атрибуты
  3. существующие атрибуты None изменить нельзя.
  4. мы не можем создавать другие экземпляры NoneType
  5. мы даже не можем изменить ссылку на None присваивая ему значения.

Итак, как указано в документации,None действительно можно рассматривать как true constant.

счастлив, зная None :)

книги вы ссылаетесь на явно пытается значительно упростите значение None. Переменные Python не есть начальное, пустое состояние-переменные Python являются привязанные (только), когда они определены. Вы не можете создать переменную Python, не давая ей значения.

>>> print(x)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'x' is not defined
>>> def test(x):
...   print(x)
... 
>>> test()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: test() takes exactly 1 argument (0 given)
>>> def test():
...   print(x)
... 
>>> test()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in test
NameError: global name 'x' is not defined

но иногда вы хотите, чтобы функция означать разные вещи в зависимости от того, является ли переменная или нет. Вы можете создать аргумент со значением по умолчанию None:

>>> def test(x=None):
...   if x is None:
...     print('no x here')
...   else:
...     print(x)
... 
>>> test()
no x here
>>> test('x!')
x!

дело в том, что это значение является специальным None значение не очень важно в данном случае. Я мог бы использовать любое значение по умолчанию:

>>> def test(x=-1):
...   if x == -1:
...     print('no x here')
...   else:
...     print(x)
... 
>>> test()
no x here
>>> test('x!')
x!

. но None вокруг дает нам два преимущества:

  1. мы не должны выбрать специальное значение, как -1 чей смысл непонятен, и
  2. наша функция может на самом деле нужно обрабатывать -1 как обычный вход.
>>> test(-1)
no x here

упс!

таким образом, книга немного вводит в заблуждение в основном в своем использовании слова сброс назначение None к имени-это сигнал программисту, что это значение не используется или что функция должна вести себя каким-то образом по умолчанию, но к сброс значение для его исходного, неопределенного состояния вы должны использовать del ключевые слова:

>>> x = 3
>>> x
3
>>> del x
>>> x
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'x' is not defined

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


например:
если d словари, d.get(k) вернутся d[k] если он существует, но None Если d нет ключа k.

прочитайте эту информацию из большого блога:http://python-history.blogspot.in/

Я люблю примеры кода (а также фрукты), так что позвольте мне показать вам

apple = "apple"
print(apple)
>>> apple
apple = None
print(apple)
>>> None

None ничего не значит, оно не имеет значения.

значение None равно False.

другие ответы уже объяснили значение нет красиво. Тем не менее, я все равно хотел бы пролить больше света на это, используя пример.

пример:

def extendList(val, list=[]):
    list.append(val)
    return list

list1 = extendList(10)
list2 = extendList(123,[])
list3 = extendList('a')

print "list1 = %s" % list1
print "list2 = %s" % list2
print "list3 = %s" % list3

теперь попробуйте угадать вывод из приведенного выше списка. Ну,ответ удивительно, как показано ниже:

list1 = [10, 'a']
list2 = [123]
list3 = [10, 'a']

Но Почему?

Многие ошибочно ожидать list1 to будьте равны [10] и list3 будет равна ['a'], думая, что аргумент списка будет установлено в значение по умолчанию [] каждый раз, когда вызывается extendList.

однако, что на самом деле происходит это новый список по умолчанию создается только один раз, когда функция определена, и этот же список затем используется впоследствии всякий раз, когда extendList вызывается без указания аргумента списка. Это потому что выражения в аргументах по умолчанию вычисляются при определении функции, а не при ее вызове.

list1 и list3 поэтому работают в том же списке по умолчанию, тогда как list2 работает с отдельным списком, который он создал (передавая свой собственный пустой список в качестве значения для параметра list).


'None' Спаситель: (изменить пример выше, чтобы произвести желаемое поведение)

def extendList(val, list=None):
    if list is None:
       list = []
    list.append(val)
    return list

list1 = extendList(10)
list2 = extendList(123,[])
list3 = extendList('a')

print "list1 = %s" % list1
print "list2 = %s" % list2
print "list3 = %s" % list3

С этой пересмотренной реализацией результатом будет:

list1 = [10]
list2 = [123]
list3 = ['a']

Примечание - пример кредита toptal.com

largest=none
smallest =none 
While True :
          num =raw_input ('enter a number ') 
          if num =="done ": break 
          try :
           inp =int (inp) 
          except:
              Print'Invalid input' 
           if largest is none :
               largest=inp
           elif inp>largest:
                largest =none 
           print 'maximum', largest

          if smallest is none:
               smallest =none
          elif inp<smallest :
               smallest =inp
          print 'minimum', smallest 

print 'maximum, minimum, largest, smallest 

Comments

    Ничего не найдено.