专栏名称: Python程序员
最专业的Python社区,有每日推送,免费电子书,真人辅导,资源下载,各类工具。我已委托“维权骑士”(rightknights.com)为我的文章进行维权行动
目录
相关文章推荐
Python爱好者社区  ·  生成式AI,彻底爆了! ·  昨天  
Python爱好者社区  ·  华为目标院校白名单(2025最新版) ·  4 天前  
Python爱好者社区  ·  强的离谱!CNN,yyds ·  2 天前  
Python爱好者社区  ·  《MCP原理与实践》—— ... ·  4 天前  
Python开发者  ·  外网热议:为什么 DeepSeek ... ·  昨天  
51好读  ›  专栏  ›  Python程序员

在Python中探索函数式响应型编程(FRP)

Python程序员  · 公众号  · Python  · 2017-05-27 09:46

正文

请到「今天看啥」查看全文



如果你写过很多python代码,那么一个数据流产生另一个数据流的函数很像python中的生成器。
先完成个生成器函数
你可能用python写过下面的函数生成器:

然而python的生成器和FRP是不一样的,它是被设计成链接在一块的长链,一旦产生一个值必须移动到下一个值,不能产生下一个生成器需要的相同的数。举个例子,有一个加法函数:

你可以用这个函数将两个相同的数进行相加:

但是如果有一个生成器将两个迭代数相加的函数:

你就不能将两个相同的数进行相加:

以上结果不应该是14(5的两倍不应该是14)
由于python生成器工作方式的缘故,当add_generator()函数调用zip()时会得到xs的前两个数,而不是对第一个数进行复制。所以,要想在python中使用FRP我们必须采取不同的策略,必须使这些数据流可重复利用,就像数字5一样能用到不同的流函数里,而且永远用不完。
数据流接口
在FRP中有两种基本的类型来传递信息变化:
1、Push方式:被动等待输入信号,然后将输入一直传递下去,直到得到所有的输出
2、Pull方式:根据结果一层层向上流搜寻引起变化的值,直到找到所有影响输出的输入值
在python中对输出值的引用并没有标准的方式,因此使用push模式是不太方便的;此外python中可以引用输入值(就是调用函数的形参),因此pull模式是最好的选择。
假设这里有一个表示数据流的对象,在pull模式中我们需要一个能查找当前值的方法;







请到「今天看啥」查看全文