"Frank Millman" <fr...@chagford.com> wrote in message news:mik7j6$59n$1...@ger.gmane.org... > > "Steven D'Aprano" <steve+comp.lang.pyt...@pearwood.info> wrote in message > news:554cd119$0$12977$c3e8da3$54964...@news.astraweb.com... >> On Fri, 8 May 2015 08:53 pm, Frank Millman wrote: >> >>>> 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. >> >> >> Why wouldn't it work? If it worked with an empty list, it will probably >> work >> with an empty tuple instead. >> > > Sorry, I should have been more explicit. In the case of a dictionary, I > used 'def x(y, z={}' > > I have not checked, but I assume that as dictionaries are mutable, this > suffers from the same drawback as a default list. > > Unlike a list, it cannot be replaced by an empty tuple without changing > the body of the function. > > Dave's suggestion would have worked here - > > EMPTY_LIST = [] > EMPTY_DICT = {} > > But as I have decided to use the None trick, I use it for a default > dictionary as well. >
Cough, cough, I really should have given that a moment's thought before posting. It just dawned on me that a dictionary *can* be replaced by an empty tuple without changing the body of the function. There are two operations I might perform on the dictionary - 1. iterate over the keys and retrieve the values 2: use 'in' to test if a given string exists as a key Both of these operations will work on a tuple and give the desired result, so it is a very valid workaround. More testing needed ... Frank -- https://mail.python.org/mailman/listinfo/python-list