`f(kw=a, *b)` with keyword argument before star arguments isn’t evaluated left-to-right
オープン
まだ誰も着手していません。
interpreter-core
type-bug
- 主要言語
- Python
- スター
- 77.2k
- フォーク
- 36k
- 平均マージ
- 1日 9時間
- マージ済み PR(30日)
- 558
説明
def f(a, kw):
pass
f(kw=print(1), *[print(2)])
In Python 3.4.10 and earlier, this prints 1 then 2, but in Python 3.5.0 and later, this prints 2 then 1.
This seems like a bug of some kind. Given that ast.parse() doesn’t distinguish between f(kw=a, *b) and f(*b, kw=a), perhaps the bug is that a keyword argument is allowed before star arguments at all—we already disallow f(kw=a, b), f(**a, b), and f(**a, *b).
コントリビューションガイド
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
調査の方向性
まず、影響を受ける Python バージョンで、提示された f(kw=print(1), *[print(2)]) の例を再現し、次に CPython がキーワード引数とスター引数を含む呼び出しをどのようにパースして評価するかを追跡します。選択した解決策が無効な引数の順序を拒否することである場合はそれが行われるか、動作が一貫して修正されれば完了です。この issue ではソースファイルやテストは指定されていません。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- python
- 領域
- compilers
- issue の種類
- バグ
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 活発さ
- 停滞
- 明瞭さ
- おおむね明確
- 初心者へのやさしさ
- 35/100