Python 是否支持对象文字 属性 值 shorthand,a la ECMAScript 6?
Does Python support object literal property value shorthand, a la ECMAScript 6?
在 ECMAScript 6 中,我可以做这样的事情...
var id = 1;
var name = 'John Doe';
var email = 'email@example.com';
var record = { id, name, email };
... 作为 shorthand 为此:
var id = 1;
var name = 'John Doe';
var email = 'email@example.com';
var record = { 'id': id, 'name': name, 'email': email };
Python有没有类似的功能?
没有,Python中没有类似的shorthand。它甚至会引入 set
文字的歧义,这些文字具有完全相同的语法:
>>> foo = 'foo'
>>> bar = 'bar'
>>> {foo, bar}
set(['foo', 'bar'])
>>> {'foo': foo, 'bar': bar}
{'foo': 'foo', 'bar': 'bar'}
不,但是你可以这样做得到同样的结果
record = {i: locals()[i] for i in ('id', 'name', 'email')}
(归功于 Python variables as keys to dict)
你的例子,直接在python中输入,与集合相同,不是字典
{id, name, email} == set((id, name, email))
你不能轻易使用对象字面量 shorthand 因为设置字面量,locals()
有点不安全。
几年前我写了一个 hacky gist 创建了一个 d
你可以使用的函数,一个 la
record = d(id, name, email, other=stuff)
去看看我能不能把它包装得更漂亮一点。
是的,您可以使用名为 sorcery 的黑魔法库很好地获得此功能,该库提供 dict_of
:
x = dict_of(foo, bar)
# same as:
y = {"foo": foo, "bar": bar}
注意你也可以像ES6一样解压:
foo, bar = unpack_keys(x)
# same as:
foo = x['foo']
bar = x['bar']
这可能会让经验丰富的 Python 爱好者感到困惑,并且对于 performance-sensitive 代码路径来说可能不是一个明智的选择。
在 ECMAScript 6 中,我可以做这样的事情...
var id = 1;
var name = 'John Doe';
var email = 'email@example.com';
var record = { id, name, email };
... 作为 shorthand 为此:
var id = 1;
var name = 'John Doe';
var email = 'email@example.com';
var record = { 'id': id, 'name': name, 'email': email };
Python有没有类似的功能?
没有,Python中没有类似的shorthand。它甚至会引入 set
文字的歧义,这些文字具有完全相同的语法:
>>> foo = 'foo'
>>> bar = 'bar'
>>> {foo, bar}
set(['foo', 'bar'])
>>> {'foo': foo, 'bar': bar}
{'foo': 'foo', 'bar': 'bar'}
不,但是你可以这样做得到同样的结果
record = {i: locals()[i] for i in ('id', 'name', 'email')}
(归功于 Python variables as keys to dict)
你的例子,直接在python中输入,与集合相同,不是字典
{id, name, email} == set((id, name, email))
你不能轻易使用对象字面量 shorthand 因为设置字面量,locals()
有点不安全。
几年前我写了一个 hacky gist 创建了一个 d
你可以使用的函数,一个 la
record = d(id, name, email, other=stuff)
去看看我能不能把它包装得更漂亮一点。
是的,您可以使用名为 sorcery 的黑魔法库很好地获得此功能,该库提供 dict_of
:
x = dict_of(foo, bar)
# same as:
y = {"foo": foo, "bar": bar}
注意你也可以像ES6一样解压:
foo, bar = unpack_keys(x)
# same as:
foo = x['foo']
bar = x['bar']
这可能会让经验丰富的 Python 爱好者感到困惑,并且对于 performance-sensitive 代码路径来说可能不是一个明智的选择。