学习 python 3 - python 高级特性「半原创」


本文会带来什么

  1. 切片
  2. 迭代
  3. 列表生成器
  4. 生成器
  5. 迭代器

1.切片

1
2
3
4
5
6
7
8
9
10
11
12
13
#  --------------切片
L = [1,2,3,4,5,6,7,8,9]
# 基本定义 ,取出0-2这三个元素,第二个数 3 为下标,当第一个为0的时候,可以忽略
print(L[0:3])
print(L[:3])
# 前五个数,每两个取一个
print(L[:5:2])
# 所有数,每两个取一个
print(L[::2])
# 原样复制
print(L[:])
# 字符串也可以当做数组
print("123456789"[::2])

2.迭代(或者叫遍历)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#  --------------迭代(或者叫遍历)
# 普通迭代
# 可迭代于一切可迭代对象上
# 判断是否为可迭代对象
# 引入 iterable
from collections import Iterable
aString = "abcefd"
bList = [1,2,3,4]
cDict = {"name":"jack","age":2}
dDict = 12
print(isinstance(aString,Iterable))
print(isinstance(bList,Iterable))
print(isinstance(cDict,Iterable))
print(isinstance(dDict,Iterable))

3.迭代(使出现下标循环)

1
2
3
4
#  --------------迭代(使出现下标循环)
L = [6,7,8,9]
for i,value in enumerate(L):
print("the index is :",i,",the value is:",value)

4.列表生成器

1
2
3
4
5
6
7
8
9
10
#  --------------列表生成器
# 生成列表
# 方式一 range
print(list(range(11)))
print(list(range(2,11)))
# 列表生成器
print([x * x for x in range(11)])
print([m + n for m in "abc" for n in "xyz"])
d = {'x': 'A', 'y': 'B', 'z': 'C' }
print([k + "=" + v for k,v in d.items()])

5.生成器(yield)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#  --------------生成器(yield)
# 如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?
# 这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器:generator
# 方法 1 :要创建一个generator,有很多种方法。第一种方法很简单,只要把一个列表生成式的[]改成(),就创建了一个generator:
g = (x * x for x in range(10))
# 方法二 yield
# 原工程
def fib(max):
n, a, b = 0, 0, 1
while n < max:
print(b)
a, b = b, a + b
n = n + 1
return 'done'
# 修改后工程
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的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。

6.迭代器

1
2
3
4
5
6
#  --------------迭代器
# 迭代器和可迭代对象区别
# 这些可以直接作用于for循环的对象统称为可迭代对象:Iterable,可以使用isinstance()判断一个对象是否是Iterable对象
# 可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator,如生成器,可以使用isinstance()判断一个对象是否是Iterator对象
# 集合数据类型如list、dict、str等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象。
# Python的for循环本质上就是通过不断调用next()函数实现的

参考