在 python 中,我们可以在定义函数时设置默认参数值。但是默认参数值只计算一次。因此,如果我们在函数中更改此类参数的值,则更改将在以后的调用中累积。
这意味着一个函数将保持状态。它不符合面向对象的思想,会带来很多混乱。
我认为这是一个糟糕的设计。你认为是吗?
在 python 中,我们可以在定义函数时设置默认参数值。但是默认参数值只计算一次。因此,如果我们在函数中更改此类参数的值,则更改将在以后的调用中累积。
这意味着一个函数将保持状态。它不符合面向对象的思想,会带来很多混乱。
我认为这是一个糟糕的设计。你认为是吗?
不——这只是意味着你应该了解你的工具。您的方式需要在def
时间存储一个隐藏过程,并在每次调用函数时进行评估;在 Python 中,“显式优于隐式”是(据称)选择的设计原则。
由于这不是一个讨论的网站,而是一个用于编程问答的网站,所以这里是如何正确地做到这一点:
代替
def funct(array = []):
写
def funct(array = None):
if array is None:
array = []
同样的“抱怨”适用于 Ruby、BTW(以及可能具有默认参数值的其他语言),并且不仅限于 Python。