以下の関数は、実行するたびに値をそのリストに保持します。私は最近、Python 'gotcha'としてこの問題について、変更可能なデフォルト引数を使用していることを知りました。再帰関数のデフォルトのリスト値
どうすれば修正できますか?関数の外部にグローバル変数を作成すると同じ問題が発生します。関数にリストを渡すと、再帰が中断され、最初のレベルのカテゴリのみが表示されます。
def build_category_list(categories, depth=0, items=[]):
'''Builds category data for parent select field'''
for category in categories:
items.append((category.id, '-' * depth + ' ' + category.name))
if category.children:
build_category_list(category.children, depth + 1)
return items
「再帰を中断する」関数にリストを渡すにはどうすればよいですか? 'items'をキーワード以外のパラメータにして、再帰呼び出しに' item'を追加し、関数を呼び出すときに新しいリストを渡すだけで動作します。 –