等等! Python和鸭子它俩有什么关系?

  

众所周知,Python作为胶水语言,它可以做的东西很多,爬的虫,人工智能,自动化测试,数据分析等等。而鸭子是一种动物,它可以做的东西也很多,啤酒鸭,香烤鸭,盐水鸭,土豆焖鸭等等。按理说这两个对应着不同人体器官的东西应该是扯不上关系的。

     等等! Python和鸭子它俩有什么关系?”>
  
  <p>但是,偏偏就有辣莫一个人,美国诗人詹姆斯·惠特科姆·莱利,在17个世纪时写下了一句诗:</p>
  <引用类=   

",当我看到一只鸟,走起来像鸭子一样游泳,像鸭子,叫起来也像鸭子,我就把这只鸟一只鸭子。”

  

就是这短短的一句诗,让这两者扯上了神奇的关系,关键人们还为这种关系取了个名字—   从。此Python和鸭子就成就了一段佳话啊呸,那这   究竟是怎么回事呢?且往下看~

     等等! Python和鸭子它俩有什么关系?”>
  
  <p>
  </p>
  <p>加入在你拥有一款内容聚合应用,这款应用每天会从各个门户网站采集一些文章回来,并且分发至应用里面的各个频道。</p>
  <p>这个时候我们可以将分发文章这个功能简单的抽象为一个分配函数,该函数由两个参数构成,待分发文章,分发频道通道。</p>
  <p>同时为了保证文章更符合频道的内容范围和调性,在每篇文章分发至频道时,最好都对文章做一些准入校验,于是我们初步封装出以下函数:</p>
  <pre> def 分发(文章,通道):,,,,#,文章准入判断,,,,#,政务频道的文章标题不能出现的震惊”字眼,,,,if  channel.name ==, & # 39;政治# 39;,以及article.title.find(& # 39;震惊& # 39;),祝辞=,0:,,,,,,,,return  False ,,, #,娱乐频道不允许a, b这两个作者的文章,,,,elif  channel.name ==, & # 39;娱乐# 39;,以及article.author 拷贝(& # 39;一个# 39;& # 39;b # 39;]:,,,,,,,, return  False ,,, #, some  elif 这里…,,,,#,将文章与频道的绑定关系写进数据库,,,,return  bind_relation(文章,通道)</pre>
  <p>上面的函数确实能够实现我们想要的功能了,但是存在一个显而易见的问题:如果我们每增加一条准入规则,就需要改动一次分配函数,这样频繁地对一个函数动刀显然不是一个好的做法。</p>
  <p>我们希望这个函数是一个更抽象的公共函数,他不需要被过多的改动,于是我们做一点改进,变成下面的函数:</p>
  <>以前def 分发(文章,通道):,,,,#,文章准入判断,,,,can_push =, channel.check(文章),,,,#,将文章与频道的绑定关系写进数据库,,,,if  can_push:,,,,,,,, return  bind_relation(文章,通道),,,,return 假</pre>
  <p>将校验频道准入规则的这个功能用频道类自己实现的检查方法封装起来,这样每当有一个新的频道需要创建,或者旧频道需要更改校验规则,则只需要负责维护各自频道类的检查方法就好了。</p>
  <p>而分配函数作为一个更高层级的存在则不会被影响到。</p>
  <pre>class Article:    def __init__(self, title, author):        self.title = title        self.author = authorclass EntertainmentChannel:    def __init__(self)        self.name = 'entertainment'    def check(article):        if article.author in ['a','b']:            return False        return Trueclass PoliticsChannel:    def __init__(self)        self.name = 'politics'    def check(article):        if article.title.find('震惊') >= 0:            return False        return Truearitcle_a = Article('震惊!大笑1小时寿命减少60分钟!', 'a')aritcle_b = Article('战胜恐惧最好的办法?', 'b')politics_channel = PoliticsChannel()entertainment_channel = EntertainmentChannel()distribute(aritcle_a, politics_channel)  # Fasledistribute(aritcle_b, entertainment_channel)  # Fasle<h2 class=等等! Python和鸭子它俩有什么关系?