我正在为程序输入文件编写一个文件解析器,该文件解析器可以稍微分解为字典:也就是说,在输入文件中,存在包含“键-值对”的多级“字典”。
我有一个关键字字典,它告诉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=' ')
}
答案 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=' ')
}