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全栈开发_ ...
随机推荐
- centos 修改文件权限
给脚本添加可执行权限: chmod -R 777 filename.sh
- 异常处理com.sun.image.codec.jpeg.JPEGImageEncoder
以下方案不一定能解决问题.解决方案:配置JDK的JRE_HOME 环境变量既可. Linux 下配置 : vi /etc/profile 在profile文件下面追加写入下面信息: export J ...
- axios - 基于 Promise 的 HTTP 异步请求库
axios 是基于 Promise 的 HTTP 请求客户端,可同时在浏览器和 node.js 中使用.Vue 更新到2.0之后,作者就宣告不再对 vue-resource 模块更新,而是推荐使用 a ...
- Java基础编程题——素数
package com.yangzl.basic; /** * 判断101-200之间有多少个素数,并输出所有素数. * @author Administrator * */ /*程序分析:判断素数的 ...
- 20155332 2016-2017-2 《Java程序设计》第7周学习总结
20155332 2016-2017-2 <Java程序设计>第7周学习总结 教材学习内容总结 了解Lambda语法 了解方法引用 了解Fucntional与Stream API 掌握Da ...
- Linux新增用户过程详解
Linux系统中,当使用useradd添加用户时,会将系统的/etc/skel目录下的所有文件复制到新添加用户的家目录中.该目录下的所有文件都是隐藏文件(以.点开头的文件). 通过修改.添加.删除/e ...
- MHA-Failover可能遇到的坑
一.主从数据一致性 1.1.如何保证主从数据一致性 参考叶师傅文章:FAQ系列 | 如何保证主从复制数据一致性 在MySQL中,一次事务提交后,需要写undo.写redo.写binlog,写数据文件等 ...
- Mybatis进阶学习笔记——关系查询——一对一查询
用户和订单的需求 通过查询订单,查询用户,就是一对一查询 (1)自定义JavaBean(常用,推荐使用) <select id="queryOrderUser" result ...
- log4j2使用入门(二)——与不同日志框架的适配
在之前博客中已经指出log4j2可以与不同的日志框架进行适配,这里举一些实际应用进行说明: 1.比如我们在项目中使用了log4j2作为日志器,使用了log4j-api2.6.2.jar和log4j-c ...
- maven项目有红叉,感叹号如何解决?
红色感叹号,pom.xml文件有红叉 修改了Maven私服服务器的IP地址.可在Maven安装路径下的conf/setting.xml中修改ip地址,具体参照“开发工具”/maven.工程中class ...