Python笔记 0x01

Python高级特性

切片

  • 前闭后开
  • 取列表前三个元素

    L[0:3]
    
  • 从头开始时可以省略

    L[:3]
    
  • 切到末尾也能省略

    L[2:]
    
  • 可以使用负数索引
  • 前后边界都为空时,表示不切片,复制一个列表

    L[:]
    
  • 传入三个参数时,末尾表示每几位分割后取首位

  • 字符串可以使用切片操作

    迭代

  • 迭代是一种循环
  • for作用于可迭代对象
  • 作用于字典时
    默认迭代的是key
  • 迭代字典的vaule

    for i in d.vaules()
    
  • 同时迭代字典和key时

    for m,n in d.items()
    
  • enumerate函数
    可以把list变为(索引 元素),可用于迭代,索引可用于标志位

    for i,vaule in enurate(L)
    

列表生成

  • range(),返回的是一个可迭代对象,不是列表,list可将其转换为一个列表。或者使用中括号

    list(range(5,10))
    l = [range(5,10)]
    
  • 列表生成式的本质含义是通过另一个可迭代对象生成列表

    list(x + x for x in L)
    l = [x + x for x in L]
    
  • 其它常见写法

    list(m + n for m in La for n in Lb)
    l = [m + n for m in La for n in Lb]
    
  • 通过字典的key-vaule时

    list(k + v for k,v in d.items())
    l = [k + v for k,v in d.items()]
    
  • 可以添加if判断

    list(x for x in range(10)if x > 5)
    l = [x for x in range(10)if x > 5]
    
  • 本质,可迭代对象for前为生成规则,其后可加if条件

    生成器

  • 一边循环一边计算的列表生成,即不创建完整的list
  • 最简单的生成器是将列表生成式中的[]换为()

    l = (range(10))
    

    此时返回的l为一个生成器对象

  • 生成器对象可以使用next()方法,是可迭代对象,一般使用for迭代而不用next()

  • 生成器的另一种构造方法,定义包含yield关键字的函数,此时其为一个生成器,返回一个生成器对象

    1
    2
    3
    4
    5
    6
    def square(max):
    n = 1
    while n < max:
    n = n * n
    yield n
    return 0

    据上例,square()返回一个生成器对象,

  • 变为生成器的函数在每次调用next()时执行,或者在迭代时执行,遇到yield返回,再次执行时从上次返回的yield语句继续执行,所以拿不到return语句的返回值,可以使用StopIteration捕获错误

    迭代器

  • 可被next()调用并返回下一个值的对象,生成器都是迭代器,但list,str等不是,因为Python的迭代器对象表示的是一个数据流,迭代器的计算是惰性的