Python 就地编辑功能应返回“对象”;参考资料;还是不?
我有一个函数可以修改两个可变对象(一个列表和一个dict)。Python 就地编辑功能应返回“对象”;参考资料;还是不?,python,Python,我有一个函数可以修改两个可变对象(一个列表和一个dict)。 鉴于python的性质,如果我在函数内部修改它们,那么这些更改应该是从外部可见的 我的问题是关于返回值的约定/最佳实践是什么 my_dict = { 'flag' : False } my_list = [ {'color': 'blue'}, {'color': 'yellow'} ] def modify_in_place(my_dict_param, my_list_param): my_d
鉴于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
上述代码被认为是实现这一点的最佳方法,还是“更好”
在本例中,我将返回将覆盖原始名称引用的输入(修改)值
这两种情况下的结果应该是相同的
我知道“优于”的问题可能会因观点而产生偏见,但鉴于python通常采用常规的方式来做事情,我想问一下“python方式”python中的惯例是,如果函数在适当的位置运行,它将不返回任何结果。例如,您可以在列表方法
.sort
和.append
中看到这一点,这些方法修改调用它们的列表,但不返回任何列表
注意,您的第一个示例根本不需要
return
。对我来说,第二个示例更好,但我必须支持的唯一相关内容是Python的Zen“显式优于隐式”,但可能有一个论点认为两者都是显式的。但是你是对的,它们在功能上几乎相同,我认为第二个函数只是有一个额外的赋值操作。@Hoopdady:这就是为什么Python API显式返回None
,以表示对象已被就地更改。相关:
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)