Pythonでは、 Python識別子ではないキーワード引数を関数に与えても安全ですか? 次に例を示します。
>>> '{x-y}'.format(**{'x-y': 3}) # The keyword argument is *not* a valid Python identifier
'3'
>>> '{x-y}'.format(x-y=3)
File "<ipython-input-12-722afdf7cfa3>", line 1
SyntaxError: keyword can't be an expression
ダッシュを含む名前でフォーマットする方が便利なので、これを求めています(値は名前にダッシュを含むコマンドライン引数に対応するため)。しかし、この動作は信頼できますか (つまり、Python のバージョン間で異なる可能性があります)?
キーワード引数として非識別子を使用することが正式にサポートされているかどうかはわかりません。実際、ドキュメントには次のように書かれています。
構文 **expression が関数呼び出しにある場合、expression はマッピングに評価される必要があり、その内容は追加のキーワード引数として扱われます。
…ここで、「キーワード引数」は、識別子である名前を持つものとして定義されます。
キーワード引数 ::= キーワード項目 ("," キーワード項目)*
keyword_item ::= 識別子 "=" 式
識別子は、使用できる文字が制限されています (-
たとえば、禁止されています)。
識別子 ::= (文字 |"_") (文字 | 数字 | "_")*
そのため、ドキュメントでは**
、関数呼び出しで指定されたマッピングにはキーとして有効な識別子のみを含める必要があることを示していますが、CPython 2.7 はより一般的なキー (変数に値を入れない引数をformat()
持つ関数) を受け入れます)。**
これは信頼できる機能ですか?