Python基础(四)
一、迭代器
让不同数据类型具有相同的遍历方式: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)
三、装饰器
Python基础(四)的更多相关文章
- Python 基础 四 面向对象杂谈
Python 基础 四 面向对象杂谈 一.isinstance(obj,cls) 与issubcalss(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls ...
- Python基础(四) 基础拾遗、数据类型进阶
一.基础拾遗 (一).变量作用域 外层变量,可以被内层变量直接调用:内层变量,无法被外层变量使用.这种说法在其它语言中适用,在python中除了栈以外,正常的变量作用域,只要执行声明并在内存中存在,该 ...
- 【笔记】Python基础四:迭代器和生成器
一,迭代器协议和for循环工作机制 (一),迭代器协议 1,迭代器协议:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个stopiteration异常,以终止迭代(只能往 ...
- python 基础(四) 函数
函数 一.什么是函数? 函数是可以实现一些特定功能的 小方法 或者是小程序 优点: 提高 了代码的后期维护 增加了代码的重复使用率 减少了代码量 提高了代码可读性 二.函数的定义 使用 def关键+函 ...
- python基础四(json\os\sys\random\string模块、文件、函数)
一.文件的修改 文件修改的两种思路: 1.把文件内容拿出来,做修改后,清空原来文件的内容,然后把修改过的文件内容重新写进去. 步骤: 1.打开文件:f=open('file','a+') #必须用a ...
- Python基础四
1. 集合 主要作用: 去重 关系测试, 交集\差集\并集\反向(对称)差集 2. 元组 只读列表,只有count, index 2 个方法 作用:如果一些数据不想被人修改, 可以存成元组,比如身 ...
- python基础(四)运算
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Python的运算符和其他语言类似 (我们暂时只了解这些运算符的基本用法,方便我们 ...
- python基础四-文件读取
文件读取 open()接受一个参数:要打开的文件名, 并返回一个表示文件的对象, 存储到后面的变量中 python会在当前执行文件所在目录查找 可以使用绝对路径, 在linux中使用'/', 在win ...
- Python基础(四) socket简单通讯
socket:我们通常听过的套接字: 服务端: 1.创建socket对象 2.bing 绑定ip及端口 3.对该端口进行监听 4.消息阻塞(等待客户端消息) 客户端: 1.创建socket对象 2.连 ...
- python基础(四)字符串处理
字符串处理 msg = 'my name is sylar' capitalize方法,将字符串的首字母大写 print 'capitalize方法:', msg.capitalize() swapc ...
随机推荐
- [BeiJingWc2008]Gate Of Babylon
<基尔伽美修>是人类历史上第一部英雄史诗,两河流域最杰出的文学作品之一.作品讲述了基尔伽美修一生的传奇故事.在动画Fate/staynight中,基尔伽美修与亚瑟王等传说中的英雄人物一起出 ...
- 【LeetCode】123、买卖股票的最佳时机 III
Best Time to Buy and Sell Stock III 题目等级:Hard 题目描述: Say you have an array for which the ith element ...
- USACO1.6 Healthy Holsteins【dfs/bfs 爆搜】
题目传送门 饲料种数只有15 枚举每种选或不选一共也就只有$2^{15}=32768$ 爆搜可过觉得bfs要快一些? 但是dfs更方便处理字典序 只需要顺序遍历并且先搞选它的情况就可以了 而且在这种规 ...
- HDU 1257 最少拦截系统 最长递增子序列
HDU 1257 最少拦截系统 最长递增子序列 题意 这个题的意思是说给你\(n\)个数,让你找到他最长的并且递增的子序列\((LIS)\).这里和最长公共子序列一样\((LCS)\)一样,子序列只要 ...
- vim编辑Dockerfile时语法高亮
参考Dockerfile构建容器---语法高亮 三个文件扔进相关的目录即可 1. /usr/share/vim/vimfiles/doc/dockerfile.txt *dockerfile.txt* ...
- javaweb:关于HttpServletRequest介绍 (转)
出处:https://www.cnblogs.com/xdp-gacl/p/3798347.html 一.HttpServletRequest介绍 HttpServletRequest对象代表客户端的 ...
- webpack入门学习手记(一)
本人微信公众号:前端修炼之路,欢迎关注. 之前用过gulp.grunt,但是一直没有学习过webpack.这两天刚好有时间,学习了下webpack.webpack要想深入研究,配置的东西比较多,网上的 ...
- day 17 模块
模块是什么? 抖音: 20万行代码全部放在一个py文件中? 为什么不行? 1. 代码太多,读取代码耗时太长. 代码不容易维护. 所以我们怎么样? 一个py文件拆分100文件,100个py文件又有相似相 ...
- __main__ 变量
1. 摘要 通俗的理解__name__ == '__main__':假如你叫小明.py,在朋友眼中,你是小明(__name__ == '小明'):在你自己眼中,你是你自己(__name__ == '_ ...
- vim 文本编辑器
vim 文件名:命令模式 i 编辑模式 :输入模式 vim +n 文件名:打开文件,将光标置于第N行首部 命令模式进入输入模式进行编辑: i 当前光标位置插入文本 I 在当前行行首插入文本 o 在光标 ...