生成器

生成器:只要函数体内出现yield关键字,那么再执行函数就不会执行函数代码,会得到一个结果,该结果就是生成器
 
生成器就是迭代器
 
yield的功能
1、yield为我们提供了一种自定义迭代器对象的方法
2、yield于return的区别:
1)yield可以返回多个值 
2)函数暂停和再继续是由yield帮我们保存的

def test():
print('=== >1')
yield 1
print('=== >2')
yield 2
print('===>3')
yield 3
g = test() #print里的值由yield保存
for i in g:
print(i)
      
 
def test1():
for i in range(10):
yield i
g = test1()
def test2(g): #调用生成器
for i in g:
print(i)
test2(g)
 

#监控日志

import  time
def tail(filepath): #定义一个查看文件的函数
with open(filepath,'rb') as f: #以二进制的形式打开filepath
f.seek(0,2)
while True: #循环监控日志
data = f.readline() #读取文件末尾
if data: #加入有数据就用yield返回
yield data
else: #否则睡眠0.05秒
time.sleep(0.05)
def grep(file,k): #定义过滤关键字函数
for i in tail(file): #循环生成器中的数据
if k in i.decode('utf-8'): #因为是用二进制服务方式,所有需要解码显示
print(i.decode('utf-8')) #
grep('a.txt',404) #监控a.txt最新日志,并过虑404的错误代码
 

yield赋值

def test(name):
while True:
foot = yield
print('%s正在吃%s' %(name,foot)) e = test('1807')
next(e) #初始化 e._next_()
e.send(None) #初始化
e.send('choudoufu') #发送值传给foot
e.send('冰激凌')
 
 

递归调用:在调用一个函数的过程中,直接或者间接又调用了函数本身,称之为递归调用

递归必备的2个阶段:
1递归
 2 回溯
 
 age(5) = age(4) + 2
age(4) = age(3) + 2
 age(3) = age(2) + 2
 age(2) = age(1) + 2
 age(1) = 0
 
def love(n):
    if n == 1:
        return 0
    return love(n-1) + 2
res = love(5)
print(res)

python生成器 递归的更多相关文章

  1. python生成器原理剖析

    python生成器原理剖析 函数的调用满足"后进先出"的原则,也就是说,最后被调用的函数应该第一个返回,函数的递归调用就是一个经典的例子.显然,内存中以"后进先出&quo ...

  2. python——生成器

    python——生成器 通过列表生成式,我们可以直接创建一个列表.但是,受到内存限制,列表容量肯定是有限的.而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个 ...

  3. 关于python最大递归深度 - 998

    今天LeetCode的时候暴力求解233 问题: 给定一个整数 n,计算所有小于等于 n 的非负数中数字1出现的个数. 例如: 给定 n = 13, 返回 6,因为数字1出现在下数中出现:1,10,1 ...

  4. Python的递归

    递归 是指函数/过程/子程序在运行过程序中直接或间接调用自身而产生的重入现象.在计算机编程里,递归指的是一个过程:函数不断引用自身,直到引用的对象已知.使用递归解决问题,思路清晰,代码少.但是在主流高 ...

  5. Python生成器-博文读后感

    Windows 10家庭中文版,Python 3.6.4, 上午看过了一篇讲Python生成器的博文: 提高你的Python: 解释‘yield’和‘Generators(生成器)’(英文原文) 这篇 ...

  6. Python的递归深度

    RuntimeError: maximum recursion depth exceeded while calling a Python object 大意是调用 Python 对象时超出最大深度限 ...

  7. 小学生都能学会的python(生成器)

    小学生都能学会的python(生成器) 1. 生成器 生成器的本质就是迭代器. 生成器由生成器函数来创建或者通过生成器表达式来创建 # def func(): # lst = [] # for i i ...

  8. Python 生成器 (generator) & 迭代器 (iterator)

    python 生成器 & 迭代器 生成器 (generator) 列表生成式 列表生成式用来生成一个列表,虽然写的是表达式,但是储存的是计算出来的结果,因此生成的列表受到内存大小的限制 示例: ...

  9. python生成器学习

    python生成器学习: 案例分析一: def demo(): for i in range(4): yield i g=demo() g1=(i for i in g) #(i for i in d ...

随机推荐

  1. Core3.0使用Caching.Memory

    前言 参考链接: 使用缓存:https://www.cnblogs.com/gygg/p/11275417.html 过期时间:https://www.cnblogs.com/maijin/p/704 ...

  2. Core3.0路由配置

    前言 MSDN文档,对ASP.NETCore中的路由完整的介绍 https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/routing?vi ...

  3. matplotlib学习日记(六)-箱线图

    (一)箱线图---由一个箱体和一对箱须组成,箱体是由第一个四分位数,中位数和第三四分位数组成,箱须末端之外的数值是离散群,主要应用在一系列测量和观测数据的比较场景 import matplotlib ...

  4. MongoDB导入bson文件(元数据),mongorestore命令行方式导入

    MongoDB导入bson文件(元数据),mongorestore命令行方式导入 不推荐使用MongoDB Compass等图形化数据库管理软件,例如MongoDB Compass只能导入json和c ...

  5. DX关联VS

    // Windows API: #include <windows.h>   // C 运行时头文件,测试可能会用到 #include <stdlib.h>  //standa ...

  6. java instanceof 判断是否是String

    if(formbean.getBean().get("RZZGMCM") instanceof String){ formbean.getBean().put("RZZG ...

  7. 基于ESP32的智能家居管理系统的设计与实现

    基于ESP32的智能家居管理系统的设计与实现 ESP32的智能家居管理系统访问链接: https://www.cnblogs.com/easyidea/p/13101165.html 一.需求分析 1 ...

  8. JS 获取(期号、当前日期、本周第一天、最后一天及当前月第一、最后天函数)    

    JS 获取(期号.当前日期.本周第一天.最后一天及当前月第一.最后天函数 /** 2 * 获取当前月期号 3 * 返回格式: YYYY-mm 4 * / 5 function getCurrentMo ...

  9. python-scrapy爬取某招聘网站(二)

    首先要准备python3+scrapy+pycharm 一.首先让我们了解一下网站 拉勾网https://www.lagou.com/ 和Boss直聘类似的网址设计方式,与智联招聘不同,它采用普通的页 ...

  10. 在 CAP 中使用 AOP ( Castle.DynamicProxy )

    简介 本篇文章主要介绍如何在 CAP 中集成使用 Castle.DynamicProxy,Castle DynamicProxy 是一个用于在运行时动态生成轻量级.NET代理的库.代理对象允许在不修改 ...