Guido van Rossum wrote: > Here's a related but more complicated wish: define a function in such > a way that certain parameters *must* be passed as keywords, *without* > using *args or **kwds. This may require a new syntactic crutch.
Perhaps: def func(x, *args=(), foo=1): ... Well, that doesn't really relate at all to what = means in that position. "def func(x, *None, foo=1)"? "def func(x, **, foo=1)"... oh, well why not just "def func(x, &optional foo=1)". Maybe related is a way of telling if the keyword was passed at all. In other words, a replacement for: sentinal = [] def func(x, y=sentinal): if y is sentinal: # calculate from x Or, without any danger of a misused sentinal: def func(x, *args, **kw): if args: assert not kw assert len(args) == 1 y = args[0] elif kw: y = kw.pop('y') assert not kw else: # calculate from x But the second gives a ruined signature, and a proper implementation has error messages that aren't assertion errors, and so would take much longer to write. But I can't even think of stupid syntax for the latter; or I guess I can't think of useful semantics. The best I can think of (ignoring syntax): def func(x, [y=sentinal]): try: y except NameError: # calculate from x ... which is annoying, but maybe better than the alternatives. Well, I'm not sure if it is actually better than just using a sentinal, which generally works just fine. -- Ian Bicking / [EMAIL PROTECTED] / http://blog.ianbicking.org _______________________________________________ Python-3000 mailing list Python-3000@python.org http://mail.python.org/mailman/listinfo/python-3000 Unsubscribe: http://mail.python.org/mailman/options/python-3000/archive%40mail-archive.com