• 第三章-高级特性


    1 切片

      当要取list,tuple和str的某个元素到某个元素, 除了逐个列出以外, 还可以用切片(slice)来完成.

      使用方法:

        名字[起始Index : 结束Index]

    >>> L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']
    >>> L[0:3]
    ['Michael', 'Sarah', 'Tracy']
    

        表示从起始索引开始, 逐个取值, 但是结束于结束索引前一个元素.

        当结束Index不写的时候取元素取到最后

        同理起始Index不写表示从第一个开始

    >>> L[-2:]
    ['Bob', 'Jack']
    

      可以使用切片的有list, tuple, str 

    2 迭代

      利用for循环来遍历list和tuple等, 这种遍历叫做迭代(iteration)

      迭代的方式主要是采用for..in的方式

      判断该对象是否可以迭代

        导入from collections import Iterable

        利用 isinstance(判断的对象, Iterable)

        其中isinstance方法不仅能够判断迭代器的类型, 还可以python的其余任意类型

    >>> from collections import Iterable
    >>> isinstance('abc', Iterable) # str是否可迭代
    True
    >>> isinstance([1,2,3], Iterable) # list是否可迭代
    True
    >>> isinstance(123, Iterable) # 整数是否可迭代
    False
    

      迭代字典元素的三种方法

        方法一 遍历key

    >>> d = {'a': 1, 'b': 2, 'c': 3}
    >>> for key in d:
    ...     print(key)
    ...
    a
    c
    b
    

        方法二 遍历value

    >>> d = {'a': 1, 'b': 2, 'c': 3}
    >>> for value in d.values():
    ...	print(value)
    ...	
    1
    3
    2

        方法三 同时迭代key和value

    >>> d = {'a': 1, 'b': 2, 'c': 3}
    >>> for k,v in d.items():
    ...	print("key={},value={}".format(k,v))
    ...	
    key=c,value=3
    key=a,value=1
    key=b,value=2
    >>> 
    

      迭代的时候获取索引值, 课使用内置的方法enumerate来实现

    >>> for i, value in enumerate(['A', 'B', 'C']):
    ...     print(i, value)
    ...
    0 A
    1 B
    2 C
    

    3 列表生成式

      列表生成式(List Comprehensions), 主要是用来创建list的生成式

      方法一:

        list(range(N, M))

        获取的值为N, N+1, ... ,M-1

      方法二:

        [ x * x  for x in range(1, 11) if x % 2 == 0 ]

        例子1

    >>> [x * x for x in range(1, 11)]
    [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
    

        例子2

    >>> [x * x for x in range(1, 11) if x % 2 == 0]
    [4, 16, 36, 64, 100]
    

        例子3

    >>> [m + n for m in 'ABC' for n in 'XYZ']
    ['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
    

        例子4

    >>> import os # 导入os模块,模块的概念后面讲到
    >>> [d for d in os.listdir('.')]  # os.listdir('.')可以列出 当前 文件和目录
    ['元类.py', '复习.py', '新式类与经典类.py', '类.py', '练习1.py']
    

        例子5

    >>> d = {'x': 'A', 'y': 'B', 'z': 'C' }
    >>> [k + '=' + v for k, v in d.items()]
    ['y=B', 'x=A', 'z=C']
    

        例子6

    >>> L = ['Hello', 'World', 'IBM', 'Apple']
    >>> [s.lower() for s in L]
    ['hello', 'world', 'ibm', 'apple']
    

    4 生成器

      生成器(generator), 作用与列表生成式类似. 生成器产生的原因是列表生成式是生成的列表, 但是由于内存的限制, 列表生成式能够生成的数量是有限制的

      生成器的最简单的写法就是将列表生成式的[]改为()

    >>> L = [x * x for x in range(10)]
    >>> L
    [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
    >>> g = (x * x for x in range(10))
    >>> g
    <generator object <genexpr> at 0x1022ef630>
    

      获取生成器生成的元素

        方法一: 用next()方法获取

    >>> next(g)
    0
    >>> next(g)
    1
    >>> next(g)
    4
    >>> next(g)
    9
    >>> next(g)
    16
    

        方法二: 利用for..in方法迭代

    >>> g = (x * x for x in range(10))
    >>> for n in g:
    ...     print(n)
    ... 
    0
    1
    4
    9
    16
    25
    36
    49
    64
    81
    

      生成器的定义方法二: 在函数中利用yield关键字

    def fib(max):
        n, a, b = 0, 0, 1
        while n < max:
            yield b
            a, b = b, a + b
            n = n + 1
        return 'done'
    

      这类的generator与函数的区别在于执行顺序不同

        函数: 从头执行到尾, 遇到return停止

        generator: 从头到尾执行, 遇到yield停止, 下次运行是从上次yield的位置继续执行

      由于这种generator也可以利用next和for来获得数据, 且next一样有可能越界, 故同样常用for遍历

    def fib(max):
        n, a, b = 0, 0, 1
        while n < max:
            yield b
            a, b = b, a + b
            n = n + 1
        return 'done'
    

      

    >>> for n in fib(6):
    ...     print(n)
    ...
    1
    1
    2
    3
    5
    8
    

      由此可见, for循环无法得到最后return的值, 要获得该值需要使用StopIteration异常

    >>> g = fib(6)
    >>> while True:
    ...     try:
    ...         x = next(g)
    ...         print('g:', x)
    ...     except StopIteration as e:
    ...         print('Generator return value:', e.value)
    ...         break
    ...
    g: 1
    g: 1
    g: 2
    g: 3
    g: 5
    g: 8
    Generator return value: done

     

    人若有恒 无所不成
  • 相关阅读:
    elk系统生成请求数据测试承载量、宕机瓶颈shell
    给公司个别安装好的系统环境处理-相当half系统初始化脚本shell
    elk相关启动脚本-shell编写
    ab压力测试
    FILEBEAT+ELK日志收集平台搭建流程
    linux单机部署kafka(filebeat+elk组合)
    linux系统安装MongoDB文档
    Java 生成验证码图片
    Java与数据库学习总结
    java 字节流文件复制方法总结
  • 原文地址:https://www.cnblogs.com/weihuchao/p/6602063.html
Copyright © 2020-2023  润新知