python全栈开发day13-迭代器、生成器、列表推导式等
昨日内容:函数的有用信息、带参数的装饰器、多个装饰器修饰一个函数
迭代器
可迭代对象:内部含有__iter__方法
迭代器
- 定义:可迭代对象.__iter__()就是迭代器,含有__iter__且__next__
- 3个特点:1、节省内存;2、惰性运算;3、取值过程不可逆(一条龙走到黑)
- 两种取值方法:1、__next__;2、for循环
- for循环机制:1、将可迭代对象通过__iter__()方法生成迭代器;2、通过__next__()逐个取值;3、用try异常处理方法防止报错
- 模拟for循环
l1 = [1,2,3,4]r
l1_obj = l1.__iter__()
while True:
try:
print(l1_obj.__next__())
except Exception:
break 判断是否是可迭代对象或迭代器的两种方法
1、in dir;2、isinstance# 字符串、列表、元组、集合、字典、range(),文件f1等都是可迭代对象不是迭代器
# 文件f1 是迭代器
# 判断方法一:in dir
# print('__iter__' in dir(range(10)))
# print('__next__' in dir(range(10)))
# with open('a.txt',encoding='utf-8',mode='w') as f1:
# print('__iter__' in dir(f1))
# print('__next__' in dir(f1))
#
#
# # 判断方法二:isinstanse()
# from collections import Iterable
# from collections import Iterator
# print(isinstance(range(10), Iterable))
# print(isinstance(range(10), Iterator))
# print(isinstance(range(10), Iterable))两种方法
生成器
本质:迭代器,是自己用python写的迭代器
生成器函数yield,yield
from,调用生成器函数生成对象
每调用一次__next__,执行一个yield生成器表达式,用()替换列表推导式的[]即可
send四点注意事项
1、send具有next的功能
2、send可以给上一个yield传值
3、第一个取值不能用send
4、最后一个yield不会得到send的值
import time def func1():
print(111)
print(222)
yield 333
print(444)
yield 555 g = func1() # 生成器对象 print(g.__next__()) # 执行到第一个yield,将yield返回值给g.__next__()
time.sleep(1) print(g.__next__())
生成器函数
推导式
列表推导式
字典推导式
集合推导式
其他知识点补充
nonlocals、globals(结合面试题)

locals:函数会以字典的类型返回 当前位置的 全部 局部变量
globals:函数以字典的类型返回全部全局变量def extendlist(var,li = []):
li.append(var)
print(locals())
print(globals())
return li ret = extendlist(2)
print(globals())开放封闭原则
- 开放原则
任何程序,我们不可能在设计之初已经想好了所有功能并且未来不做任何更新和更改。所有我们必须允许代码扩展、增加新功能。 - 封闭原则
我们写了一个函数,交给别人使用了,这个时候我们对其更改,可能会影响其他使用该还是的用户。
装饰器很好的遵循了开发封闭原则。 装饰器的本质,就是闭包。
global的两点补充(结合面试题)
1、函数内部如果有变量名和全局变量同名且对此变量进行改变,python就会将你引用的那个变量视为局部定义的变量,但局部变量没有定义,他就会报错。

