- d [ 'key_name']
- д [Keys.key_name] * * +1004
- д [KEY_NAME]
Я на самом деле не считаю № 3 требованием импорта на уровне модуля; они просто могут быть в пространстве имен модуля, например Вы могли бы сделать что-то вроде Как программно установить глобальную (модульную) переменную?
Преимущество # 2 перед # 1 в том, что опечатки и устаревшие значения приведут к ошибке атрибута "этот ключ не существует!" а не ошибка индекса "не удалось найти!" - что всегда лучше. # 2> # 1. Это также не более многословно, потому что вы просто устанавливаете K=Keys
(или что-то еще), если вы много печатаете, поэтому у вас есть d[K.key_name]
, всего на два символа больше (). Например, в зависимости от того, как я себя чувствую, я могу сделать следующее:
import subprocess as proc
proc.Popen(..., stdout=proc.PIPE)
или
import subprocess as proc
PIPE = proc.PIPE
proc.Popen(..., stdout=PIPE)
или
from subprocess import *
Popen(..., stdout=PIPE)
Что касается # 3, ALL_CAPS_ARE_LOUD по причине; сбивает с толку различие между d[someVariable]
(которое может содержать любое ключевое слово) и d[magicKeyword]
- тогда как d[MAGIC_KEYWORD]
однозначно говорит о том, что это константа, а не некоторая переменная, которая может содержать константу, например, for someVariable in magicKeywords
. # 3 в основном эквивалентно # 2, например re.DOTALL
(re
эквивалентен KeyConstants
, без необходимости запоминать имя KeyConstants
контейнеров, потому что является модулем). Таким образом, # 3 превосходит # 2, если вы не находитесь в странной ситуации, когда у вас есть разные типы пространств клавиш.
DRY / OAOO очень и очень важен, но в конечном итоге не имеет отношения ни к одному из них, потому что вам всегда нужно повторять имя переменной, чтобы ссылаться на нее; лучшее, что вы можете сделать, это создать псевдоним.
Вы могли бы также рассмотреть # 4, который должен снабдить ваш словарь атрибутами, например d.key_name
- это уместно, только если это какой-то подписываемый объект.
Но процитирую комментарий Йохена Ритцеля: «Использование постоянных ключей должно быть очень редким случаем» (используйте атрибуты объекта или, как он предлагает, возможно, именованный кортеж, хотя я всегда нашел их громоздкими)