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全栈开发_ ...
随机推荐
- VUE2.0 饿了吗视频学习笔记(四):颜色、跳转、设置、vue-resource
https://gitee.com/1981633/vue_study.git 源码下载地址,随笔记动态更新中 1.设置选中项颜色 <template> <div id=" ...
- luogu 1064 金明的预算方案
01背包 变形,有主附件的背包内则更改决策 original: 1) 不选 2)选,f[j-w[i]]+v[i] now : 1)不选 2)选主 3)主 附1 4)主 附2 ...
- Oracle-数据泵使用
一.为何选择数据泵方式 相对于exp/imp方式,数据泵(expdp/impdp)更快,且能导出空表:相对于rman.dg等方式,数据泵操作更加简单.此外,在数据量不大.可停库的情况下,数据泵方式是可 ...
- [转]Linux/Windows下脚本对拍程序
[新]简单写法 (转载自:https://blog.csdn.net/ylsoi/article/details/79824655) 要求:文件输入输出,且输入输出文件需要对应 Linux: #inc ...
- HTML5的学习(一)HTML5标签
HTML5是WHATWG与W3C合作,创建的一个新版本的HTML.2014年10月29日,万维网联盟宣布,经过接近8年的艰苦努力,该标准规范终于制定完成.HTML5相比于之前的HTML的其他版本增加了 ...
- Django 2.0 学习(12):Django 模板语法
Django 模板语法 一.模板 只要是在html里面有模板语法就不是html文件了,这样的文件就叫做模板. 二.模板语法 模板语法变量:{{ }} 在Django模板中遍历复杂数据结构的关键是句点字 ...
- class特性
每个HTML元素都可以附带一个class特性.有时候,你希望有一种方法可以指定多个元素并将这些元素和页面上的其他元素区分出来,而不是单独指定文档中的某个元素. <!DOCTYPE html> ...
- iOS视频流开发(2)—视频播放
承上篇,本篇文章主要介绍iOS视频播放需要用到的类.以及他们的使用场景和开发中遇到的问题. MPMoviePlayerViewController MP简介 iOS提供MPMoviePlayerCon ...
- Android APP常见的5类内存泄露及解决方法
1.static变量引起的内存泄漏 因为static变量的生命周期是在类加载时开始 类卸载时结束,也就是说static变量是在程序进程死亡时才释放,如果在static变量中 引用了Activity 那 ...
- python 历险记(三)— python 的常用文件操作
目录 前言 文件 什么是文件? 如何在 python 中打开文件? python 文件对象有哪些属性? 如何读文件? read() readline() 如何写文件? 如何操作文件和目录? 强大的 o ...