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全栈开发_ ...
随机推荐
- android 简单文件操作
1.布局 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:too ...
- Linux - rm 修复误删文件
fdisk -l # 分区信息lsblk -f # 查看文件类型/etc/fstab # 查看文件格式挂载启动信息 # debugfs针对 ext2 # ext3grep针对 ext3 # extun ...
- KVM 部署 日常操作
KVM 安装 条件检测准备:CPU 虚拟化 ,现在物理机都支持. 开启cpu虚拟化 现在至强一般机器都有 cat /proc/cpuinfo |grep flags 需要全虚拟化支持为vmx(Inte ...
- mysql 案例 ~ pt修复工具的使用
简介:今天咱们来聊聊PT修复工具pt-table-sync 注意事项: 1 表要有主键或者唯一键 2 针对每一个chunk加的是for update锁 3 修复过程中不能容忍从库延迟 如果 ...
- Qt 窗体使用 label 标签插入静态图片
最近在做毕业设计,上位机软件用的Qt,界面当中需要加入学校校徽,结果百度了n多种方法,有用QPixmap的: QPixmap myPix("./school.jpg"); ui-& ...
- 1.内网ntp服务器的搭建
1.拓扑图
- ubuntu14.04 boost 1.58.0 安裝
1.首先下载安装包,然后解压, 切换目录 wget -o boost_1_58_0.gar.gz http://sourceforge.net/projects/boost/files/boost/1 ...
- platform_get_resource的分析
阅读platformdriver的代码时,发现在probe函数直接调用platform_get_resource从pdev中获取io内存,但却没有判断传给probe的pdev是否属于这个驱动 ! 后来 ...
- mac使用influxdb和grafana
mac使用influxdb和grafana influxdb安装以及配置 brew update brew install influxdb ln -sfv /usr/local/opt/influx ...
- tomcat jetty
背景 其实这个比较毫无意义.只是当时突然知道了jetty,所以记下来,对于开发人员来说选择哪个一般意义不大. 转载 从架构上来看 Tomcat 在处理少数非常繁忙的连接上更有优势,也就是说连接的生命周 ...