pipeline指什么,什么叫pipeline

  pipeline指什么,什么叫pipeline

  管道

  流水线流水线借鉴Unix Shell的流水线操作3354来串几个命令,前一个命令的输出成为后一个命令的输入,从而完成一个流计算。(注:管道绝对是一个伟大的发明,他的设计理念是KISS——让每个功能做一件事,把它做到极致,软件或程序的组装会变得更简单直观。这种设计理念影响深远,包括今天的Web服务、云计算、大数据的流计算等。)

  例如,我们的shell命令如下:

  PS auwwx awk“{ print $ 2 }” sort-n xargs echo

  如果我们抽象成函数式语言,像这样:

  xargs( echo,sort(n,awk(print $2 ,ps(auwwx))))

  它也可能如下所示:

  pids=for_each(结果,[ps_auwwx,awk_p2,sort_n,xargs_echo])

  好了,我们来看看函数式编程的流水线怎么玩。

  我们先来看一个程序如下。这个程序的过程()有三个步骤:

  1)找出偶数。

  2)乘以3

  3)将其转换为字符串并返回。

  没人回答问题?边肖创建了一个Python学习交流QQ群:857662006,寻找志同道合的朋友

  互帮互助,群里也有不错的视频学习教程和PDF电子书!

  定义过程(数量):

  #过滤掉非偶数

  如果数量% 2!=0:

  返回

  数量=数量* 3

  num=数字:%s % num

  退货数量

  nums=[1,2,3,4,5,6,7,8,9,10]

  对于nums中的num:

  打印过程(数字)

  #输出:

  #无

  #数字:6

  #无

  #数量:12

  #无

  #数量:18

  #无

  #数字:24

  #无

  #数量:30

  正如我们所看到的,输出并不完美。另外,如果代码阅读里没有注释,你会很困惑。接下来,我们来看看如何写函数管道(第一种方式)。

  定义偶数_过滤器(数量):

  对于nums中的num:

  如果数量% 2==0:

  产量数量

  定义乘以三(nums):

  对于nums中的num:

  产量数量* 3

  定义转换为字符串(nums):

  对于nums中的num:

  “产量”的数量:% s“%数量

  nums=[1,2,3,4,5,6,7,8,9,10]

  pipeline=convert _ to _ string(multiply _ by _ three(even _ filter(nums)))

  对于管道中的数量:

  打印编号

  #输出:

  #数字:6

  #数量:12

  #数量:18

  #数字:24

  #数量:30

  我们使用Python关键字yield,它主要返回一个生成器。yield是一个类似于return的关键字,但是这个函数返回一个Generator- generator。所谓生成器,就是yield返回一个迭代对象,没有真正的执行函数。也就是说,yield函数实际上只有在返回的迭代对象被实际迭代时才会运行,到达yield语句时就会停止,然后等待下一次迭代。(这是一个相当奇怪的关键字)这是懒惰的评价。

  好了,根据前面的原则3354“用Map Reduce,不要用loops”,那我们就用更简单的Map Reduce吧。

  没人回答问题?边肖创建了一个Python学习交流QQ群:857662006,寻找志同道合的朋友

  互帮互助,群里也有不错的视频学习教程和PDF电子书!

  定义偶数_过滤器(数量):

  返回过滤器(x:x % 2==0,nums)

  定义乘以三(nums):

  返回映射(x:x * 3,nums)

  定义转换为字符串(nums):

  返回映射(lambda x:数字:%s % x,nums)

  nums=[1,2,3,4,5,6,7,8,9,10]

  管道=转换为字符串(

  乘以三(

  偶数_滤波器(nums)

  )

  )

  对于管道中的数量:

  打印编号

  但是他们的代码需要使用嵌套函数,有点不舒服。如果我们能长得像下面这样就好了(第二种方式)。

  pipeline_func(nums,[even_filter,

  乘以三,

  转换为字符串])

  然后,pipeline_func实现如下:

  def pipeline_func(data,fns):

  返回reduce(a,x: x(a),

  fns,

  数据)

  好吧,看了这么多程序,你可以回头看看本文开头对函数式编程的描述,也许你会有更多的感触。

  最后,我希望这篇浅显易懂的文章能让你感受到函数式编程的思想,就像面向对象的面向对象的编程,泛型编程,过程式编程一样,我们不用太纠结是不是我们的程序就是OO,就是功能的的,我们重要的品味其中的味道。

  参考

  维基百科:函数式编程

  真正理解程序性和功能性的区别

  函数式编程的实用介绍

  过程式编程和函数式编程有什么区别?

  有人能给我举函数式编程和命令式/过程式编程的例子吗?

  面向对象与函数式编程相对过程式

  python函数式编程指南

  补充:评论中重新修改的这个评论大家也可以读一读。

  感谢谢网友S142857提供的壳风格的大蟒管道:

  类别管道(对象):

  def __init__(self,func):

  self.func=func

  def __ror__(self,other):

  定义生成器():

  对于其他对象:

  如果目标文件不为无:

  产生self.func(对象)

  返回生成器()

  @管道

  定义偶数_过滤器(数量):

  如果数量% 2==0,则返回num,否则无

  @管道

  定义乘以三(数字):

  退货数量*3

  @管道

  def转换为字符串(数字):

  返回号码:%s % num

  @管道

  定义回显(项目):

  打印项目

  退货项目

  定义力(平方):

  对于标准中的项目:通过

  nums=[1,2,3,4,5,6,7,8,9,10]

  force(nums even _ filter multiply _ by _ three convert _ to _ string echo)

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: