私の一連の「python初心者の質問」に従い、別の質問に基づいています。
特権
http://python.net/~goodger/projects/pycon/2007/idiomatic/handout.html#other-languages-have-variablesに移動し、「デフォルト パラメータ値」までスクロールします。そこには、次のものがあります。
def bad_append(new_item, a_list=[]):
a_list.append(new_item)
return a_list
def good_append(new_item, a_list=None):
if a_list is None:
a_list = []
a_list.append(new_item)
return a_list
これとまったく同じ例でpython.orgに「重要な警告」さえありますが、実際には「より良い」とは言っていません。
それを置く1つの方法
ここでの質問は、「エレガントな構文」と「使いやすい」を促進するプログラミング言語のように、既知の問題に対する「良い」構文がなぜ醜いのかということです。
編集:
別の言い方
なぜ、どのように起こるのかは尋ねていません(リンクをくれた Mark に感謝します)。
言語に組み込まれているより単純な代替手段がない理由を尋ねています。
より良い方法はおそらくそれ自体で何かを行うことができると思います.namedef
引数は、変更可能なオブジェクト内の「ローカル」または「新しい」にアタッチされdef
ます。何かのようなもの:
def better_append(new_item, a_list=immutable([])):
a_list.append(new_item)
return a_list
誰かがより良い構文を提供できると確信していますが、これが行われていない理由については、非常に適切な説明があるに違いないと思います。