python迭代器、生成器、装饰器之迭代器
迭代是Python最强大的功能之一,是访问集合元素的一种方式。
一般分为可迭代对象,迭代器,可迭代对象不一定是迭代器,但迭代器一定是可迭代对象
1、可以直接作用于for循环的数据类型
第一类:集合数据类型,如list、tuple、dict、set、str等;
第二类:generator,包括集合定义generator和带yield的generator(也就是generator function)。
以上这些可以直接作用于for循环的对象统称为可迭代对象:Iterable。
可以使用isinstance()判断一个对象是否是Iterable对象:可迭代代对象一般内置__iter__()方法,或者是可以利用iter()函数转变为Iterator的对象,iter()为内置函数,作用是将可迭代对象转变为迭代器,而__iter__()继承于iter()
def iter(source, sentinel=None): # known special case of iter
"""
iter(iterable) -> iterator
iter(callable, sentinel) -> iterator
Get an iterator from an object. In the first form, the argument must
supply its own iterator, or be a sequence.
In the second form, the callable is called until it returns the sentinel.
"""
pass
def __iter__(self, *args, **kwargs): # real signature unknown
""" Implement iter(self). """
pass
from collections import Iterable
print(isinstance([], Iterable)) # True
print(isinstance({}, Iterable)) # True
print(isinstance((), Iterable)) # True
print(isinstance('abc', Iterable)) # True
print(isinstance(123, Iterable)) # Flase
2、迭代器(Iterator)
可以使用isinstace()判断一个对象是否是Iterator对象:
当一个可迭代对象调用__iter__()或者iter()后得到的就是一个迭代器对象,而迭代器对象可以通过__next__()或者next()方法进行取值,取值特点是,一次取出一个值,不能后退,当值取完时会抛出StopIteration异常
# 可迭代对象执行obj.__iter__()得到的结果就是迭代器对象
# 而迭代器对象指的是即内置有__iter__又内置有__next__方法的对象
# 以使用isinstance()判断一个对象是否是Iterator对象:
print(isinstance((x for x in range(10)), Iterator)) #True
print(isinstance([], Iterator)) # Flase
print(isinstance([].__iter__(), Iterator)) # True
print(isinstance({}, Iterator)) # Flase
print(isinstance(iter({}), Iterator)) # True
print(isinstance((), Iterator)) # Flase
print(isinstance('abc', Iterator)) # Flase
迭代器通过__next__()或者next()取值
l = [1, 2, 3]
l = l.__iter__()
print(l.__next__())
print(next(l))
迭代器的优缺点:
# 优点:
# - 提供一种统一的、不依赖于索引的迭代方式
# - 惰性计算,节省内存
# 缺点:
# - 无法获取长度(只有在next完毕才知道到底有几个值)
# - 一次性的,只能往后走,不能往前退
python迭代器、生成器、装饰器之迭代器的更多相关文章
- Python基础-迭代器&生成器&装饰器
本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 1.列表生成式,迭代器&生成器 列表生成式 我现在有个需求,看 ...
- Python 迭代器&生成器,装饰器,递归,算法基础:二分查找、二维数组转换,正则表达式,作业:计算器开发
本节大纲 迭代器&生成器 装饰器 基本装饰器 多参数装饰器 递归 算法基础:二分查找.二维数组转换 正则表达式 常用模块学习 作业:计算器开发 实现加减乘除及拓号优先级解析 用户输入 1 - ...
- 迭代器/生成器/装饰器 /Json & pickle 数据序列化
本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 1.列表生成式,迭代器&生成器 列表生成式 孩子,我现在有个需 ...
- 4.python迭代器生成器装饰器
容器(container) 容器是一种把多个元素组织在一起的数据结构,容器中的元素可以逐个地迭代获取,可以用in, not in关键字判断元素是否包含在容器中.通常这类数据结构把所有的元素存储在内存中 ...
- Python 全栈开发五 迭代器 生成器 装饰器
一.迭代器 迭代协议:对象必须提供一个next方法,执行该方法后会返回迭代的下一项或者抛出Stopiteration异常,终止迭代.切只能往前,不能倒退. 可迭代对象:遵循迭代写一点对象就是可迭代对象 ...
- python中的迭代器 生成器 装饰器
什么迭代器呢?它是一个带状态的对象,他能在你调用next()方法的时候返回容器中的下一个值,任何实现了__iter__和__next__()(python2中实现next())方法的对象都是迭代器,_ ...
- Python迭代器&生成器&装饰器
1. 迭代器 1.1 可迭代对象(Iterator) 迭代器协议:某对象必须提供一个__next__()方法,执行方法要么返回迭代中的下一项,要么引起一个Stopiteration异常,以终止迭代(只 ...
- Python之生成器(generator)和迭代器(Iterator)
generator 生成器generator:一边循环一边计算的机制. 生成器是一个特殊的程序,可以被用于控制循环的迭代行为.python中的生成器是迭代器的一种,使用yield返回值函数,每次调用y ...
- python学习笔记(5)--迭代器,生成器,装饰器,常用模块,序列化
生成器 在Python中,一边循环一边计算的机制,称为生成器:generator. 如: >>> g = (x * x for xin range(10)) >>> ...
随机推荐
- Vue之nextTick()
我们有时候操作 DOM,是想在 data 数据变更的时候进行操作. 那么,我们应该怎么做呢? index.html <!DOCTYPE html> <html lang=" ...
- 2019-2020-1 20199312《Linux内核原理与分析》第三周作业
计算机的三大法宝:程序存储计算机.函数调用.中断 堆栈的作用:记录函数调用框架.传递函数参数.保存返回值地址.提供函数内部局部便量的存储空间. 堆栈相关的寄存器 ESP:堆栈指针,指向堆栈栈顶 EBP ...
- from module_name import var
######## a.py ######## aa = "Hello World" ####### b.py ######## from a import aa print aa ...
- Vue 获取页面后跳转其他页面
<template> <div> <img :src="detail.img" /> <h1>{{ detail.title }}& ...
- 34 | 到底可不可以使用join?
在实际生产中,关于 join 语句使用的问题,一般会集中在以下两类: 我们 DBA 不让使用 join,使用 join 有什么问题呢? 如果有两个大小不同的表做 join,应该用哪个表做驱动表呢? 今 ...
- 068_不登陆虚拟机,修改虚拟机网卡 IP 地址
#!/bin/bash #该脚本使用 guestmount 工具,Centos7.2 中安装 libguestfs-tools-c 可以获得 guestmount 工具#脚本在不登陆虚拟机的情况下,修 ...
- Selenium+Python附件上传
在自动化测试过程中,我们会经常遇到附件上传,而附件上传主要分为两种:input型.非input型,我们本章就两种不同类型的上传方式讲解: (1)input型 <input id="tx ...
- Tkinter 之主窗口参数
一.常用参数 语法 作用 window= tk.TK() 创建窗口 window['height'] = 300 设置高 window['width'] = 500 设置宽 window.title( ...
- meshing-做类似ICEM的Y型剖分
原视频下载地址:https://yunpan.cn/cqjeKkrhwwN3x 访问密码 c724
- FLUENT多相流问题后处理中如何显示其中一相的分布【转载】
转载自:http://blog.sina.com.cn/s/blog_6a5314cf0100tnsz.html 多相流问题后处理中很容易显示相界面在某些面上的形态,如图1所示.其实利用ISO-Cli ...