什么是抽象函数的优雅方式 - 而不是对象?

时间:2011-05-13 01:36:06

标签: functional-programming python abstraction pexpect

我有一个通过telnet / pexpect登录传感器并充当数据收集器的功能。

我不想重写登录的部分,抓取数据,并从中解析出相关的输出(pexpect)。但是,我需要对此代码及其收集的数据执行不同的操作

例如,我可能需要:

  • 返回第一次阅读的时间

  • 取不同数量的传感器读数的平均值

  • 返回状态(这是一个数据)或返回传感器 阅读(这是一个单独的部分 数据)来自输出

最终,它仍然应该登录并解析输出相同,我想为该部分使用一个代码块。

代码越高,它就会被即时使用。当我打电话给它时,我知道我需要收集什么类型的数据,就是这样。构造对象太笨拙了。

我的用法超过了为单个函数添加更多参数。

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

这是一种常见的情况,我很惊讶你还没有做过其他人所做的事情。

重构您的函数以将其分解为更小的函数。

函数是对象,可以作为参数传递给其他函数。

def step1(): 
    whatever

def step2(): 
    whatever

def step2_alternative():
    whatever

def original( args ):
    step1()
    step2()

def revised( args, step2_choice ):
    step1()
    step2_choice()

现在你可以做到这一点。

revised( step2 )
revised( step2_alternative )

它只是使用函数对象进行OO编程。

答案 1 :(得分:0)

您是否可以将数据处理函数传递给您描述为参数的函数?

根据您的口味,这可能或多或少是优雅的。 (原谅我:我对pexpect一无所知,甚至可能误解了你的问题!)