- 迭代器
- 什么是迭代器:
- 迭代:更新换代,每次迭代都必须基于上一次的结果
- 迭代器:迭代取值的工具
- 为什么要用迭代器:
- 可迭代对象:
- 可迭代对象:只要内置有__iter__方法的都叫做可迭代对象
- 可迭代对象-->迭代器对象:
可迭代对象执行内置方法__iter__得到的就是该对象的迭代器对象
- 针对双下划线开头和结尾的方法,推荐读法:双下+方法名
- 基本数据类型中的可迭代对象:str,list,dict,tumple,set,(检测方法:加上__iter__看下 返回值是否是内存地址的形式)
- 特殊的:
文件对象执行__iter__后还是本身,没有任何变化(文件对象本身就是可迭代对象)
- 迭代器取值:
- 迭代器对象特点:
- 内置有__iter__ 和 __next__方法
- 迭代器一定是可迭代对象,可迭代对象不一定是迭代器对象
- 生成迭代器和迭代器取值
- 取值特点:只能往后取,不能回退;若取完再取就报错(stopiteration)
- 迭代器对象无论执行多少次__iter__方法,得到的还是迭代器对象本身(******)
- for循环本质
- 问题引出:__iter__方法就是用来帮助生成迭代器对象的,
文件对象本身就是迭代器对象,为什么还内置有__iter__方法
- for循环内部本质:
- 1.将in后面的对象调用__iter__转换成迭代器对象
- 2.调用__next__取值
- 3.内部有异常捕获stopiteration,当__next__报这个错,自动结束循环
- 迭代取值优缺点:
- 优点:
- 1.不依赖索引取值
- 2.内存中永远只占有一份空间,不会导致内存溢出
- 缺点:
- 1.不能指定取出元素
- 2.取完之后会报错stopiteration
- 补充:
- 可迭代对象:内置有__iter__方法的对象叫做可迭代对象
- 迭代器对象:内置既有__iter__方法,也有__nxet__方法
- 生成器
- 用户自定义的迭代器就是生成器
- 生成器从产生到执行:
- 1.函数内写yield + 返回值(支持多个返回值,逗号隔开,然后会以元组形式返回)
- 2.函数名加括号的方式是生成器生效(此时就不是执行函数体内的代码块了)
- 3.将函数名加括号赋给g,那么g就是一个生成器(生成器初始化)
- 4.g.__next__()就是对函数做一次执行,
这个一次的意思是到下一个yield为止,并且yield的返回值也要返回
- yield表达形式
- yield支持外接为其传参
-
- yield特性:
- 1.提供了一种自定义生成器的方式
- 2.会帮你将函数的运行状态暂停住
- 3.可以返回值
- yield和return异同:
- 相同点:都可以返回值,且支持返回多个
- 不同点:① yield可以返回多次值,然后暂停函数,等待下一次生成器的调用,而return只能返回一次,接着函数立即结束
② yield还可以接受外部传入的值g.send()
- 生成器表达式
- 类比列表生成式
- 生成器表达式可以理解为 元组生成式
- 注意:
- 生成器不会主动执行任何一行代码,
- 必须通过__next__触发代码的运行
- __next__一次只能触发执行函数到下一行yield处
- 内置方法
- abs()求绝对值
- locals()返回当前所处位置 存储的所有名字;
globals()无论在哪,查看的都是全局名称空间
- bin();oct();hex() 这三个将十进制转换为其他进制;int()将其他进制转换为十进制
- bool()将执行结果转换为布尔值
- bytes也是一个数据类型
- callable()判断是否为可调用对象
- char()将数字转换为ASCII码表对应的字符;
ord()将字符按照ASCII码表转换成对应的数字
- dir()获取当前对象名称空间里边的名字
- divmod()分页器,同时返回除数和余数
- enumerate()枚举,一般用于给列表加索引号,可以加初始索引号
- eval()和exec()
- eval() 函数用来执行一个字符串表达式,并返回表达式的值;
exec()相比于 eval,exec可以执行更复杂的 Python 代码,返回值为None;
eval不支持逻辑代码,只支持一些简单的python代码
- format()三种 用法{}占位;{index}索引;{name}指名道姓
- help()查看函数注释
- isinstance()判断该方法时候是指定的数据类型
- pow(x,y)返回x**y
- round()四舍五入
- 面向过程编程
- 定义:类似于设计一条流水线。就是分析出解决问题所需要的步骤,
然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。
- 优劣:
- 好处:复杂的问题流程化
- 缺点:扩展性较差,一旦需要更改,整体都受到影响
posted @
2019-07-15 20:10
不在一城
阅读(
143)
评论()
编辑
收藏
举报