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

Pass object method as lambda or partial function, replacing self parameter with target object?

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

假定对象方法的第一个隐式参数是 self。

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

是的。当使用 . 表示法绑定到作为 class 实例的对象时,第一个参数仅为 "implicit",例如

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

在这种情况下,sr.drop_na实际上是一个闭包,它将Series.drop_naself参数替换为对sr的引用,有点像

lambda: Series.drop_na(sr)

您始终可以直接从 class 调用方法并显式传递 self 参数。上面的例子可以改写为:

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

您可以根据需要传递函数 Series.drop_na 并在您需要的任何对象上调用它。请注意 Series.drop_na 采用单个参数,而 sr.drop_na 不采用。

这不是诡计,实际上是语言的一种深思熟虑的设计选择,旨在用于与您的情况(以及许多其他情况)一样的情况。