2017-09-03 65 views
0

我试图在Python中查找等效的ES6功能。Python中的ES6计算属性名称

在JS,我有这样的事情:

let obj = {['composed' + objKey()]: true} 

我希望你能够编写Python中的字典构造一个字典的键为好,这样的:

MyClass.render(storyboard=dict([getAuthor()]=self.authorStoryData())) 

[getAuthor()]应该产生该函数返回值的字典键。或者,如果它是可变的,它的价值等...

是否有无论如何在Python中做到这一点?

我试过做dict=('%s' % (variable,)=self.content但是抛出错误。

回答

3

就像你在JavaScript中使用对象文字一样,你应该在Python中使用一个字典文字。这将是在Python中完全等效:

def objKey(): 
    return 'foo' 

obj = { 
    'composed' + objKey(): True 
} 

print(obj['composedfoo']) # True 

或者在您的实际情况:

MyClass.render(storyboard={ getAuthor(): self.authorStoryData() }) 

由于乔恩上的评论凸显,一个JavaScript之间的巨大差异对象常量和一个Python字面意思是Python的键行为基本上是JavaScript的默认行为[]

因此,要在JavaScript中翻译{ [expr]: value },您需要在Python中编写{ expr: value }。但是当你只用JavaScript编写{ key: value }时,你必须明白它本质上是一个{ ['key']: value },这使得它等于Python中的{ 'key': value }

你需要字符串键字符串文字的原因很简单,因为Python字典几乎可以具有任意键对象并且不限于JavaScript对象所在的字符串键。

+0

谢谢。以下内容仍然可以工作吗? 'MyClass.render(storyboard = {'composed'+ objKey():self.authorStoryData()})' – qarthandso

+0

是的,它的工作原理是一样的。出于可读性原因,将字典创建放在自己的路线上或许有意义。 – poke

+2

基本上无论你想要什么而不用'[]'语法。虽然'something'会在Python中成为JS的文字,它将成为'something'的*值* ...并且您必须为文字创建文字... –