将对象方法作为lambda或partial函数传递,用目标对象替换self参数?

时间:2017-04-06 19:15:24

标签: python python-3.x lambda partials

用例:假设我有一大堆Pandas Series对象,我希望将.drop_na()方法应用于所有这些对象。但是因为它们太大了我必须使用一个函数来执行multiprocessing,通过接受一个对象列表并使用列表中的每个对象作为方法的参数(也作为一个对象传递)

鉴于对象方法的第一个和隐式参数是self。

我可以使用lambda,部分或其他技巧来传递.drop_na()方法并将.drop_na()中的self参数替换为系列的特定实例吗?这在Python中是否可行?

1 个答案:

答案 0 :(得分:1)

是。当方法使用.表示法绑定到作为类实例的对象时,第一个参数仅为“隐式”,例如

sr = Series(...)
sr.drop_na()

在这种情况下,sr.drop_na实际上是一个闭包,它将self的{​​{1}}参数替换为Series.drop_na,有点像

sr

您始终可以直接从类中调用该方法,并显式传递lambda: Series.drop_na(sr) 参数。上面的例子可以改写为:

self

您可以根据需要传递函数sr = Series(...) Series.drop_na(sr) ,并在您需要的任何对象上调用它。请注意,Series.drop_na只接受一个参数,而Series.drop_na则没有。

这不是一种诡计,实际上是一种刻意的设计选择,用于与您(以及其他许多人)一样的案例。