Python学习目录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行代码。请始终牢记,代码越少,开发效率越高。编程
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没有针对字符串的截取函数,只须要切片一个操做就能够完成,很是简单。网络
from collections import Iterable
isinstance('abc', Iterable) # str是否可迭代
>>> True
复制代码
for i, value in enumerate(['A', 'B', 'C']):
print(i, value)
>>>
0 A
1 B
2 C
复制代码
list(range(1, 11))
L = []
for x in range(1, 11):
L.append(x * x)
复制代码
[x * x for x in range(1, 11)]
复制代码
generator保存的是算法,每次调用next(g),就计算出g的下一个元素的值,直到计算到最后一个元素,没有更多的元素时,抛出StopIteration的错误; 一样也可使用for循环遍历app
g = (x * x for x in range(10))
for n in g:
print(n)
>>>
0
1
4
9
16
25
36
49
64
81
复制代码
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)
复制代码
这些能够直接做用于for循环的对象统称为可迭代对象:Iterable。可使用isinstance()判断一个对象是不是Iterable对象。 而生成器不但能够做用于for循环,还能够被next()函数不断调用并返回下一个值,直到最后抛出StopIteration错误表示没法继续返回下一个值了。能够被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator。可使用isinstance()判断一个对象是不是Iterator对象。函数式编程
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是永远不可能存储全体天然数的。