python的高级特性
slice
切片遵循左闭右开原则,即包括左边不包括右边。
普通用法:左开右闭形
a = [1, 2, 3, 4, 5]
print(a[0:3]) # [1, 2, 3]
print(a[:3]) # [1, 2, 3]
print(a[3:]) # [4, 5]
print(a[:]) #[1, 2, 3, 4, 5]
进阶用法:每n个数取一个
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(a[::2]) # [1, 3, 5, 7, 9] 所有数每2个取1个
print(a[0:6:2]) # [1, 3, 5] 前6个数,每2个取1个
迭代
迭代通过for循环来实现。具体描述:for...in
。
基本上list,tuple,dict都可以使用for循环
a = [1, 2, 3]
for i in a:
print(i) # 1 2 3
如何判断一个对象是否为迭代对象?
通过collections.abc模块的Iterable类型判断
from collections.abc import Iterable
a = [1, 2, 3]
print(isinstance(a, Iterable)) # True
如何使用下标循环
a = [1, 2, 3]
for i in range(len(a)):
print(i) # 0 1 2
for i, value in enumerate(a):
print(i, value) # 0 1 2
列表生成式
列表生成式是一种简洁的语法,用于创建列表。
a = [x for x in range(5)] # [0, 1, 2, 3, 4]
b = [x * x for x in range(5)] # [0, 1, 4, 9, 16]
c = [(x, y) for x in 'ABC' for y in 'XYZ'] # [('A', 'X'), ('A', 'Y'), ('A', 'Z'), ('B', 'X'), ('B', 'Y'), ('B', 'Z'), ('C', 'X'), ('C', 'Y'), ('C', 'Z')]
生成器
generator是一种迭代器,它可以逐步产生数据。
g = (x * x for x in range(5)) # 生成器
print(list(g)) # [0, 1, 4, 9, 16]
print(next(g)) # 0
print(next(g)) # 1
print(next(g)) # 4
print(next(g)) # 9
print(next(g)) # 16
如何定义generator
def fib(max):
a, b = 0, 1
while n < max:
yield b
a, b = b, a+b
n = n + 1
return 'done'