Python___生成器

生成器:

  在函数内部包含yield关键字,那么该函数执行的结果就是生成器(生成器就是迭代器)

def func():
    print(‘first‘)
    yield 1111
    print(‘second‘)
    yield 2222
g = func()
print(next(g))
print(next(g))
from collections import Iterator
print(isinstance(g,Iterator))#判断g是否是生成器

yield的功能:1.把函数的执行结果做成迭代器(帮函数封装好__iter__,__next__方法)

      2.函数暂停与再继续运行的状态是由yield保存的

def func(n):
    while True:
        yield n
        n += 1
g = func(0)
print(next(g))

def my_range(start,stop):
    while True:
        if start == stop:
            raise StopIteration
        else:
            yield start
            start += 1
g = my_range(1,3)
for i in g:
    print(i)

yield与return的比较?

  相同点:都有返回值的功能

  不同点:return只能返回一次值,而yield可以返回多次值

import time
def tail(filepath):
    with open(filepath,‘r‘) as f:
        f.seek(0,2)
        while True:
            line = f.readline()
            if line:
                yield line
            else:
                time.sleep(0.2)
lines = tail(‘access.log‘)

#管道是传递不同介质之间数据的问题
def grep(pattern,lines):
    for line in lines:
        if pattern in lines:
            print(line,end = ‘‘)
grep(‘error‘,lines)
时间: 2024-10-12 13:19:41

Python___生成器的相关文章

Day4 - 迭代器&生成器、装饰器、Json & pickle 数据序列化、软件目录结构规范

---恢复内容开始--- 本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 1.列表生成式,迭代器&生成器 列表生成式 需求:列表a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],要求把列表里的每个值加1 1 a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 2 b = [] 3 for i in a: 4 b.append(i+1) 5 a = b 6 print(a) 普通青

装饰器、生成器、迭代器

装饰器的前奏 装饰器:本质是函数 功能:就是装饰成其他函数  就是为其他函数添加附加功能的 高阶函数+嵌套函数=装饰器 原则:1.不能修改被装饰的函数的源代码 2.不能修改被装饰的函数的调用方式 总结一句话:装饰器对被装饰的函数是完全透明的 实现装饰器的只是储备: 1.函数名即"变量"   将函数体赋值给变量   和内存回收机制一样 2.高阶函数 2.1.把函数名作为实参传递给形参(可返回被修饰函数的地址)(不修改源代码的情况可添加新的功能) 2.2返回值中包含函数地址(不修改函数的调

Python面试题之生成器/迭代器

1.为什么要有生成器? 通过列表生成式,我们可以直接创建一个列表.但是,受到内存限制,列表容量肯定是有限的.而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了.所以,如果列表元素可以按照某种算法推算出来,那我们是否可以... 在循环的过程中不断推算出后续的元素,这样就不必创建完整的list,从而节省大量的空间.在Python中,这种一边循环一边计算的机制,称为生成器:generator. 第一种方法很简单,只

4.利用python生成器实现简单的“生产者消费者”模型

假如说,没有生成器这种对象,那么如何实现这种简单的"生产者消费者"模型呢? import time def producer(): pro_list = [] for i in range(10000): print "包子%s制作ing" %(i) time.sleep(0.5) pro_list.append("包子%s" %i) return pro_list def consumer(pro_list): for index,stuffe

Python之路22-列表生成式和函数生成器

#列表生成式 list1 = [i*2 for i in range(1,11)] #生成器,在调用时才会生成相应的数据 list = (x*2 for x in range(1,1000000)) #list.__next__() #函数生成器 def fib(max):     n,a,b = 0,0,1     while n < max:         #print (b)         yield b         a,b = b,a+b         n = n + 1   

Python高级特性:迭代器和生成器 -转

在Python中,很多对象都是可以通过for语句来直接遍历的,例如list.string.dict等等,这些对象都可以被称为可迭代对象.至于说哪些对象是可以被迭代访问的,就要了解一下迭代器相关的知识了. 迭代器 迭代器对象要求支持迭代器协议的对象,在Python中,支持迭代器协议就是实现对象的__iter__()和next()方法.其中__iter__()方法返回迭代器对象本身:next()方法返回容器的下一个元素,在结尾时引发StopIteration异常. __iter__()和next()

yield生成器及字符串的格式化

一.生成器 1 def ran(): 2 print('Hello world') 3 yield 'F1' 4 5 print('Hey there!') 6 yield 'F2' 7 8 print('goodbye') 9 yield 'F3' 10 11 ret = ran() # ran()称为生成器函数,ret才是生成器,仅仅具有一种生成能力,函数内部要有关键字yield 12 print(ret) 13 14 res = ret.__next__() #对生成器进行循环操作,遇到y

python-学习笔记之-Day5 双层装饰器 字符串格式化 python模块 递归 生成器 迭代器 序列化

1.双层装饰器 #!/usr/bin/env python # -*- coding: utf-8 -*- # author:zml LOGIN_INFO = False IS_ADMIN = False   def check_log(func): def inner(): res = func() if LOGIN_INFO: print('验证成功!') return res else: print('验证失败!') return inner   def check_admin(func)

彩票生成器--36选7(不重复)

import java.util.Random; public class suijishu { /** * @param args */ public static void main(String[] args) { // TODO 自动生成的方法存根 //36选7,不重复 //第一步,初始化 定义数组,建随机数组生成器 int []caiPiao=new int[7]; Random ran = new Random(); //第二步,生成 //随机生成7个数 for(int i=0;i<