0

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

我不想重写登录、获取数据并从中解析出相关输出的部分(pexpect)。但是,我需要用这段代码和它收集的数据做不同的事情

例如,我可能需要:

  • 直到返回第一个读数的时间

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

  • 返回状态(这是一个数据)或从输出返回传感器读数(这是一个单独的数据)

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

在代码的更高层,它被立即使用。当我调用它时,我知道我需要收集什么类型的数据,仅此而已。构造对象太笨拙了。

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

有任何想法吗?

4

2 回答 2

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 编程。

于 2011-05-13T10:11:33.860 回答
0

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

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

于 2011-05-13T03:27:48.787 回答