Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 就地编辑功能应返回“对象”;参考资料;还是不?_Python - Fatal编程技术网

Python 就地编辑功能应返回“对象”;参考资料;还是不?

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

我有一个函数可以修改两个可变对象(一个列表和一个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 
上述代码被认为是实现这一点的最佳方法,还是“更好”

在本例中,我将返回将覆盖原始名称引用的输入(修改)值

这两种情况下的结果应该是相同的


我知道“优于”的问题可能会因观点而产生偏见,但鉴于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)