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

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

作者: 冰淇琳的琳 | 来源:发表于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