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全栈开发_ ...
随机推荐
- .Net进阶系列(15)-异步多线程(线程的特殊处理和深究委托赋值)(被替换)
1. 线程的异常处理 我们经常会遇到一个场景,开启了多个线程,其中一个线程报错,导致整个程序崩溃.这并不是我们想要的,我需要的结果是,其中一个线程报错,默默的记录下,其它线程正常进行,保证程序整体可以 ...
- 上传文件服务器与web内容服务分离
现在难点在: 1\单击表单提交按钮后,图片上传到图片服务器,文字内容上传web服务器数据库,这两个服务器分别在两个城市. 2\图片不能通过web服务器中转. 3\web服务器内 ...
- <video>标签:视频播放器动态设置src
HTML代码 <div id="my_div"> <video id="my_video" width="600" ...
- java先导课程学习总结
经过两个星期四节课的java学习,我也对java这门语言有了一定的认识.刚开始上课的时候,我认为java把C语言中老师所说的模块化编程进行了强调,进行一个类,一个类的编程,在类中构造相应的方法,使用的 ...
- 【docx4j】docx4j操作docx,实现替换内容、转换pdf、html等操作
主要是想要用此功插件操作docx,主要的操作就是操作段落等信息,另外,也想实现替换docx的内容,实现根据模板动态生成内容的效果,也想用此插件实现docx转换pdf. word的格式其实可以用xml来 ...
- 一文看懂汽车电子ECU bootloader工作原理及开发要点
随着半导体技术的不断进步(按照摩尔定律),MCU内部集成的逻辑功能外设越来越多,存储器也越来越大.消费者对于汽车节能(经济和法规对排放的要求)型.舒适性.互联性.安全性(功能安全和信息安全)的要求越来 ...
- opencv入门指南(转载)
转载链接:http://blog.csdn.net/morewindows/article/details/8426318 网上的总结的一些用openncv的库来做的事: 下面列出OpenCV入门指南 ...
- Python3学习笔记26-unittest模块
unittest单元测试框架,主要由四部分组成:测试固件.测试用例.测试套件.测试执行器 测试固件(test fixture) 测试固件有两部分,执行测试前的准备部分setUp(),测试执行完后的清扫 ...
- 【转】snprintf()函数使用方法
众所周知,sprintf不能检查目标字符串的长度,可能造成众多安全问题,所以都会推荐使用snprintf. 注:sprintf()函数:int sprintf( char *buffer, const ...
- 执行update语句mysql5.6报错ERROR 1292 (22007): Truncated incorrect DOUBLE value: '糖糖的坤大叔'
执行修改语句update tbl_user_details set nickname=CONCAT("用户",yunva_id) where nickname = yunva_id ...