gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 17:17:53 24 4
gpt4 key购买 nike

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

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

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

最佳答案

是的。只有当方法绑定(bind)到一个对象时,第一个参数才是“隐式的”,该对象是使用 . 表示法的类的实例,例如

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

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

lambda: Series.drop_na(sr)

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

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

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

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

关于python - 将对象方法作为 lambda 或部分函数传递,用目标对象替换 self 参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43263946/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com