2、for、if、while没有开辟临时内存空间,只有函数会开辟内存空间。
3、统一作用域,声明全局变量,这个声明语句必须在该作用域最上面
python全栈开发day13-迭代器、生成器、列表推导式等的更多相关文章
- Python 全栈开发五 迭代器 生成器 装饰器
一.迭代器 迭代协议:对象必须提供一个next方法,执行该方法后会返回迭代的下一项或者抛出Stopiteration异常,终止迭代.切只能往前,不能倒退. 可迭代对象:遵循迭代写一点对象就是可迭代对象 ...
- Python全栈开发之---迭代器、可迭代对象、生成器
1.什么叫迭代 现在,我们已经获得了一个新线索,有一个叫做“可迭代的”概念. 首先,我们从报错来分析,好像之所以1234不可以for循环,是因为它不可迭代.那么如果“可迭代”,就应该可以被for循环了 ...
- python全栈开发-Day11 迭代器、生成器、面向过程编程
一. 迭代器 一 .迭代的概念 迭代器即迭代的工具,那什么是迭代呢? 迭代是一个重复的过程,每次重复即一次迭代,并且每次迭代的结果都是下一次迭代的初始值 while True: #只是单纯地重复,因而 ...
- python全栈开发_day13_迭代器和生成器
一:迭代器 1)可迭代对象 具有内置函数__iter__的数据就是可迭代对象 2)迭代器对象 具有内置函数__next__的数据就是迭代器对象 迭代器对象一定是可迭代对象,可迭代对象不一定是迭代器对象 ...
- python全栈开发-Day13 内置函数
一.内置函数 注意:内置函数id()可以返回一个对象的身份,返回值为整数. 这个整数通常对应与该对象在内存中的位置,但这与python的具体实现有关,不应该作为对身份的定义,即不够精准,最精准的还是以 ...
- 巨蟒python全栈开发-第4天 列表&元组&range
今日内容大纲 1. 什么是列表 定义: 能装对象的对象 在python中使用[]来描述列表, 内部元素用逗号隔开. 对数据类型没有要求 列表存在索引和切片. 和字符串是一样的. 2. 相关的增删改查操 ...
- python全栈开发笔记----基本数据类型---列表方法
#list 类中提供的方法 #参数 1.def append(self, *args, **kwargs)原来值最后追加#对象..方法(..) #li对象调用append方法 li = [11,22, ...
- python全栈开发笔记----基本数据类型---列表List
#list 是 类 ,列表 序列是Python中最基本的数据结构.序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推. Python有6个序列的内置类型,但 ...
- python全栈开发_day5_字符串及列表类型
一:字符串 1)优先掌握知识点. a=" 21j3:b12jk:b3j12:3bjk12 " #内置方法之strip print(a.strip(" ")) # ...
- python全栈开发学习_内容目录及链接
python全栈开发学习_day1_计算机五大组成部分及操作系统 python全栈开发学习_day2_语言种类及变量 python全栈开发_day3_数据类型,输入输出及运算符 python全栈开发_ ...
随机推荐
- PHP 将amr音频文件转换为mp3格式
说下整体思路 1.服务器安装ffmpeg 2.使用ffmpeg -i 指令来转换amr为mp3格式(这个到时候写在PHP代码中,使用exec函数执行即可) 3.在网页端使用HTML5的audio标签来 ...
- Javaweb学习笔记——(三)——————JavaScript基础&DOM基础
day031.js的String对象 **创建String对象 ***var str = "abc"; **方法和属性(文档) ***属性 lenth:字符串的长度 ***方法 ( ...
- u-boot移植(十三)---代码修改---裁剪及环境变量 二
一.错误处理 上一节遇到一个错误: print一下: 发现我们在jz2440.h中静态写的网络参数都没有写进去. dm9000 address not set. dm9000的地址未设置. 这里对应两 ...
- 在浏览器中使用Javascript
在浏览器中点击鼠标右键——检查,选择console,可以在里面写Javascript代码,并可以在页面实时看到结果: 关于JavaScript的几个注意事项: JavaScript 语句和 JavaS ...
- android 内存泄漏,以及检测方法
1.为什么会产生内存泄漏 当一个对象已经不需要再使用本该被回收时,另外一个正在使用的对象持有它的引用从而导致它不能被回收,这导致本该被回收的对象不能被回收而停留在堆内存中,这就产生了内存泄漏. 2.内 ...
- nodejs对mongodb数据库的增删改查操作(转载)
首先要确保mongodb的正确安装,安装参照:http://docs.mongodb.org/manual/tutorial/install-mongodb-on-debian-or-ubuntu-l ...
- 【API】API函数创建用户,添加到管理组
1 学习目标 使用API添加用户可以绕过某些杀毒软件的限制. 2 编程思路 2.1 代码原理 使用NetUserAdd这个API添加普通权限的用户,NetLocalGroupAddMembers这个A ...
- 一个优秀的 ring buffer 或 cycle buffer 的实现代码
#define CIRCLE_BUFFSIZE 1024 * 1024#define min(x, y) ((x) < (y) ? (x) : (y)) struct cycle_buffer ...
- 解决mysql开启GTID主从同步出现1236错误问题【转】
最近遇到mysql开启gtid做复制时,从库出现1236错误,导致同步无法进行,本文就这问题记录下处理步骤,有关gtid知识在这里不做介绍,mysql版本为5.7.16. 一.错误原因分析 错误信息如 ...
- Python3学习笔记23-StringIO和BytesIO
StringIO 很多时候数据读取不一定是文件,也可以在内存中 StringIO顾名思义就是在内存中读写str 要把str写入StringIO,我们需要先创建一个StringIO,然后像文件一样写入即 ...