将参数传递给变量引用的函数

时间:2019-02-20 20:37:58

标签: python python-3.x

问题

我正在为程序输入文件编写一个文件解析器,该文件解析器可以稍微分解为字典:也就是说,在输入文件中,存在包含“键-值对”的多级“字典”。

我有一个关键字字典,它告诉caps = device.capabilities() key_codes = evdev.ecodes[('EV_KEY', ecodes.EV_KEY)] has_rmb = 'BTN_RIGHT' in [ kc[0][0] for key_codes ] 函数要读取哪些键以及如何解析键值。

例如,您可以在下面的代码摘录中看到,当读取read时,应使用函数datum来解析该值:

HelperFunctions.split_to_floats

目标

我想做的是能够传递参数,这样我就不必为每种可能的类型(即值定界符)进行函数排列。

例如,以类似以下方式重构'datum': HelperFunctions.split_to_floats 字典:

keywords

代码示例

下面是我目前所拥有的完整,可行的演示:

keywords = {
    '_root': str,
    'units': HelperFunctions._split(LINE,to=str,delim=','),
    'datum': HelperFunctions._split(LINE,to=float,delim=' ')
    }

2 个答案:

答案 0 :(得分:5)

您要寻找的是partial在functools中。它使您可以创建带有绑定到值的某些参数的函数,以便稍后可以使用缺少的值调用返回的函数。

from functools import partial

# Bind the parameters you want to "freeze"
keywords = {
    '_root': str,
    'units': partial(HelperFunctions._split, to=str, delim=','),
    'datum': partial(HelperFunctions._split, to=float, delim=' ')
    }

# The later you just need to provide LINE
keywords['units'](LINE)

答案 1 :(得分:2)

您要寻找functools.partial吗?

from functools import partial

keywords = {
    '_root': str,
    'units': partial(HelperFunctions._split, to=str, delim=','),
    'datum': partial(HelperFunctions._split, to=float, delim=' ')
}