2017-09-03 64 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'的*值* ...並且您必須爲文字創建文字... –