Nested Function Question
David Robinow
drobinow at gmail.com
Sat Jan 7 10:18:15 EST 2012
On Fri, Jan 6, 2012 at 5:04 PM, Ian Kelly <ian.g.kelly at gmail.com> wrote:
> On Fri, Jan 6, 2012 at 2:46 PM, GZ <zyzhu2000 at gmail.com> wrote:
>> Hi,
>>
>> I am reading the documentation of functools.partial (http://
>> docs.python.org/library/functools.html#functools.partial) and found
>> the following 'reference implementation' of functools.partial.
>>
>> def partial(func, *args, **keywords):
>> def newfunc(*fargs, **fkeywords):
>> newkeywords = keywords.copy()
>> newkeywords.update(fkeywords)
>> return func(*(args + fargs), **newkeywords)
>> newfunc.func = func
>> newfunc.args = args
>> newfunc.keywords = keywords
>> return newfunc
>>
>> I don't understand why the below 3 lines are needed:
>>
>> newfunc.func = func
>> newfunc.args = args
>> newfunc.keywords = keywords
>>
>>
>> It is as if they are trying to prevent garbage collection, but I don't
>> get why it is needed. As long as something holds reference to newfunc,
>> because it in turn references keywords and args, nothing will be
>> freed. If nothing is referencing newfunc, then everything should be
>> freed.
>
> They exist for introspection. The partial object has to store the
> function and arguments it was passed so that it can call it later, so
> as long as they're being stored anyway, why not make them visible?
I tend toward the minimalist end of the spectrum when it comes to code
commenting, but it seems to me this would be a good place for a few
words of explanation.
More information about the Python-list
mailing list