美文网首页生物信息编程
Effective Python:编写高质量的Python代码的

Effective Python:编写高质量的Python代码的

作者: renailin | 来源:发表于2019-07-28 16:53 被阅读2次
    • 第十条:尽量用enumerate取代range
      迭代时,两种方法:
      1.range
      在一系列整数上迭代时,内置的range函数很有用。如果想要获取索引时,较为复杂,代码繁琐且不易理解
      2.enumerate
      python内置函数,可以为此函数提供第二个参数,以指定开始计数时所用的值(默认为0)推荐用此。
      举个栗子,对比一目了然:


      图片.png

    • 第十一条:用zip函数同时遍历两个迭代器
      举个栗子:


      图片.png

      通过比较,可以得出:
      (1)zip函数较为简洁易懂,zip可以平行的遍历多个迭代器
      (2)问题:
      <1>在python2中,zip函数不是生成器,而是会把开发者提供的迭代器,都平行遍历一次,在此过程中,他会把迭代器所产生的值汇聚成元组,并把那些元组所构成的列表完整的返回给调用者。---这样会产生大量内存,导致程序崩溃。
      所以,在python2中想要遍历非常大的迭代器,应该使用itertools内置模块的izip函数。
      (2)如果提供的迭代器长度不等,那么zip就会自动提前终止。举个栗子:


      图片.png
      解决办法:itertools内置模块zip_longest函数,他可以平行的遍历多个迭代器,而不用在乎他们的长度是否相等。

    • 第十二条:不要在for和while循环后面写else块
      Python 提供了一种独特的功能,即可以在循环内部的语句块后面直接编写else块。
      (1)if/else:else意思是如果不执行if,则else;反之亦然。try/except同理
      (2)try/except/else:else意思是:如果前面的try块没有失败,那就执行else块。
      try/finally同样,finally意思是执行过前面的try之后,总是执行finally.
      (3)for/else:只有当整个循环主体都没遇到break语句时,循环后面的else才会执行。
      (4)不要在循环后面使用else块,因为这种写法既不直观,又容易引人误解。
      举个栗子:


      图片.png

      我们不要这样写,而应该:


      图片.png
      或者:
      图片.png

    注意:尽量不要在这种循环后面写else语句,不要给自己挖坑


    好了,本回依旧是学习三条。
    说明:没回存在的问题会在整本书都学完之后再做分析与补充。
    天气虽然炎热,依旧要静心学习,每周进步一点点,加油
    ps:在编写第十条的冰淇淋口味的例子时,自己默默的咽了好几次口水,冰激凌对我真的是太有诱惑力了(尴尬hhhh)
    因为这本书是kevin师兄推荐我看的,以此记录学习过程也是表示对师兄的感谢。

    相关文章

      网友评论

        本文标题:Effective Python:编写高质量的Python代码的

        本文链接:https://www.haomeiwen.com/subject/gizurctx.html