现在跟随我的“python新手问题”系列并基于另一个问题。
特权
转到http://python.net/~goodger/projects/pycon/2007/idiomatic/handout.html#other-languages-have-variables并向下滚动到“默认参数值”。在那里您可以找到以下内容:
def bad_append(new_item, a_list=[]):
a_list.append(new_item)
return a_list
def good_append(new_item, a_list=None):
if a_list is None:
a_list = []
a_list.append(new_item)
return a_list
python.org 上甚至还有一个“重要警告”,这个例子是相同的,但并不是真的说它“更好”。
一种说法
所以,这里的问题是:为什么在一个提倡“优雅语法”和“易于使用”的编程语言中,一个已知问题的“好”语法丑陋?
编辑:
另一种说法
我不是在问为什么或如何发生(感谢 Mark 的链接)。
我在问为什么语言中没有更简单的替代方法。
我认为更好的方法可能是能够自己做某事def
,其中 name 参数将附加到def
可变对象内的“本地”或“新”。就像是:
def better_append(new_item, a_list=immutable([])):
a_list.append(new_item)
return a_list
我确信有人可以提供更好的语法,但我也猜测必须有一个很好的解释来解释为什么没有这样做。