デル*:ここでスターを付けた表現を使用することはできません

WIM:

文法デルfor文:

del_stmt: 'del' (expr|star_expr) (',' (expr|star_expr))* [',']

これは、スターを付けた表現を削除することができます。ですから、パーサはそれが原因とされるだろうにもかかわらず、これを気にしないSyntaxError: can't use starred expression here実行時:

>>> ast.parse("del *a")
<_ast.Module at 0xcafef00d>
>>> ast.dump(compile('del *a', filename='wtf.py', mode='single', flags=ast.PyCF_ONLY_AST))
"Interactive(body=[Delete(targets=[Starred(value=Name(id='a', ctx=Del()), ctx=Del())])])"

私はスターあり削除対象を持つことができた欠けているいくつかの使用法はありますか?それは、代わりにシンプルな文法であってはなりません。

del_stmt: 'del' expr (',' expr)* [',']

なぜ文法は主演の表現を削除することができませんか?

ShadowRanger:

実際の文法はで定義されていますexprlist以下のように見えるその関連付け日が3.0の前に戻りstar_expr事になりました。以前、それはだったexpr独占。

基本的に、文法は、彼らがに新しい機能を追加したので、それを可能にexprlistし、すべての場合には文法によって違法それを作るのトラブルに行きませんでしたstar_expr、実際には意味がない、彼らは単に、コンパイラがで無意味な例を拒否作ら後の段階。

それはハックですが、それは動作しますが、私はパーサを簡素化、および/またはそれがために別々の概念を定義し、実装するためにあまりにも多くの問題だいずれかを前提とexprlist対をmaybe_star_exprlist

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=285013&siteId=1