廖雪峰Python教程学习笔记三-高级特性

来源:互联网 发布:穿衣打扮知乎 编辑:程序博客网 时间:2024/05/16 09:21

1 切片

语法形式:L[start:stop:step]
start 和 stop 是列表下标,包含 start 下标的元素,不包含 stop 下标的元素(左闭右开),step 是步进,即每次取元素的步长,默认值是 1。
e.g.

>>> L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']>>> L[0:3]['Michael', 'Sarah', 'Tracy']>>> L[-2:]['Bob', 'Jack']>>> L = range(100)>>> L[0, 1, 2, 3, ..., 99]>>> L[:10:2][0, 2, 4, 6, 8]

2 迭代

如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration)。

  • Python的for循环不仅可以用在list或tuple上,还可以作用在其他可迭代对象上,如dict
  • 默认情况下,dict迭代的是key。如果要迭代value,可以用for value in
    d.itervalues(),
    如果要同时迭代key和value,可以用for k, v in d.iteritems()。
  • 任何可迭代对象都可以作用于for循环,包括我们自定义的数据类型,只要符合迭代条件,就可以使用for循环。

3 列表生成式

列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式。
要生成[1x1, 2x2, 3x3, ..., 10x10],方法一是循环,另一种更简单的方法便是用用列表生成式生成,如下:

>>> [x * x for x in range(1, 11)] #for循环后面还可以加上if判断条件进行限制[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

还可以使用两层循环生成全排列:

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

运用列表生成式,可以快速生成list,可以通过一个list推导出另一个list,而代码却十分简洁。

4 生成器

在Python中,为了生成大型列表时节省内存空间,采用一边循环一边计算的机制,称为生成器(Generator)。
产生生成器一般有两种方法:

1.第一种方法很简单,只要把一个列表生成式的[]改成(),就创建了一个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 0x104feab40>

generator保存的是算法,可以使用next()方法计算得到每一个元素,但更常用的是使用for循环,因为generator也是可迭代对象:

>>> g = (x * x for x in range(10))>>> for n in g:...     print n...0149162536496481

2. 定义generator的另一种方法是在定义时用yield返回结果。

generator和函数的执行流程不一样。函数是顺序执行,遇到return语句或者最后一行函数语句就返回。而变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行(有点像函数中断)。
e.g.

>>> def odd():...     print 'step 1'...     yield 1...     print 'step 2'...     yield 3...     print 'step 3'...     yield 5...>>> o = odd()>>> o.next()step 11>>> o.next()step 23>>> o.next()step 35>>> o.next()Traceback (most recent call last):  File "<stdin>", line 1, in <module>StopIteration #执行3次yield后,已经没有yield可以执行了,所以,第4次调用next()就报错。

要理解generator的工作原理,它是在for循环的过程中不断计算出下一个元素,并在适当的条件结束for循环。对于函数改成的generator来说,遇到return语句或者执行到函数体最后一行语句,就是结束generator的指令,for循环随之结束。

0 0
原创粉丝点击