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