迭代器
1 什么是迭代:指的是一个重复的过程,一次重复成为一次迭代,并且每次重复的结果是下一次的初始值
l = ['a', 'b', 'c'] count = 0 while count < len(l): print(count) count += 1
2为什么要有迭代器?
对于序列类型:str list tuple 可以依赖索引来迭代取值
但是对于dict set 文件句柄等没有索引的类型,python必须为我们提供一种不依赖索引的迭代取值方式———》迭代器
3可迭代对象
查看一个对象是否是一个可迭代对象(dir 列出一个对象的所有方法)
①查看该对象的方法内是否含有 "__iter__"方法
print('__iter__' in dir(dict)) print('__iter__' in dir(str))
②引用Iterable模块查看一个对象是否是可迭代对象
from collections import Iterable print(isinstance('abc',Iterable)) print(isinstance(True,Iterable))
4查看一个对象是不是迭代器
查看该对象下是否含有"__iter__" 和"__next__"两个方法
s1 = 'abc' print('__iter__' in dir(s1)) print('__next__' in dir(s1))
总结:
1可迭代对象不一定是迭代器对象
2迭代器对象一定是可迭代的对象
3调用obj.__iter__()方法,得到迭代器对象(对于迭代器对象,执行'__iter__'得到的仍然是他本身)
l1 = [1, 2, 3, 4, 5] print('__iter__' in dir(l1)) print('__next__' in dir(l1)) l2 = l1.__iter__() print('__next__' in dir(l2)) dic = {'name':'lidawie','age':18,'sex':'boy'} dic1=dic.__iter__() while True: try: print(dic1.__next__()) except: break
for循环详解:
1调用in 后边的 __iter__方法,生成迭代器
2执行__next__方法,赋值给i
3捕捉StopIteration异常,结束迭代
迭代器的
优点:
1提供了一种统一的 不依赖索引的取值方式,为for循环的实现方式提供了依据
2迭代器同一时间内存只有一个值,更节省内存
缺点:
只能往后取,并且是一次性的
不能统计值的个数,即长度
生成器
只要函数体内部有yield关键字,那么函数名()得到的结果就是生成器,并且不会执行函数内部代码
def func(): print('>>>first') yield 1 print('>>>second') yield 2 print('>>>third') yield 3 g = func() print(g)
内置函数
与作用域相关的
local 函数以字典的形式返回当前位置的全部局部变量
golbals 函数以字典的形式返回全部全局变量
与字符串相关
eval 执行字符串类型的代码,返回结果
exec 执行字符串类型的代码,不会返回结果
compile 将字符串类型的代码编译,代码对象能够通过exec执行 或者通过eval()求值
输入输出相关
input 函数接受一个标准输入数据,返回str类型
print 打印输出
内存相关
hash 获取一个对象的哈希值
id 获取一个对象的内存地址
文件操作相关
open 打开一个文件
模块相关
__import__动态加载类和函数
帮助
help 查看函数和模块用途的详细说明
调用相关
callable 检查一个对象是否可调用
dir 查看一个对象所有的内置属性
迭代器生成器相关
range 创建一个整数对象,一般用在for循环中
next 返回迭代器的下一个对象
iter 用来生成一个迭代器
基础数据类型相关
数字相关
bool 用于给指定类型转化布尔类型,如果没有参数,返回为False
int 将一个字符串和数字转换为整型
float 将一个字符串和数字转换为浮点数
进制转换
bin 将十进制转换为二进制返回
oct 将十进制转换为八进制并返回
hex 将十进制转换为十六进制并返回
数学运算
abs 函数返回数字的绝对值
divmod 计算除数和被除数的结果,返回一个商和余数的结果(a//b,a%b)
round 保留浮点数的小数位数,默认保留整数
pow 求x**y次幂
print(abs(-1)) print(divmod(10, 3)) print(round(10 / 3, 3)) print(pow(10, 3, 3))
sum 对可迭代对象进行求和计算(可以设置初始值)
min 返回可迭代对象的最小值(可加key,key为函数名,通过函数的规则,返回最小值)
max 返回可迭代对象的最大值(可加key,key为函数名,通过函数的规则,返回最大值)
print(sum([1, 2, 3, 4, 5])) print(sum((1, 2, 3), 100)) print(min([1, 2, 32, 4, 235, 34, 6, 34, 5, ])) print(min([12, 3, 124, -235, -2, 323, -3], key=abs)) # 按照绝对值的大小,取最小的数 dic = {'a': 3, 'b': 1, 'c': 2} print(min(dic, key=lambda x: dic[x])) # x为dic的key,lambda的返回值(dic的值进行比较)返回最小值对应的key print(max([1, 2, 3, 4, 5, ])) print(max([1, 23, 21, 4, 235, 325, -34252, -2342], key=abs)) # 按照绝对值的大小,返回此序列的最大值 dic = {'a': 3, 'b': 2, 'c': 4} print(max(dic, key=lambda x: dic[x]))
数据结构相关
list 将一个可迭代对象转化为列表(如果是字典,默认将key作为列表的元素)
tuple 将一个可迭代对象转化为元祖(如果是字典,默认将key作为元祖的元素)
print(list((1, 2, 3))) print(list({1: 'a', 2: 'b', 3: 'c'})) print(tuple([1, 2, 3, 4, 5])) print(tuple({'a': 1, 'b': 2, 'c': 3}))
相关内置函数
reversed 将一个序列翻转,并返回翻转序列的迭代器
slice 构造一个切片对象,用于列表的切片
res = reversed([1,2,3,4,5,6,7,8]) for i in res: print(i) l1 = ['a','b','c','d','e','f','g'] sl1_obj =slice(3) print(l1[sl1_obj])
字符串相关
str 将数据转化为字符串
format 与具体数据相关,用于计算各种小数
bytes 用于不同编码之间的转化
s = '你好' bs = s.encode('utf-8') print(bs) s1 = bs.decode('utf-8') print(s1)
bytearry 返回一个新字节数组,这个数组里的元素是可以变的,并且每个元素的取值范围 0<=X<256
ord 输入字符,找该字符编码的位置
chr 输入数字找出其对应的字符
ascii 是ascii码中的返回该值,不是就返回/u
repr 返回一个对象的string形式
数据集合
dci 创建一个字典
set 创建一个集合
frozenset 返回一个冻结的集合,冻结后集合不能再添加或删除任何元素
相关内置函数
len 返回一个对象中元素的个数
sorted 对所有可迭代的对象进行排序操作
enumetate 枚举,返回一个枚举对象
all 可迭代对象中,全都是True 才是True
any 可迭代对象中,有一个是True就是True
zip 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元祖,然后返回由这些元祖组成的列表,列表的长度与最短的对象相同
filter过滤
map会根据提供的函数 对指定的序列做映射