如果你将一个可变类型传递给一个函数或方法,然后在该函数或方法中无意中将其变异,它也会在外部范围内被改变,这可能会导致非常糟糕并且很难找到错误。
传递可变类型时,业界公认的方法是什么?
例如,您可以使用以下列表:
def func(myList):
myList = myList[:]
然后在函数myList
内部将是一个可以安全变异的副本。与使用copy
模块相同。但这是最好的还是标准的做法?
或者每个人在做其他事情之前是否只是将所有参数重新分配给本地范围变量?有点恼人的额外步骤,改变参数的名称......
答案 0 :(得分:4)
如果您需要副本,请复制,否则不要做任何事情。您不需要反复地复制每个参数。当你编写一个函数时,想一想要传递什么类型的东西,考虑一下你是否需要改变这些东西。如果您这样做,并且您不想在外部修改它们,则进行复制。传递你做想要改变的可变对象并不是闻所未闻。
换句话说,不要在每个函数的开头放置一些通用的样板文件。只需考虑每个功能需要做什么。
答案 1 :(得分:0)
我通常使用list()
,因为它会采用任何可迭代的。
def func(iterable):
myList = list(iterable)
现在您可以使用func(zip(x, y))
调用func,而不必担心zip
不会在Python 3中返回列表。