微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python-指令要使用特定参数调用的函数而不执行该函数

我正在尝试对逻辑进行编码以过滤Pandas数据框.我想将逻辑编码为字典,以子组名称作为键,并使用过滤子组的函数作为值:

analytics_table_mappings = {
"Jets Fans": BaseFilter.for_jets_fans,
"Patriots Fans": BaseFilter.for_patriots_fans,
...
}

我的BaseFilter.for_jets_fans和BaseFilter.for_patriots_fans是静态方法,其中包含为每组风扇过滤数据框的逻辑.

但是,我想创建一个函数BaseFilter.for_team_fans,该函数接受一个团队字符串参数来指定要过滤哪些球队的粉丝.

我目前的尝试是编码这样的东西

analytics_table_mappings = {
"Jets Fans": {"func": BaseFilter.for_team_fans, "args": "Jets"},
"Patriots Fans":  {"func": BaseFilter.for_team_fans, "args": "Patriots"},
...
}

我的问题:是否有更优雅,更轻松,更可维护的方式来做到这一点?作为背景,我是一名数据科学家,这是一个大型模型的一部分,我最终需要将该模型交给我的工程团队进行维护和保养.他们要求我限制领域特定语言(DSL)的数量,以帮助软化学习曲线并提高代码库的可维护性.我想使用

"Jets Fans": {"func": BaseFilter.for_team_fans, "args": "Jets"},
"Patriots Fans":  {"func": BaseFilter.for_team_fans, "args": "Patriots"}, 

有可能迅速发展成非常复杂且难以管理的DSL.我对过滤逻辑进行编码的原因是,我们过滤的指标类型以及如何对其进行过滤-可能会不断发展,因此,我没有将过滤逻辑硬编码到我的代码库中,而是将其分离为由字典组成的单独的configuration.py文件(即analytics_table_mappings).因此,我想保持过滤器逻辑的灵活性,同时让工程师可以维护它.

添加在:

我还需要能够处理必须传递多个参数的实例.例如:

    "Jets Fans": {"func": BaseFilter.for_team_fans, "args": "Jets"},
    "Patriots Fans":  {"func": BaseFilter.for_team_fans, "args": "Patriots"},
"NFC Fans": {"func": BaseFilter.for_team_fans, "args": ["Bears", "Packers", ...]}

解决方法:

您可以考虑使用functools.partialmethod,它允许您指定任意数量的args或kwargs

from functools import partialmethod

mappings = {'Jets Fans': partialmethod(BaseFilter.for_jets_fans, 'Jets'),
            'Patriots Fans': partialmethod(BaseFilter.for_patriots_fans, 'Patriots'),
            'NFC Fans': partialmethod(BaseFilter.for_team_fans, 'Bears', 'Packers')}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