
George Sakkis wrote:
On 1/30/07, Piotr Duda <duda.piotr@gmail.com> wrote:
I think that this problem can be solved by the following change of default argument behavior: default arguments are evaluated in definition time (like in current implementation), but right after being evaluated, result object is checked if it's mutable (for example by checking of presence __copy__ special method or being instance of built in (sub)class list/dict/set)
(snipped)
AFAIK there's no reliable way of deciding whether an arbitrary object is mutable or not, so the rest of the post is irrelevant. Besides, mutable default arguments is just a specific use case; the general problem discussed here is call-time vs definition-time semantics for arbitrary default argument expressions (function calls, attribute lookups, etc.).
George
Maybe Python interpreter could be better at deciding if the programmer which wrote the code is novice or experienced. For example, from __present__ import _I_AM_PYTHON_EXPERT at the beginning of each module will do ;-) Or, alternatively, Python interpreter will read user's directory for some obscure configuration file where programmer will put True's into originally: I_KNOW_WHAT_MUTABLE_MEANS = False I_AM_AWARE_OF_MUTABLE_DEFAULT_ARGUMENT = False ... (And of course, there will be secret I_AM_GUIDO_VAN_ROSSUM = True which will override all the previous settings.) AFAIK, no language has this feature yet (not sure about Perl). Regards, Roman