Python是否支持对象文字属性值简写,即ECMAScript 6?

时间:2015-02-25 15:26:51

标签: javascript python dictionary ecmascript-6

在ECMAScript 6中,我可以做这样的事情......

var id = 1;
var name = 'John Doe';
var email = 'email@example.com';
var record = { id, name, email };

...作为此的简写:

var id = 1;
var name = 'John Doe';
var email = 'email@example.com';
var record = { 'id': id, 'name': name, 'email': email };

Python中是否有类似的功能?

3 个答案:

答案 0 :(得分:4)

不,但你可以做到这一点

record = {i: locals()[i] for i in ('id', 'name', 'email')}

(归功于Python variables as keys to dict

但是我不会这样做,因为它会影响可读性并使静态检查程序无法找到未定义的名称错误。

直接在python中输入的示例与set相同,不是字典

{id, name, email} == set((id, name, email))

答案 1 :(得分:0)

不,Python中没有类似的简写。它甚至会引入set文字的歧义,它具有确切的语法:

>>> foo = 'foo'
>>> bar = 'bar'
>>> {foo, bar}
set(['foo', 'bar'])
>>> {'foo': foo, 'bar': bar}
{'foo': 'foo', 'bar': 'bar'}

答案 2 :(得分:0)

由于设置文字,你不能轻易使用对象文字速记,locals()有点不安全。

我在几年前写了hacky gist,创建了一个d函数,你可以使用它,la

record = d(id, name, email, other=stuff)

去看看我是否可以更好地打包它。