Python3 高级特性
切片
list、tuple、string都可以使用切片功能第一个元素的索引为0,倒数第一个元素的索引为-1
迭代
可迭代对象 * 集合数据类型:list、tuple``dict``set``str * generator,包括生成器和带yield的generator function
可以采用collections模块的Iterable类型判断是否是可迭代对象
>>>
from collections
import Iterable
>>>isinstance(
'abc',Iterable)
True
>>>isinstance([
1,
2,
3],Iterable)
True
>>>isinstance(
123,Iterable)
False
list、tuple的迭代可以采用for...in完成。dict的存储与list的顺序排列不同。默认dict迭代的是key。 如果要迭代value,可以用for value in d.values()。 如果要迭代key、value,可以用for k,v in d.items()对list实现类似Java的下标循环,采用enumerate可以把一个list变成索引-元素对,可以在for同时迭代索引和元素本身
for i,value
in enumerate([
'A',
'B',
'C'])
print(i,value)
0 A
1 B
2 C
列表生成式
生成[1,2,3,4,5,6,7,8,9,10]可以用list(range(1,11))生成[1x1,2x2,3x3,...,10x10],用列表生成式
>>>[x*x
for x
in range(
1,
11)]
[
1,
4,
9,
16,
25,
36,
49,
64,
81,
100]
筛选出仅偶数的平方
>>>[x*x
for x
in range(
1,
11)
if x%
2 ==
0 ]
[
4,
16,
36,
64,
100]
使用两层循环,生成全排列
>>>[m+n
for m
in 'ABC' ro n
in 'XYZ']
[
'AX',
'AY',
'AZ',
'BX',
'BY',
'BZ',
'CX',
'CY',
'CZ']
列出当前目录下所有文件和目录名
>>>
import os
>>>[d
for d
in os.listdir(
'.')]
把list中所有字符串变成小写
>>>L=[
'Hello',
'World',
'IBM',
'Apple']
>>>[s.lower()
for s
in L]
[
'hello',
'world',
'ibm',
'apple']
生成器
概念
生成器把结果保存为生成器的状态,在每次进行迭代时返回一个值,直到遇到Stop Iteration异常结束
语法
生成器表达式:通过list解析语法,把[]换成()
>>>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
0x1022ef630>
生成器函数:在函数中出现了yield关键字,那么该函数不再是普通函数,而是生成器函数,Python解释器会将其视为一个generator
普通函数和generator生成器的区别
普通函数调用直接返回结果,generator函数的调用,返回一个generator对象;(调用generator时可以先创建一个对象,再用next()方法不断获得下一个返回值,但实际中通常用for循环实现)generator在执行过程中,遇到yield就中断,下次又继续执行
迭代器
可以被next()调用并不断返回下一个值的对象称为迭代器Iterator生成器都是Iterator对象,但list、dict、str虽然是Iterable,却不是Iterator。 把list、dict、str等Iterable变成Iterator可以使用iter()
>>>isinstance(iter([]),Iterator)
True
>>>isinstance(iter(
'abc'),Iterator)
True
凡是可作用于for循环的对象都是Iterable类型凡是可作用于next()的对象都是Iterator类型