Python dict.get('ключ') против dict['ключ']

Почему это бросает KeyError:

d = dict()
d['xyz']

Но это не так?

d = dict()
d.get('xyz')

Мне также любопытно, играют ли здесь роль дескрипторы.

4 ответа

Это просто как get() Метод определен.

Из документов Python:

Возвращает значение для ключа, если ключ находится в словаре, иначе по умолчанию. Если 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.

Я верю, что на ваш первый вопрос получен хороший ответ, но я не вижу ответа на

Мне также любопытно, играют ли здесь роль дескрипторы.

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

Другие вопросы по тегам