【问题标题】:Does Python support object literal property value shorthand, a la ECMAScript 6?Python 是否支持对象文字属性值的简写,比如 ECMAScript 6?
【发布时间】:2015-04-27 16:10:40
【问题描述】:

在 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 中有没有类似的功能?

【问题讨论】:

标签: javascript python dictionary ecmascript-6


【解决方案1】:

不,Python 中没有类似的速记。它甚至会在 set 文字中引入歧义,它们具有相同的语法:

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

【讨论】:

    【解决方案2】:

    不,但是这样做可以实现相同的效果

    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))
    

    【讨论】:

      【解决方案3】:

      因为集合字面量,你不能轻易使用对象字面量速记,locals() 有点不安全。

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

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

      去看看能不能打包好一点。

      【讨论】:

        猜你喜欢
        • 2012-11-30
        • 2014-09-30
        • 2014-10-04
        • 2014-04-19
        • 2019-01-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-12
        相关资源
        最近更新 更多