Я пришел сегодня на ТА, потому что у меня был тот же вопрос.Должен сказать, я очень разочарован ответами!Я согласен с вами, что у этой избыточности должно быть идиоматическое решение.И это редкий случай, когда Javascript кажется более разумным, чем Python.Поэтому я хотел бы добавить два предложения.
Во-первых, просто сказать, что Абарнерт прав, что вы должны быть явными, если это только одна или две переменные.Я бы сказал, даже если это больше, явная конструкция обычно будет лучше.Но я думаю, что есть случаи, когда ярлыки допустимы.Например, у меня есть файл, который создает словари для отправки данных через запросы Python.Это все, что он делает.И в каждом случае я получаю словарь, в котором ключи совпадают с определенными мной переменными.Я думаю, что это будет пример файла, в котором допустимо использование ярлыков.
Во-первых, вы можете использовать встроенную функцию eval
.Эту команду обычно избегают, но это тот случай, когда она может помочь, потому что она может взять строку, которая является именем переменной, и выложить значение переменной:
def main():
#variables
foo = "hello world"
bar = 10
baz = [1, 2, 3]
# Build the dictionary:
args = ("foo", "bar", "baz")
dictionary = dict()
for arg in args:
dictionary[arg] = eval(arg)
print(dictionary)
if __name__ == "__main__":
main()
Попробуйте ее,Обратите внимание, что было бы трудно обернуть эту функциональность в некоторый класс или функцию из-за переменной области видимости.Даже использование словаря не удастся.Но если вы довольны добавлением трех строк в такую функцию, это сработает.
Во-вторых, подумайте, можете ли вы присваивать значения переменным при создании словаря.Таким образом, вместо:
foo = 4+5
dictionary = dict(foo=foo)
Попробуйте:
dictionary = dict(
foo=4+5
)
Если вам нужно использовать более ранние значения в более поздних вычислениях, сначала инициализируйте словарь, а затем объедините вычисления с назначением dict.:
dictionary = dict()
dictionary['foo'] = 4 + 5
dictionary['bar'] = dictionary['foo'] + 9
Что-то, что, я думаю, также может помочь в вышеупомянутом случае, это новый PEP, который позволяет вам назначать псевдонимы в расчете.Тот, что BDFL подал в отставку.Так что будем надеяться, что это скоро будет реализовано!
Наконец, просто быстрый комментарий к принятому ответу, тот факт, что Python уже использовал {} для обозначения set, не означает, что мы не можем создать эту функциональность (почему не <> или D () или что-то?).Просто мои 2 цента.Я думаю, что это необходимая функция.