2
私は2つの変更可能なオブジェクト(リストとdict)を変更する関数を持っています。
pythonの性質与えられた関数の中でそれらを変更すると、変更は外部から見えるはずです。インプレイス関数を編集するとオブジェクト "参照"が返されるかどうか
私の質問は、値を返すことについてどのような慣例/ベストプラクティスと言いますか?
my_dict = {
'flag' : False
}
my_list = [
{'color': 'blue'},
{'color': 'yellow'}
]
def modify_in_place(my_dict_param, my_list_param):
my_dict_param['flag'] = True
for item in my_list_param:
item['color'] = 'red'
# nothing in this case
return
modify_in_place(my_dict, my_list)
# Now both arguments should reflect their modified states
上記のコードは、これを実行する最善の方法と考えられていますか?
def modify_in_place(my_dict_param, my_list_param):
my_dict_param['flag'] = True
for item in my_list_param:
item['color'] = 'red'
return my_dict_param, my_list_param
my_dict, my_list = modify_in_place(my_dict, my_list)
この場合、元の名前の参照を上書きする入力(変更)値が返されます。
結果はどちらの場合も同じであるはずです。
私は質問「より良い」は意見によってバイアスが、PythonはPythonで大会があることである私は、「Pythonの道」
私には2番目の方が良いですが、私がこれをバックアップしなければならないのはPythonのZen of "Explicitが暗黙的です"よりですが、どちらも明示的な議論が可能かもしれません。しかし、あなたは正しい、彼らはほぼ同じ機能を持っている、私は2番目のものは余分な割り当て操作があると思う。 – Hoopdady
@Hoopdady:これは、オブジェクトがインプレースで変更されたことを通知するためにPython APIが明示的に 'None'を返す理由です。 –
関連性:http://stackoverflow.com/a/1682601/6260170 –