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