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

Functional programming 抽象函数而不是对象的优雅方式是什么?,functional-programming,python,abstraction,pexpect,Functional Programming,Python,Abstraction,Pexpect,我有一个功能,可以通过telnet/pexpect登录传感器,并充当数据采集器 我不想重写登录、获取数据并从中解析出相关输出的部分(pexpect)。然而,我需要对这段代码和它收集的数据做不同的事情 例如,我可能需要: 返回第一个读数之前的时间 取不同数量传感器读数的平均值 返回状态(这是一条数据)或返回传感器 阅读(这是一篇独立的文章) 数据)从输出中删除 最终,它应该仍然登录并解析相同的输出,我想为该部分使用一个代码块 在代码的更高层,它被即时使用。当我调用它时,我知道我需要收集什么类型

我有一个功能,可以通过telnet/pexpect登录传感器,并充当数据采集器

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

例如,我可能需要:

  • 返回第一个读数之前的时间

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

  • 返回状态(这是一条数据)或返回传感器 阅读(这是一篇独立的文章) 数据)从输出中删除

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

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

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


有什么想法吗?

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

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

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

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

这是一种常见的情况,我很惊讶你还没有像其他人那样做

重构函数,将其分解为更小的函数

def step1(): 
    whatever

def step2(): 
    whatever

def step2_alternative():
    whatever

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

def revised( args, step2_choice ):
    step1()
    step2_choice()
函数是对象,可以作为参数传递给其他函数

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

这是一种常见的情况,我很惊讶你还没有像其他人那样做

重构函数,将其分解为更小的函数

def step1(): 
    whatever

def step2(): 
    whatever

def step2_alternative():
    whatever

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

def revised( args, step2_choice ):
    step1()
    step2_choice()
函数是对象,可以作为参数传递给其他函数

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

Python只有几个全局构造:函数、对象、类和模块。是什么让你觉得“构造对象太笨拙了”?因此,从功能上来说,我需要像使用方法一样使用它,并执行一次一个方法。为它实例化一个类似乎很混乱。也许你可以使用某种生成器模式<代码>传感器().timeInitial().CalAverage().returnStatus().go()可能是类方法吗?他们可以在类中存储共享状态。我不确定你对类有什么看法。为传感器连接创建一个可以记录连接元数据(计时等)的类似乎是一个整洁的解决方案。是什么让你觉得“构造对象太笨拙了”?因此,从功能上来说,我需要像使用方法一样使用它,并执行一次一个方法。为它实例化一个类似乎很混乱。也许你可以使用某种生成器模式<代码>传感器().timeInitial().CalAverage().returnStatus().go()可能是类方法吗?他们可以在类中存储共享状态。我不确定你对类有什么看法。为传感器连接创建一个可以记录连接元数据(计时等)的类似乎是一个整洁的解决方案。+1用于临时提醒,是的,甚至函数都是对象。这就是我最后要做的,谢谢。基本上,我将所有内容分解为极其简单的子函数,并使用一个公共接口函数,该函数包含子函数如何/何时/以何种顺序交互的所有业务逻辑。谢谢+我想提醒大家,是的,甚至函数都是对象。这就是我最后要做的,谢谢。基本上,我将所有内容分解为极其简单的子函数,并使用一个公共接口函数,该函数包含子函数如何/何时/以何种顺序交互的所有业务逻辑。谢谢