编辑就地函数应该返回对象“引用”吗?

时间:2017-03-15 15:17:59

标签: python

我有一个修改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方式”

1 个答案:

答案 0 :(得分:2)

Python中的约定是,如果函数就地运行,则返回None。例如,您可以在列表方法.sort.append中看到这一点,这些方法会修改它们被调用的列表但返回None。

注意,您的第一个示例根本不需要return