Now following my series of "python newbie questions" and based on another question.
Prerogative
Go to http://python.net/~goodger/projects/pycon/2007/idiomatic/handout.html#other-languages-have-variables and scroll down to "Default Parameter Values". There you can find the following:
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
There's even an "Important warning" on python.org with this very same example, tho not really saying it's "better".
One way to put it
So, question here is: why is the "good" syntax over a known issue ugly like that in a programming language that promotes "elegant syntax" and "easy-to-use"?
edit:
Another way to put it
I'm not asking why or how it happens (thanks Mark for the link).
I'm asking why there's no simpler alternative built-in the language.
I think a better way would probably being able to do something in the def
itself, in which the name argument would be attached to a "local", or "new" within the def
, mutable object. Something like:
def better_append(new_item, a_list=immutable([])):
a_list.append(new_item)
return a_list
I'm sure someone can come with a better syntax, but I'm also guessing there must be a very good explanation to why this hasn't been done.