"Steven D'Aprano" <steve+comp.lang.pyt...@pearwood.info> wrote in message news:554c8b0a$0$12992$c3e8da3$54964...@news.astraweb.com... > On Fri, 8 May 2015 06:01 pm, Frank Millman wrote: > >> Hi all >> [...] >> >> However, every time I look at my own code, and I see "def x(y, z=[]): >> ....." it looks wrong because I have been conditioned to think of it as >> a gotcha. > > It is a gotcha, and a code smell. > > http://www.joelonsoftware.com/articles/Wrong.html >
Interesting read - thanks. > You can use it, but with care: code smells aren't necessarily wrong, they > just need to be looked at a little more carefully. > > >> Would it be more pythonic to change them all to use the alternative >> "z=None", or is it ok to leave it as it is? Or to phrase it differently, >> how would an experienced pythonista react on seeing this when reviewing >> my >> code? > > I would change it to z=None *unless* you actually required the list to be > mutated, e.g. if you were using it as a cache. > Ok, you and Joel have convinced me. I will change it to z=None. > Does z have to be a list? Could you use an empty tuple instead? > > def x(y, z=()): ... > That was Chris' suggestion as well (thanks Chris). The idea appealed to me, but then I found a situation where I pass in a dictionary instead of a list, so that would not work. Replacing them all with None is cleaner and, I now agree, more pythonic. Thanks for the good advice. Frank -- https://mail.python.org/mailman/listinfo/python-list