用例:假设我有一大堆Pandas Series对象,我希望将.drop_na()
方法应用于所有这些对象。但是因为它们太大了我必须使用一个函数来执行multiprocessing
,通过接受一个对象列表并使用列表中的每个对象作为方法的参数(也作为一个对象传递)
鉴于对象方法的第一个和隐式参数是self。
我可以使用lambda,部分或其他技巧来传递.drop_na()
方法并将.drop_na()
中的self参数替换为系列的特定实例吗?这在Python中是否可行?
答案 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
则没有。
这不是一种诡计,实际上是一种刻意的设计选择,用于与您(以及其他许多人)一样的案例。