BTW, going back to the question of mutable defaults, it occurs to me
> that there is an "obvious" idiom for self-documenting sentinels for
> defaults that are deferred because you want a new instance each time
> the function is called: use the constructors! Here are some empty
> mutables:
>
> def foo(x=list):
> if x == list:
> x = x()
>
> def bar(x=dict):
> if x == dict:
> x = x()
>
> And here's a time-varying immutable:
>
> import datetime
> def baz(x=datetime.datetime.now):
> if x == datetime.datetime.now:
> x = x()
>
> I guess this fails more or less amusingly if the constructor is
> redefined. Of course any callable object could be the sentinel. It
> doesn't need to be a type or a factory function for this device to
> work. However, I don't see a use case for that generality.
>
> Steve
>
I like this a lot. And for those who are on board iwth type hinting, seems
like you could indicate your intentions pretty clearly by saying something
like:
def foo(x: Constructing[List] = list):
if x == list:
x = x()
A Constructing[List} being a thing whose type is supposed to be a list if
provided by the user, and the final type is also list if not provided by
the user.
_______________________________________________
Python-ideas mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at
https://mail.python.org/archives/list/[email protected]/message/HVWSEGVHH5QCMJYKRW4BGQ2RXUFGQA7O/
Code of Conduct: http://python.org/psf/codeofconduct/