一、迭代器

      让不同数据类型具有相同的遍历方式: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基础(四)的更多相关文章

  1. Python 基础 四 面向对象杂谈

    Python 基础  四  面向对象杂谈 一.isinstance(obj,cls) 与issubcalss(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls ...

  2. Python基础(四) 基础拾遗、数据类型进阶

    一.基础拾遗 (一).变量作用域 外层变量,可以被内层变量直接调用:内层变量,无法被外层变量使用.这种说法在其它语言中适用,在python中除了栈以外,正常的变量作用域,只要执行声明并在内存中存在,该 ...

  3. 【笔记】Python基础四:迭代器和生成器

    一,迭代器协议和for循环工作机制 (一),迭代器协议 1,迭代器协议:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个stopiteration异常,以终止迭代(只能往 ...

  4. python 基础(四) 函数

    函数 一.什么是函数? 函数是可以实现一些特定功能的 小方法 或者是小程序 优点: 提高 了代码的后期维护 增加了代码的重复使用率 减少了代码量 提高了代码可读性 二.函数的定义 使用 def关键+函 ...

  5. python基础四(json\os\sys\random\string模块、文件、函数)

    一.文件的修改 文件修改的两种思路: 1.把文件内容拿出来,做修改后,清空原来文件的内容,然后把修改过的文件内容重新写进去. 步骤: 1.打开文件:f=open('file','a+')  #必须用a ...

  6. Python基础四

    1. 集合 主要作用: 去重 关系测试, 交集\差集\并集\反向(对称)差集   2. 元组 只读列表,只有count, index 2 个方法 作用:如果一些数据不想被人修改, 可以存成元组,比如身 ...

  7. python基础(四)运算

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Python的运算符和其他语言类似 (我们暂时只了解这些运算符的基本用法,方便我们 ...

  8. python基础四-文件读取

    文件读取 open()接受一个参数:要打开的文件名, 并返回一个表示文件的对象, 存储到后面的变量中 python会在当前执行文件所在目录查找 可以使用绝对路径, 在linux中使用'/', 在win ...

  9. Python基础(四) socket简单通讯

    socket:我们通常听过的套接字: 服务端: 1.创建socket对象 2.bing 绑定ip及端口 3.对该端口进行监听 4.消息阻塞(等待客户端消息) 客户端: 1.创建socket对象 2.连 ...

  10. python基础(四)字符串处理

    字符串处理 msg = 'my name is sylar' capitalize方法,将字符串的首字母大写 print 'capitalize方法:', msg.capitalize() swapc ...

随机推荐

  1. [BeiJingWc2008]Gate Of Babylon

    <基尔伽美修>是人类历史上第一部英雄史诗,两河流域最杰出的文学作品之一.作品讲述了基尔伽美修一生的传奇故事.在动画Fate/staynight中,基尔伽美修与亚瑟王等传说中的英雄人物一起出 ...

  2. 【LeetCode】123、买卖股票的最佳时机 III

    Best Time to Buy and Sell Stock III 题目等级:Hard 题目描述: Say you have an array for which the ith element ...

  3. USACO1.6 Healthy Holsteins【dfs/bfs 爆搜】

    题目传送门 饲料种数只有15 枚举每种选或不选一共也就只有$2^{15}=32768$ 爆搜可过觉得bfs要快一些? 但是dfs更方便处理字典序 只需要顺序遍历并且先搞选它的情况就可以了 而且在这种规 ...

  4. HDU 1257 最少拦截系统 最长递增子序列

    HDU 1257 最少拦截系统 最长递增子序列 题意 这个题的意思是说给你\(n\)个数,让你找到他最长的并且递增的子序列\((LIS)\).这里和最长公共子序列一样\((LCS)\)一样,子序列只要 ...

  5. vim编辑Dockerfile时语法高亮

    参考Dockerfile构建容器---语法高亮 三个文件扔进相关的目录即可 1. /usr/share/vim/vimfiles/doc/dockerfile.txt *dockerfile.txt* ...

  6. javaweb:关于HttpServletRequest介绍 (转)

    出处:https://www.cnblogs.com/xdp-gacl/p/3798347.html 一.HttpServletRequest介绍 HttpServletRequest对象代表客户端的 ...

  7. webpack入门学习手记(一)

    本人微信公众号:前端修炼之路,欢迎关注. 之前用过gulp.grunt,但是一直没有学习过webpack.这两天刚好有时间,学习了下webpack.webpack要想深入研究,配置的东西比较多,网上的 ...

  8. day 17 模块

    模块是什么? 抖音: 20万行代码全部放在一个py文件中? 为什么不行? 1. 代码太多,读取代码耗时太长. 代码不容易维护. 所以我们怎么样? 一个py文件拆分100文件,100个py文件又有相似相 ...

  9. __main__ 变量

    1. 摘要 通俗的理解__name__ == '__main__':假如你叫小明.py,在朋友眼中,你是小明(__name__ == '小明'):在你自己眼中,你是你自己(__name__ == '_ ...

  10. vim 文本编辑器

    vim 文件名:命令模式 i 编辑模式 :输入模式 vim +n 文件名:打开文件,将光标置于第N行首部 命令模式进入输入模式进行编辑: i 当前光标位置插入文本 I 在当前行行首插入文本 o 在光标 ...