Python dict.get('ключ') против dict['ключ']
Почему это бросает KeyError:
d = dict()
d['xyz']
Но это не так?
d = dict()
d.get('xyz')
Мне также любопытно, играют ли здесь роль дескрипторы.
4 ответа
Это просто как get()
Метод определен.
Возвращает значение для ключа, если ключ находится в словаре, иначе по умолчанию. Если default не задано, по умолчанию None, поэтому этот метод никогда не вызывает KeyError.
Возвращаемое значение по умолчанию "not-found" None
, Вы можете вернуть любое другое значение по умолчанию.
d = dict()
d.get('xyz', 42) # returns 42
Доступ в скобках не имеет значения по умолчанию, но get
метод и по умолчанию None
, Из документов для получения (через a = dict(); help(a.get)
)
Help on built-in function get:
get(...)
D.get(k[,d]) -> D[k] if k in D, else d. d defaults to None.
Просто потому, что [ 1 ] ключ отсутствует на карте, а [ 2 ] эти две операции различны по своей природе.
Из DICT карт Типы:
d[key]
Верните элемент d с помощью ключа. Вызывает KeyError, если ключ отсутствует на карте.
get(key[, default])
Возвращает значение для ключа, если ключ находится в словаре, иначе по умолчанию. Если default не задано, по умолчанию None, поэтому этот метод никогда не вызывает KeyError.
Я верю, что на ваш первый вопрос получен хороший ответ, но я не вижу ответа на
Мне также любопытно, играют ли здесь роль дескрипторы.
Технически, дескрипторы здесь играют роль, поскольку все методы реализованы неявно с дескриптором, но нет явных явных дескрипторов, которые используются, и они не имеют ничего общего с поведением, которое вы задаете вопрос.