23.10.21 19:07, Chris Angelico пише: > _missing = object() > def spaminate(thing, count=_missing): > if count is _missing: count = thing.getdefault() > > Proposal: Proper syntax and support for late-bound argument defaults. > > def spaminate(thing, count=:thing.getdefault()): > ...
Few years ago I proposed a syntax for optional arguments without default value: def spaminate(thing, count=?): try: count except UnboundLocalError: count = thing.getdefault() ... It would help in cases in which we now use None or special singleton value. It is more general than late-bound arguments, because it can be used in cases in which the default argument cannot be expressed, like in getattr() and dict.pop(). The code for initialization of the default value is something complicated, but we can introduce special syntax for it: if unset count: count = thing.getdefault() or even count ?= thing.getdefault() > 1) Inspecting the function would reveal the source code for the late-bound > value > 2) There is no value which can be passed as an argument to achieve the > same effect This is the largest problem of both ideas. The inspect module has no way to represent optional arguments without default value, and any solution will break user code which is not ready for this feature. _______________________________________________ Python-ideas mailing list -- python-ideas@python.org To unsubscribe send an email to python-ideas-le...@python.org https://mail.python.org/mailman3/lists/python-ideas.python.org/ Message archived at https://mail.python.org/archives/list/python-ideas@python.org/message/XRRS5ZAF4YG2P6U26BW3DJEGPBFUXXED/ Code of Conduct: http://python.org/psf/codeofconduct/