Nested Function Question
88888 Dihedral
dihedral88888 at googlemail.com
Sat Jan 7 23:43:48 EST 2012
GZ於 2012年1月7日星期六UTC+8上午5時46分16秒寫道:
> 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.
>
> Thanks,
> GZ
This is used to produce a new function with some default parameters fixed
of an old function that requires many parameters in the caller part.
More information about the Python-list
mailing list