2018.8.10 python中的迭代器

主要内容:

1、函数名的使用

2、闭包

3、迭代器

一、函数名的运用

函数名是一个变量,但他是一个特殊的变量,与括号配合可执行函数的变量。

1、函数名的内存地址

def func():
    print(‘呵呵‘)
print(func)
#结果
# <function func at 0x000000000215D7B8>

2、函数名可以赋值给其它变量

def func():
    print(‘呵呵‘)
print(func)
a = func
a()

3、函数名可以当做容器类的元素

 def func1():
     print("我是1")
 def func2():
     print("我是2")
 def func3():
     print("我是3")

 lst = [func1, func2, func3]
 for el in lst:
     el()

4、函数名可以当做函数的参数

def func():
    print(‘吃了么‘)
def func2(fn):
    print(‘我是func2‘)
    fn()
    print(‘我是func2‘)
func2(func)

5、函数名可以作为函数的返回值

def func_1():
    print(‘这里是函数1‘)
    def func_2():
        print(‘这里是函数2‘)
    print(‘这里是函数1‘)
    return func_2
fn = func_1()
fn()

二、闭包

闭包就是内层函数对外层函数(非全局)的变量的引用。可以使用__closure__来检测函数是否闭包,返回cell就是闭包,返回None就不是闭包。

def func1():
    name = ‘alex‘
    def func2():
        print(name)
    func2()
    print(func2.__closure__)
func1()

在函数外面调用内部函数:

如果是多层嵌套,需要一层一层的往外返回:

闭包的好处:

1、保护你的变量不受外部影响

2、可以让变量常驻内存

三、迭代器

查看一个对象是否可迭代方法:

野路子:

l = [1,2,3,4]
it = l.__iter__()
print(‘__iter__‘in dir(it))
print(‘__next__‘in dir(it))

官方方法:

使用while循环+迭代器来模拟for循环:

lst = [‘哈哈‘,‘嘻嘻‘,‘啦啦‘,‘吼吼‘]
it = lst.__iter__()
while 1:
    try:
        el = it.__next__()
        print(el)
    except StopIteration:
        break

总结:

Iterable:可迭代对象,内部包含__iter__()函数

Iterator:迭代器,内部包含__iter__()同时包含__next__()。

迭代器的特点:

1、节省内存

2、惰性机制

3、不能反复,只能向下执行

原文地址:https://www.cnblogs.com/fengchong/p/9457406.html

时间: 2024-08-07 19:22:05

2018.8.10 python中的迭代器的相关文章

Python中的迭代器和生成器,以及装饰

一.迭代器 它是一个带状态的对象,他能在你调用next()方法的时候返回容器中的下一个值,任何实现了__iter__和__next__()方法的对象都是迭代器,__iter__返回迭代器自身,__next__返回容器中的下一个值,如果容器中没有更多元素了,则抛出StopIteration异常,至于它们到底是如何实现的这并不重要. 迭代器是访问集合内元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素都被访问一遍后结束. (1)迭代器的四大特性 1.跌代集合,字符串,有序依次---

Python中生成器,迭代器,以及一些常用的内置函数.

知识点总结 生成器 生成器的本质就是迭代器. 迭代器:Python中提供的已经写好的工具或者通过数据转化得来的. 生成器:需要我们自己用Python代码构建的 创建生成器的三种方法: 通过生成器函数 通过生成器推导式 python内置函数或者模块提供 生成器函数 yield:一个yield对应一个next,next超过yield数量,就会报错,与迭代器一样. yield与return的区别: return一般在函数中只设置一个,他的作用是终止函数,并传给函数的执行者返回值 yield在生成器中可

10.python中的序列

本来说完字符串.数字.布尔值之后,应该要继续讲元祖.列表之类的.但是元祖和列表都属于序列,所以有必要先讲讲python的序列是什么. 首先,序列是是Python中最基本的数据结构.序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推.每个索引对应一个元素. Python包含 6 中内建的序列,包括列表.元组.字符串.Unicode字符串.buffer对象和xrange对象. 对于序列,都可以使用以下操作: 1.索引 2.切片 3.加 4.乘 5.成员检查

python中的迭代器和生成器

迭代:就是重复做一些事情很多次,使用__iter__方法,迭代器就是具有next方法的对象 内建函数iter可以从可迭代的对象中获得迭代器 从迭代器得到序列: 在if self.value>10中只能使用引发异常,不能使用break,不然有会报语法错误 从迭代器中得到序列我的理解为就是在满足条件之前就是将重复做过的值列出来. 生成器: 先展开嵌套列表中的子列表,然后再展开子列表中的元素. 任何包含yield语句的函数都称为生成器 处理多层未知的嵌套的情况:

Python中的迭代器漫谈

转自:http://www.jb51.net/article/60706.htm 熟悉Python的都知道,它没有类似其它语言中的for循环, 只能通过for in的方式进行循环遍历.最典型的应用就是通过range函数产生一个列表,然后用for in进行操作,如下: #!/usr/bin/env python for i in range(10):     print i 代码的意义很好理解,range会产生一个列表,用for in最这个列表进行遍历,就有和类似for(i = 0;i<n;i++

Python中的迭代器、生成器

什么是迭代器 迭代器即迭代的工具 迭代是一个重复的过程,每一次重复即一次迭代,且每次迭代的结果都是下一次迭代的初始值 while True: #这里只是单纯的重复,不是迭代 print('-----') l = [1,2,3] count = 0 while count <= len(l): #这里是迭代 print(l[count]) count += 1 迭代器协议 1.迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异

python中的迭代器

1.可以直接作用于for循环的数据类型 第一类:集合数据类型,如list.tuple.dict.set.str等: 第二类:generator,包括集合定义generator和带yield的generator(也就是generator function). 以上这些可以直接作用于for循环的对象统称为可迭代对象:Iterable. 可以使用isinstance()判断一个对象是否是Iterable对象: 1 >>> from collections import Iterable 2 &

关于Python中的yield

关于Python中的yield http://www.cnblogs.com/tqsummer/archive/2010/12/27/1917927.html http://www.ibm.com/developerworks/cn/opensource/os-cn-python-yield/ 一.迭代器(iterator) 在Python中,for循环可以用于Python中的任何类型,包括列表.元祖等等,实际上,for循环可用于任何“可迭代对象”,这其实就是迭代器 迭代器是一个实现了迭代器协议

python中yield用法

在介绍yield前有必要先说明下Python中的迭代器(iterator)和生成器(constructor). 一.迭代器(iterator) 在Python中,for循环可以用于Python中的任何类型,包括列表.元祖等等,实际上,for循环可用于任何“可迭代对象”,这其实就是迭代器 迭代器是一个实现了迭代器协议的对象,Python中的迭代器协议就是有next方法的对象会前进到下一结果,而在一系列结果的末尾是,则会引发 StopIteration.任何这类的对象在Python中都可以用for循