2017-09-03 10 views
0

私はPythonで同等のES6機能を見つけようとしています。 JSでPy600のES6計算されたプロパティ名

、私はこのようなものがあります:

MyClass.render(storyboard=dict([getAuthor()]=self.authorStoryData())) 
:私は、同様のようなものをPythonでdictのコンストラクタで辞書のキーを構成することができますしたい

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

[getAuthor()]は、その関数の戻り値の辞書キーになります。変数があれば、それは価値などです。

これをPythonでやってもらえますか?

私はdict=('%s' % (variable,)=self.contentを実行しようとしましたが、エラーが発生しました。

答えて

3

JavaScriptでオブジェクトリテラルを使用するのと同じように、Pythonでは辞書リテラルを使用する必要があります。ジョンは、コメントにリテラルJavaScriptオブジェクトとPythonの間には大きな違いを強調したよう

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

def objKey(): 
    return 'foo' 

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

print(obj['composedfoo']) # True 

またはあなたの実際の場合:これは、Pythonで、完全に同等になりますdictリテラルは、キーに対するPythonの動作が基本的にJavaScriptの動作であり、デフォルトでは[]です。

JavaScriptで{ [expr]: value }を翻訳するには、{ expr: value }をPythonで記述します。しかし、{ key: value }をJavaScriptで書いただけでは、基本的には{ ['key']: value }なので、Pythonでは{ 'key': value }に相当します。

文字列リテラルが必要なのは、Python辞書がほとんど任意のキーオブジェクトを持つことができ、JavaScriptオブジェクトのように文字列キーに限定されないためです。

+0

ありがとうございます。次のものはまだ有効ですか? 'MyClass.render(storyboard = {'composed + objKey():self.authorStoryData()})' – qarthandso

+0

これはまったく同じです。読みやすさの理由から、辞書作成を独自の行に置くことは意味がありますが、 – poke

+2

基本的に、あなたは '[]'構文なしで何でもしたいです。 JSではPythonで 'something 'がリテラルになりますが、これは' something'の* value *になります...リテラルのリテ​​ラルを明示的にする必要があります... –

関連する問題