On 2020-07-28 at 11:04:25 -0300, "Joao S. O. Bueno" <jsbu...@python.org.br> wrote:
> Anyway, that is feasible via a decorator. > Since it can't be done the wya you are proposing as is, since > having a function as a default argument is valid Python > (and the function is not called) - and > having new syntax for this would be more cumbersome > than using a decorator, I think that closes the gap. > > If such a decorator would be useful enough to cut it into the > stlib, is another question though - I'd probably find it occasionally > useful myself, but even so, I am +0 on this - > it is not like > > ``` > if parameter is sentinel: > parameter = factory() > ``` > would be too much to type. > > On a second thought - proper documenting and giving visibility > to a decorator like this could make it be used in patterns like > ``` > @factoryargs > def myfunction(a, b, c=list): > pass > ``` > and we could see a drop in the newcomers to Python > putting a `[]` as default argument. That's great, until I have something like this: @factoryargs def myfunction(a, b, c=list, d=3.4): pass Is c a factory? Is d a factory? > Ok - I just convinced myself - I am +1 for such a decorator now. I don't mean to be a wet blanket, but what's wrong with a helper function? def time_diff_from_now(target_time): return time_diff(target_time, datetime.datetime.now()) def time_diff(target_time, curr_time): return curr_time - target_time No decorators, no new syntax, explicit at the calling sites. > On Mon, 27 Jul 2020 at 20:42, Richard Damon <rich...@damon-family.org> > wrote: > > > On 7/27/20 10:01 AM, Peter Moore wrote: > > > I have had a long standing unanswered question on on stackoverflow: is > > it possible to pass a function to a default parameter so that you could do > > in essence things like this. > > > > > > def time_diff(target_time, curr_time= lambda : datetime.now() ): > > > return curr_time - target_time > > > > > > this would be an syntactical improvement over this style where you have > > if statement to initialize a missing parameter. > > > > > > def time_diff(target_time, curr_time=None): > > > if curr_time == None: > > > curr_time = datetime.datetime.now() > > > return curr_time - target_time > > I will point out that you CAN pass a function as the default value of a > > function parameter, and it means that the parameter will be bound to the > > function itself, so it becomes a callable (so doesn't help you in your > > case). But this does become an impediment to trying to define it this > > way, you need somehow to distinguish between the function itself being > > the default value, or some magically invocation of the function at each > > call. > > > > -- > > Richard Damon > > _______________________________________________ > > 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/64ZTCJWJO74KD2EFUOSICOPT6XTSBO2R/ > > Code of Conduct: http://python.org/psf/codeofconduct/ > > > _______________________________________________ > 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/EGFSGULHXBRT2HNEDRN4GJ36DQUSR3RX/ > Code of Conduct: http://python.org/psf/codeofconduct/ -- “Whoever undertakes to set himself up as a judge of Truth and Knowledge is shipwrecked by the laughter of the gods.” – Albert Einstein Dan Sommers, http://www.tombstonezero.net/dan _______________________________________________ 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/NUFVFDFI7QY67QVFIFS4Y7CRGEGCWRBF/ Code of Conduct: http://python.org/psf/codeofconduct/