我知道在Python中,因为它是通过共享的,所以如果我将一个可变对象(如列表)传递给一个函数,然后使用该函数对其进行变异,则不需要显式地将其传递回去,因为呼叫者可以看到更改:
def add_to_list(list_of_nums):
list_of_nums.append(26)
my_list = [12]
add_to_list(my_list)
print my_list # >>>[12, 26]
所以这可行。但这是一个好主意/良好的python做法吗?我的直言不尽(用相同的方法,全局变量几乎总是一个坏主意),但这也许只是因为我第一次学习了C ++的所有传递值的荣耀。
是的,我知道我可以对此进行编码(例如,通过创建一个类),但是问题是,我应该这样做,还是通常将其视为可接受的做法?
我认为这是否“可以接受”将取决于上下文以及该函数的命名方式。保持佩普20记:“显式优于隐式”。
Python完全支持函数式编程,在这种情况下,通常希望修改传入的对象。如果该函数的名称正确并有据可查,我认为很好。您的示例很好地说明了这一点。该函数称为add_to_list
,它非常明确地说明了函数的作用。
如果您的程序/脚本采用了更多的面向对象的方法,则应该通过创建适当的类来代替修改传入的对象,例如list
您的示例中的本机类-它具有一种append()
修改列表而不是传递列表的方法变成一个单独的功能。
关键是要与您的范例保持一致并有据可查。如果您涵盖了这两个基础,我认为这是可以接受的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句