Python基础(四)
2024-09-05 17:36:46
一、迭代器
让不同数据类型具有相同的遍历方式:list、dict、str、tuple、set
1、特点:
①省内存
②只能向前,不能反复
③惰性机制
2、可迭代对象
###dir() 查看我们数据类型可以执行的操作### print(dir(str)) # 如果有'__iter__'方法,说明就是可迭代对象
print(dir(list)) # '__iter__'
①查看set集合可执行的操作里有没有 __iter__ 方法
print("__iter__" in dir(set))
True
②列表变成一个迭代器
lst = ["张三", "李四", "王五", "赵六"] #列表
it = lst.__iter__() # iterator 迭代器
print(it) #迭代器操作方法里有 '__iter__'和'__next__'
③遍历迭代器
lst = ["张三", "李四", "王五", "赵六"]
it = lst.__iter__() # iterator 迭代器 for name in it:
print(name)
④从迭代器取数据
###从迭代器获取到数据: __next__()###
print(it.__next__()) #一次取一个数据
print(it.__next__())
print(it.__next__())
数据取完时报错: StopIteration 停止迭代. 没有数据了
3、判断一个变量是否是迭代器,可迭代对象
from collections import Iterable, Iterator
lst = [,,]
print(isinstance(lst, Iterable)) # 判断列表是否是可迭代的
print(isinstance(lst, Iterator)) # 判断列表是否是是迭代器
from collections import Iterable, Iterator
lst = ["张三", "李四", "王五", "赵六"]
it = lst.__iter__()
print(isinstance(it, Iterable)) # 判断列表是否是可迭代的
print(isinstance(it, Iterator)) # 判断列表是否是是迭代器
4、函数传参判断是否可迭代对象
from collections import Iterable,Iterator
def func(n):
if isinstance(n, Iterable): # 判断是否是可迭代对象
for item in n:
print(item)
else:
print(n) func("哈哈哈")
二、生成器
本质上就是一个迭代器,同样节省内存
1、生成器函数
def func():
yield
###生成器函数 -> 执行的时候,不会立即把函数全部执行完,创建一个生成器返回
def func():
print("哈哈哈")
yield #有yield 就是一个生成器函数. 会创建一个生成器对象给你
print("吼吼吼")
yield #可以把一个函数分段执行
print("我是最后执行……")
gen = func() # generator 生成器
print("__iter__" and "__next__" in dir(gen))
需要执行__next__ 才会让生成器执行一次
def func():
print("哈哈哈")
yield # 有yield 就是一个生成器函数. 会创建一个生成器对象给你
print("吼吼吼")
yield # 可以把一个函数分段执行
print("我是最后执行……")
gen = func() # generator 生成器
ret = gen.__next__() # 执行到下一个yield
print(ret)
2、应用
def order():
for i in range():
yield "衣服"+str(i) gen = order() # 定义, 创建一个生成器对象 print( order().__next__()) #执行一次取一件衣服
print( order().__next__()) #执行一次取一件衣服
3、推导式
①列表推导式:[结果 for循环 if语句]
②字典推导式:{key:value for if}
③集合推导式:{key for if}
④生成器表达式:(结果 for if)
三、装饰器
最新文章
- Less配置环境
- Linux学习笔记(17) Shell编程之基础
- UI控件(UIImageView)
- Dynamic CRM 2013学习笔记(九)CrmFetchKit.js介绍:Fetchxml、多表联合查询, 批量更新
- jQuery EasyUI DataGrid API 中文文档
- poj1651 区间dp
- android编程常见问题-No Launcher activity found!
- CPU/ABI显示No system images installed for this target的解决方案
- 承诺c指针 (1)指针是地址
- asp.net core mvc剖析:KestrelServer
- Erlang/OTP设计原则(文档翻译)
- Python----多项式回归
- java学习笔记06-条件语句
- PYQT窗口可视化编程
- 本地搭建json-server
- C#动态设置webServer路径
- Java中的break,continue关于标签的用法(转载)
- linux 搭建testlink的问题总结
- C# 动态生成类 枚举等
- python 全栈开发,Day113(方法和函数的区别,yield,反射)
热门文章
- 微软永恒之蓝ms17010补丁下载-wannacry
- 基于vant实现一个问卷调查
- 深入理解java:2.3.5. 并发编程concurrent包 之容器BlockingQueue(阻塞队列)
- OpenTSDB查询和写入毫秒级数据
- 初步学习jquery学习笔记(一)
- centos7下安装composer和git
- python 序列 转换 各种操作
- Elasticsearch入门教程(三):Elasticsearch索引&;映射
- ArcGIS 在VS2010中 ESRI.ArcGIS.SOESupport.dll 无法正常加载的处理
- python 元类 MetaClass