zoukankan      html  css  js  c++  java
  • python高级-------python2.7教程学习【廖雪峰版】(四)

    2017年6月9日17:57:55

    任务:

      看完高级部分

    笔记:
    1.掌握了Python的数据类型、语句和函数,基本上就可以编写出很多有用的程序了。
    2.在Python中,代码不是越多越好,而是越少越好。代码不是越复杂越好,而是越简单越好。
    基于这一思想,我们来介绍Python中非常有用的高级特性,一行代码能实现的功能,决不写5行代码。
    3.对这种经常取指定索引范围的操作,用循环十分繁琐,因此,Python提供了切片(Slice)操作符,能大大简化这种操作
    4.在很多编程语言中,针对字符串提供了很多各种截取函数,其实目的就是对字符串切片。Python没有针对字符串的截取函数,只需要切片一个操作就可以完成,非常简单。
    5.有了切片操作,很多地方循环就不再需要了。Python的切片非常灵活,一行代码就可以实现很多行循环才能完成的操作。
    6.tuple也是一种list,唯一区别是tuple不可变。因此,tuple也可以用切片操作,只是操作的结果仍是tuple:
    7.如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration)。
    8.在Python中,迭代是通过for ... in来完成的,而很多语言比如C或者Java,迭代list是通过下标完成的
    9.Python的for循环抽象程度要高于Java的for循环,因为Python的for循环不仅可以用在list或tuple上,还可以作用在其他可迭代对象上。
    10.ist这种数据类型虽然有下标,但很多其他数据类型是没有下标的,但是,只要是可迭代对象,无论有无下标,都可以迭代,比如dict就可以迭代:
    1.因为dict的存储不是按照list的方式顺序排列,所以,迭代出的结果顺序很可能不一样。
    2.默认情况下,dict迭代的是key。如果要迭代value,可以用for value in d.itervalues(),如果要同时迭代key和value,可以用for k, v in d.iteritems()。
    3.字符串也是可迭代对象,因此,也可以作用于for循环
    4.如何判断一个对象是可迭代对象呢?方法是通过collections模块的Iterable类型判断
    5.最后一个小问题,如果要对list实现类似Java那样的下标循环怎么办?Python内置的enumerate函数可以把一个list变成索引-元素对,这样就可以在for循环中同时迭代索引和元素本身:

        >>> for i, value in enumerate(['A', 'B', 'C']):
        ...     print i, value
        ...
        0 A
        1 B
        2 C
    6.上面的for循环里,同时引用了两个变量,在Python里是很常见的,比如下面的代码:

        >>> for x, y in [(1, 1), (2, 4), (3, 9)]:
        ...     print x, y
        ...
        1 1
        2 4
        3 9
    7.任何可迭代对象都可以作用于for循环,包括我们自定义的数据类型,只要符合迭代条件,就可以使用for循环。
    8.列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式。
    9.for循环其实可以同时使用两个甚至多个变量,比如dict的iteritems()可以同时迭代key和value:
    10.运用列表生成式,可以快速生成list,可以通过一个list推导出另一个list,而代码却十分简洁。
    1.生成器
    通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。
    所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器(Generator)。
    要创建一个generator,有很多种方法。第一种方法很简单,只要把一个列表生成式的[]改成(),就创建了一个generator:
    2.generator(生成器)也是可迭代的对象。
    如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator:
    3.最难理解的就是generator和函数的执行流程不一样。函数是顺序执行,遇到return语句或者最后一行函数语句就返回。而变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。
    4.generator是非常强大的工具,在Python中,可以简单地把列表生成式改成generator,也可以通过函数实现复杂逻辑的generator。
    要理解generator的工作原理,它是在for循环的过程中不断计算出下一个元素,并在适当的条件结束for循环。对于函数改成的generator来说,遇到return语句或者执行到函数体最后一行语句,就是结束generator的指令,for循环随之结束。

    总结:

      切片

      迭代

      列表生成式

      生成器

    都很重要,而且理解上也还好,切片是不是就相当于其他语言中的字符串截取函数,迭代就是循环啊,列表生成式是很灵活,很方便,生成器就是大大减少内存,当用户需要的时候在提取出来。

    加油,该看函数式编程了!

  • 相关阅读:
    .NetCore Grpc 客服端 工厂模式配置授权
    DOCKER 拉取 dotnet 镜像太慢 docker pull mcr.microsoft.com too slow
    Introducing .NET 5
    VSCode 出现错误 System.IO.IOException: The configured user limit (128) on the number of inotify instances has been reached.
    Omnisharp VsCode Attaching to remote processes
    zookeeper3.5.5 centos7 完全分布式 搭建随记
    Hadoop2.7.7 centos7 完全分布式 配置与问题随记
    MySQL索引 索引分类 最左前缀原则 覆盖索引 索引下推 联合索引顺序
    SQL基础随记3 范式 键
    MySQL调优 优化需要考虑哪些方面
  • 原文地址:https://www.cnblogs.com/Worssmagee1002/p/6973325.html
Copyright © 2011-2022 走看看