Что означает `Dict [str, Any]` в Python? - PullRequest
0 голосов
/ 06 мая 2020

Я обращаюсь к документации, доступной здесь , чтобы понять, как определяются возвращаемые типы при использовании аннотаций функций.

Я не мог понять, что означает строка в Dict[str, Any] к. Обращается ли str к ключам словаря, а Any (то есть, это может быть строка или int) относится к типу значения словаря? РЕДАКТИРОВАТЬ: в вышеупомянутой ссылке упоминается

Тип PEP 484 Dict [str, Any] подойдет, но он слишком мягкий, так как можно использовать произвольные строковые ключи и допустимы произвольные значения.

Может ли кто-нибудь объяснить, что означает arbitrary string keys? Я понимаю, что ключи - это строки, но когда мы говорим arbitrary string keys, мы просто имеем в виду, что словарь может принимать любой ключ, который является строкой? Или слово arbitrary имеет здесь какое-то другое значение?

1 Ответ

1 голос
/ 06 мая 2020

Ага! Обычно переменные python изменяемы (типы могут меняться), но указание на это в таком виде - хорошая документация и очень ясно дает понять, что и куда идет.

Дополнительную документацию по использованию можно найти здесь! https://docs.python.org/3/library/typing.html

РЕДАКТИРОВАТЬ: Уточните ответ на обновленный вопрос

Документация PEP , на которую вы ссылаетесь, определяет, как подсказки типа, хотя и полезные, по-прежнему подвержены ошибкам.

Если указать Dict[str, Any], str может быть «arbitrary», что означает, что это может быть строковый ключ любого (ie. name, age, height, humidity). Из этих ключей можно подумать, что «humidity» не должно быть одним из строковых ключей для этого dict, но нет способа проверить или принудительно применить это, пока не произойдет какая-то ошибка в будущем ( следовательно, он «произвольный»; нет правил, определяющих, какие «разрешенные» строковые ключи для этого dict).

Следовательно, согласно документации, указание этого класса (производного от TypedDict):

class Movie(TypedDict):
    name: str
    year: int

будет специально ограничивать пользователей создавать новый тип dict (a TypedDict) со строковыми ключами name и year (с соответствующими введенными значениями str и int). Пользователи не смогут «произвольно» добавить новый ключ (ie. humidity) к этому «Movie» TypedDict или иным образом присвоить Movie["year"]. * 1043 значение, отличное от int. *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...