Some example (from real life). def ChooseItems(StartDate, EndDate, Filter): #function returns a set of some items in chronological order #from required interval possibly using filter
ChooseItems() #get everything ChooseItems('01.01.2000', ,SomeFilter) #get everything after a date using filter ChooseItems(, '01.01.2000') #get everything before a date ChooseItems(, , SomeFilter) #get everything using filter Now compare this to something which (I hope) is rather pythonian Seq[:] #get everything Seq[2::3] #get everything after an index using filter (filter every third value) Seq[:3] #get everythin before an index Seq[::4] #get everything using a filter Do you see any significant difference? I understand that many do not need such a syntax, I don't understand why someone would be AGAINST it. I don't propose to CHANGE anything in python (right now this syntax is error anyway). What I propose is just ADD another way of calling a function with keyword parameters but using POSITIONS instead of NAMES. And sometimes position is easier to remember than name. Anyway, who wants names let them use names. Who wants positions let them use positions. But to have a CHOICE is always good. As far as the choice itself doesn't damage anything, and I don't think that my does. I think that if we compare ChooseItems('01.01.2000', ,SomeFilter) and ChooseItems(StartDate='01.01.2000', Filter=SomeFilter) the first one is more readable, 'cos you see what is meant right away. In second one you have to actually READ the keyword names to understand. It's not the common case, of course, but still, why not have a choice to use it? Some other examples which might benefit SetDate(year, month, day) SetDate(, month+1) # set next month, leaving year and day SetDate(, , 31) # set to end of month, not changing year #(wrong date adjusted automatically, of course) FormatFloat(Float, Length, Precision, FormatFlags) You might want precision, leaving length default, or just use FormatFlags In fact, I became so used to convenience of such syntax that it was a disappointment not to find it in python. Please, don't try to scare me with 25-parameter functions. This is not for them. But to remember positions of two to five parameters is actually easier (if their order has some logic) then what are their names: startDate ? beginDate? firstDate? openDate? Date1? The same approach can be used with tuples: (, , z) = func() # returning three element tuple() You think z = func()[2] is actually more clear? - By the way, I want THIRD value, not SECOND. And tuples don't have keyword names, do they? And what about (a, , b) = func() ...well, maybe I got carried away a little... Finally, if syntax func (None, None, 10) seems natural to you, I propose to make it even more natural: I don't want some "None" passed as argument, I don't want anything at all passed, so I just use empty space func ( , , 10) And the called func don't have to bother with checking None for EACH argument but will happily use defaults instead. -- http://mail.python.org/mailman/listinfo/python-list