http://docs.python.org/2/reference/expressions.html#operator-precedence
私の推測では、dict ルックアップの上のバケットの 1 つに分類されます。
func(*mydict[mykey])
最初に辞書検索を行います。Python での操作の順序について詳しく説明している、最初のリンクよりも優れたグラフはありますか?
http://docs.python.org/2/reference/expressions.html#operator-precedence
私の推測では、dict ルックアップの上のバケットの 1 つに分類されます。
func(*mydict[mykey])
最初に辞書検索を行います。Python での操作の順序について詳しく説明している、最初のリンクよりも優れたグラフはありますか?
アンパック*
はオペレーターではありません。これは呼び出し構文の一部です。Callsの下に定義されており、次のことがわかります。
["," "*" expression]
… はargument_list
、2 つの異なる場所で の一部になることができます。(セマンティクスは、「さらに定位置があれば…」および「構文が…」で始まる段落で説明されています。)
したがって、任意のexpression
. expression
直接の引数としてフルを受け取る演算子がないことがわかります。したがって、演算子をゆるく考えたい場合は*
、どの演算子よりもゆるくバインドします。ただし、実際には演算子ではないことに注意してください。
また、これはすべて Python 3.x で変更されたことにも注意してください。しかし、基本的な考え方は同じです。引数のアンパックと代入のアンパックは両方ともexpression
、 だけでなく を使用するため、大まかに言えば、すべてが aまたはより具体的なものprimary
を取るどの演算子よりも緩くバインドされます。primary
それまでの間、コードでパーサーを実行して、その動作を確認することをお勧めします。
>>> import ast
>>> tree = ast.parse('func(*mydict[mykey])')
>>> ast.dump(tree)
"Module(body=[Expr(value=Call(func=Name(id='func', ctx=Load()), args=[], keywords=[],
starargs=Subscript(value=Name(id='mydict', ctx=Load()),
slice=Index(value=Name(id='mykey', ctx=Load())), ctx=Load()), kwargs=None))])"
式全体がから にSubscript
終わることがわかります。starargs
Call
このast
モジュールは、リファレンス マニュアルに記載されているものではなく、抽象文法を使用しています。物事にはさまざまな名前が付けられており、文法の一部と見なされているものの、実際にはパーサーよりも高いレベルで行われているものなどは処理されませんが、一方で、理解するのははるかに簡単です。一斉に。expr
に使用されるstarargs
が になることがわかりますSubscript
。