Python学习之高级特性

Python学习目录python

  1. 在Mac下使用Python3
  2. Python学习之数据类型
  3. Python学习之函数
  4. Python学习之高级特性
  5. Python学习之函数式编程
  6. Python学习之模块
  7. Python学习之面向对象编程
  8. Python学习之面向对象高级编程
  9. Python学习之错误调试和测试
  10. Python学习之IO编程
  11. Python学习之进程和线程
  12. Python学习之正则
  13. Python学习之经常使用模块
  14. Python学习之网络编程

练习代码git

掌握了Python的数据类型、语句和函数,基本上就能够编写出不少有用的程序了。好比构造一个1, 3, 5, 7, ..., 99的列表,能够经过循环实现:github

L = []
n = 1
while n <= 99:
    L.append(n)
    n = n + 2
复制代码

取list的前一半的元素,也能够经过循环实现。算法

可是在Python中,代码不是越多越好,而是越少越好。代码不是越复杂越好,而是越简单越好。基于这一思想,咱们来介绍Python中很是有用的高级特性,1行代码能实现的功能,决不写5行代码。请始终牢记,代码越少,开发效率越高。编程

切片(Slice)

L = list(range(100))
L[:10]

>>> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

(0, 1, 2, 3, 4, 5)[:3]

>>> (0, 1, 2)

'ABCDEFG'[:3]

>>> 'ABC'
复制代码

在不少编程语言中,针对字符串提供了不少各类截取函数(例如,substring),其实目的就是对字符串切片。Python没有针对字符串的截取函数,只须要切片一个操做就能够完成,很是简单。网络

迭代

  1. 经过collections模块的Iterable类型判断对象是否为可迭代对象
from collections import Iterable
isinstance('abc', Iterable) # str是否可迭代

>>> True
复制代码
  1. Python内置的enumerate函数能够把一个list变成索引-元素对,这样就能够在for循环中同时迭代索引和元素自己
for i, value in enumerate(['A', 'B', 'C']):
    print(i, value)

>>>
    0 A
    1 B
    2 C
复制代码

列表生成

  1. list(range(1, 11))
  2. 生成[1x1, 2x2, 3x3, ..., 10x10]
L = []
for x in range(1, 11):
    L.append(x * x)
复制代码
  1. 列表生成式(list comprehensions)能够用一行语句代替循环生成上面的list
[x * x for x in range(1, 11)]
复制代码

生成器(generator)

generator保存的是算法,每次调用next(g),就计算出g的下一个元素的值,直到计算到最后一个元素,没有更多的元素时,抛出StopIteration的错误; 一样也可使用for循环遍历app

  1. 把一个列表生成式的[]改为()
g = (x * x for x in range(10))
for n in g:
   print(n)

>>>
    0
    1
    4
    9
    16
    25
    36
    49
    64
    81
复制代码
  1. 函数定义中包含yield关键字,那么这个函数就再也不是一个普通函数,而是一个generator

generator和函数的执行流程不同。函数是顺序执行,遇到return语句或者最后一行函数语句就返回。而变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。 把函数改为generator后,咱们基本上历来不会用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'
f = fib(6)
复制代码

迭代器

  1. 能够直接做用于for循环的数据类型有如下几种: 一类是集合数据类型,如list、tuple、dict、set、str等; 一类是generator,包括生成器和带yield的generator function

这些能够直接做用于for循环的对象统称为可迭代对象:Iterable。可使用isinstance()判断一个对象是不是Iterable对象。 而生成器不但能够做用于for循环,还能够被next()函数不断调用并返回下一个值,直到最后抛出StopIteration错误表示没法继续返回下一个值了。能够被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator。可使用isinstance()判断一个对象是不是Iterator对象。函数式编程

  1. 集合数据类型如list、dict、str等是Iterable但不是Iterator,不过能够经过iter()函数得到一个Iterator对象。
  2. Python的for循环本质上就是经过不断调用next()函数实现的。
for x in [1, 2, 3, 4, 5]:
    pass
复制代码

彻底等同于:函数

# 首先得到Iterator对象:
it = iter([1, 2, 3, 4, 5])
# 循环:
while True:
    try:
        # 得到下一个值:
        x = next(it)
    except StopIteration:
        # 遇到StopIteration就退出循环
        break
复制代码

小结:Python的Iterator对象表示的是一个数据流,这个数据流看作是一个有序序列,但咱们却不能提早知道序列的长度,只能不断经过next()函数实现按需计算下一个数据,因此Iterator的计算是惰性的,只有在须要返回下一个数据时它才会计算。 Iterator甚至能够表示一个无限大的数据流,例如全体天然数。而使用list是永远不可能存储全体天然数的。

下一篇:Python学习之函数式编程

相关文章
相关标签/搜索