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. -- http://mail.python.org/mailman/listinfo/python-list