Python を長年使用している人なら誰でも、次の問題に悩まされる (または引き裂かれる) でしょう。 リーリー
Python の初心者は、引数なしで呼び出されたこの関数が常に 1 つの要素のみを含むリストを返すことを期待します:[5]。結果は大きく異なり、非常に驚くべきものです (初心者にとって):
リーリー
######編集###:###
baczek は興味深い例を挙げました。あなたのコメントのほとんど、特にutaalのコメントと併せて、さらに詳しく説明します:リーリー 私にとって、設計上の決定は、パラメーターのスコープをどこに配置するかに関連しているように思えます。関数内に配置するか、それとも関数「とともに」配置するかです。
関数内でバインドするということは、x
が関数の呼び出し時に、定義ではなく、指定されたデフォルト値に効果的にバインドされることを意味します。これは重大な欠点をもたらします。def
行は次のようになります。 (関数オブジェクトの) バインディングの一部の「混合」は定義時に行われ、一部 (デフォルト パラメーターの割り当て) は関数呼び出し時に行われます。
実際の動作はより一貫しています。行が実行されるとき、つまり関数定義時に、行のすべての内容が評価されます。
正解
Python のデフォルト パラメーター値
でこの動作の理由を詳しく説明しています。 これは非常に明確であることがわかり、関数オブジェクトがどのように機能するかをよりよく理解するために読むことを強くお勧めします。以上が「最小のサプライズ」と可変のデフォルト引数の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。