Skip to main content
 首页 » 编程设计

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

2025年05月04日12kerrycode

问题

我正在为程序输入文件编写一个文件解析器,它可以在某种程度上解构为字典:也就是说,在输入文件中,有包含“键值对”的多级“字典”。

我有一个关键字字典,它告诉 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=' ') 
    } 

代码示例

下面复制了我目前拥有的完整、可行的演示:

class HelperFunctions: 
 
    def comma_split_to_strings(string:str) -> list: 
        # Returns a list of strings 
        return string.split(',') 
 
    def split_to_floats(string:str) -> list: 
        # Returns a 1D list of floats 
        return list(map(float,string.split())) 
 
 
keywords = { 
    '_root': str, 
    'units': HelperFunctions.comma_split_to_strings, 
    'datum': HelperFunctions.split_to_floats 
    } 
 
card = {} 
key = 'units' 
value = 'Pa,kg,km' 
 
if key in keywords: 
    cast = keywords[key] 
 
    card[key] = cast(value) 

请您参考如下方法:

您要找的是partial在功能工具中。它允许您创建一个函数,其中一些参数绑定(bind)到值,以便您稍后可以使用缺失值调用返回的函数。

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)