我有一个修改2个可变对象(列表和字典)的函数 鉴于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方式”
答案 0 :(得分:2)
Python中的约定是,如果函数就地运行,则返回None。例如,您可以在列表方法.sort
和.append
中看到这一点,这些方法会修改它们被调用的列表但返回None。
注意,您的第一个示例根本不需要return
。