我今天来是因为我有同样的问题。我必须说,我对这些答案很失望!我同意你的观点,这种冗余应该有一个惯用的解决方案。在这种情况下,JavaScript似乎比Python更明智。所以我想增加两个建议。
首先,只要说abarnet是正确的,即如果它只是一个或两个变量,则应该显式。我要说的是,即使比这更重要,明确的结构通常会更好。但我确实认为有些情况下,捷径是允许的。例如,我有一个文件,它构建字典以通过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()
试试看。请注意,由于变量范围的原因,很难将此功能包装成某种类或函数。即使使用字典理解也会失败。但是如果你喜欢在这样的函数中添加3行平面,它会起作用。
其次,考虑在构建字典时是否可以将值赋给变量。所以不是:
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美分。我认为这是一个必要的特性。