一、迭代器

      让不同数据类型具有相同的遍历方式: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. LeetCode.937-重新排序日志数组(Reorder Log Files)

    这是悦乐书的第358次更新,第385篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第220题(顺位题号是937).你有一系列日志.每个日志都是以空格分隔的单词串. 每个日 ...

  2. mariadb数据库——关联、视图、事务、索引、外键

    1.关联 1)连接查询(内关联) inner join ... on 两个表连接查询 select * from students inner join classes 查询能够对应班级的学生以及班级 ...

  3. 使用 iview Table 表格组件修改操作的显示隐藏

    使用 iview Table 表格组件修改操作的显示隐藏,如下图 1.如何设置 table 操作按后台传入的状态值去渲染 不同的按钮? 解决方法 我们在vue2中,动态渲染html 使用的是 retu ...

  4. excel常用公式--计算统计类

    Count/Countif/Countifs:条件计数. 注:count只能对数值进行统计 sum/sumif/sumifs:条件求和.   Average/Averageifs:  返回参数的平均值 ...

  5. windows VS2013中使用<pthread.h>

    1. 下载pthreads-w32-2-9-1-realease.zip 地址:http://www.mirrorservice.org/sites/sourceware.org/pub/pthrea ...

  6. Spring(二)--Spring入门案例

    Spring入门案例 1.需要的实体类 2.需要的接口和实现类 3.需要的service和实现类 /** * service层的作用 * 在不改变dao层代码的前提下,增加业务逻辑操作 */ publ ...

  7. linux 内核数据结构之 avl树.

    转载: http://blog.csdn.net/programmingring/article/details/37969745 https://zh.wikipedia.org/wiki/AVL% ...

  8. Javaweb实训-宠物医院-社区宠物医院的页面样式

    /* CSS Document */      /*        对于CSS来说  每一个元素默认的margin和padding就是0px.但是不同的浏览器会有一个默认的浏览器样式修改默认的marg ...

  9. github项目多人进行合作开发,填坑记录

    1.Fork别人的github项目. Fork项目成功后,再进行把项目克隆到你本地.(我的项目已经克隆到本地了,右边是克隆下来的所有文件,除了 node_modules) git命令: git clo ...

  10. centos7配置fastdfs集群(5.09)

    centos7配置fastdfs集群(5.09) 2017年03月10日 23:34:26 带鱼兄 阅读数 1564    版权声明:本文为博主原创文章,转载请注明出处. https://blog.c ...