python自动化 协程函数、二分查找、模块搜索
协程函数
- yiled:
- 把函数的执行结果封装好__iter__和__next__得到一个迭代器
- 与return功能类似,都可以返回值,但是return只能返回一次只
- def fun(count):
- print('www')
- while True:
- yield count
- count+=1
- g=fun(10)
- print(next(g))
- print(next(g))
- yield的表达式形式的应用
- def www(name):
- print('%s start to eat' %name)
- while True:
- food=yield
- print('%s eat %s' %(name,food))
- g=www('zbb')
- # print(next(g))
- # print(next(g))
- #第一阶段:初始化
- next(g)#等同于 g.send(None)
- print('----------------->>')
- #第二阶段:给yield传值
- g.send('肉')
- print('-====================>')
- print(g.send('肉'))
面向过程编程
- #面向过程:核心是过程二字,过程即解决问题的步骤,基于面向过程去设计程序就像是在设计
- # 一条工业流水线,是一种机械式的思维方式
- #优点:程序结构清晰,可以把复杂的问题简单化,流程化
- #缺点:可扩展性差,一条流线只是用来解决一个问题
- #应用场景:linux内核,git,httpd,shell脚本
- #grep -rl 'error' /dir/
- import os
- def init(func):
- def wrapper(*args,**kwargs):
- g=func(*args,**kwargs)
- next(g)
- return g
- return wrapper
- #第一阶段:找到所有文件的绝对路径
- @init
- def search(target):
- while True:
- filepath=yield
- g=os.walk(filepath)
- for pardir,_,files in g:
- for file in files:
- abspath=r'%s\%s' %(pardir,file)
- target.send(abspath)
- # search(r'C:\Users\Administrator\PycharmProjects\python18期周末班\day5\aaa')
- # g=search()
- # g.send(r'C:\Python27')
- #第二阶段:打开文件
- @init
- def opener(target):
- while True:
- abspath=yield
- with open(abspath,'rb') as f:
- target.send((abspath,f))
- #第三阶段:循环读出每一行内容
- @init
- def cat(target):
- while True:
- abspath,f=yield #(abspath,f)
- for line in f:
- res=target.send((abspath,line))
- if res:break
- #第四阶段:过滤
- @init
- def grep(pattern,target):
- tag=False
- while True:
- abspath,line=yield tag
- tag=False
- if pattern in line:
- target.send(abspath)
- tag=True
- #第五阶段:打印该行属于的文件名
- @init
- def printer():
- while True:
- abspath=yield
- print(abspath)
- g = search(opener(cat(grep('os'.encode('utf-8'), printer()))))
- # g.send(r'C:\Users\Administrator\PycharmProjects\python18期周末班\day5\aaa')
- g.send(r'C:\Users\Administrator\PycharmProjects\python18期周末班')
- #a1.txt,a2.txt,b1.txt
递归
- #递归分为两个阶段
- #递推
- #回溯
- #递归的特点
- #递归的效率低,需要在进入递归是保留当前的状态,
- #解决方法是尾递归,在函数的最后一步(不是最后一行)调用自己
- #但是py没有尾递归,所以对递归层做了限制
- #必须要有一个结束条件
- #每次进入更深一层递归时,问题规模相比上次递归都应该有所减少
- #递归效率不高,递归层次过多会导致内存溢出 默认限制1000
- l =[, , [, [, , , [, , [, , [, , , [, ,[,[,]],]]]]]]]
- def search(l):
- for item in l:
- if type(item) is list:
- search(item)
- else:
- print(item)
- search(l)
二分法
- l = [,,,,,,,,,,,,]
- def djb(l,num):
- xjb=len(l)
- if num >l[xjb]:
- #in the right
- l=l[xjb+:]
- djb(,num)
- elif num <l[xjb]:
- l=l[:xjb]
- else:
- print('find it')
python自动化 协程函数、二分查找、模块搜索的更多相关文章
- python 3 协程函数
python 3 协程函数 1:把函数的执行结果封装好__iter__和__next__,即得到一个迭代器 2:与return功能类似,都可以返回值,但不同的是,return只能返回一次值,而yiel ...
- Python之协程函数
Python之协程函数 什么是协程函数:如果一个函数内部yield的使用方法是表达式形式的话,如x=yield,那么该函数成为协程函数. def eater(name): print('%s star ...
- python基础-协程函数、递归、模块、包等内容
1. 协程函数 1.1 yield基本用法 yield作用 1.把函数的执行结果封装好,即封装__iter__和__next__,即得到一个迭代器 2.与return功能类似,都可以返回值,但不同的是 ...
- Python基础(协程函数、内置函数、递归、模块和包)-day05
写在前面 上课第五天,打卡: 凭着爱,再回首: 一.协程函数(生成器:yield的表达式形式) 1.yield 的语句形式: yield 1 - 这种方式在 Python基础(函数部分)-day04 ...
- python之协程函数、递归、二分法
一.协程函数: 协程函数的语法: def eater(name): print('%s说:我开动啦' %name) food_list=[] while True: food=yield food_l ...
- python基础----迭代器、生成器、协程函数及应用(面向过程实例)
一.什么是迭代器协议 1.迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代 (只能往后走不能往前退) 2.可迭代 ...
- python协程函数、递归、匿名函数与内置函数使用、模块与包
目录: 协程函数(yield生成器用法二) 面向过程编程 递归 匿名函数与内置函数的使用 模块 包 常用标准模块之re(正则表达式) 一.协程函数(yield生成器用法二) 1.生成器的语句形式 a. ...
- python基础之协程函数、列表表达式、生成器表达式
一.协程函数 协程函数的定义?如果在一个函数内部yield的使用方式是表达式形式的话,如x=yield,那么该函数称为协程函数 协程函数补充: def init(func): def wrapper( ...
- python协程函数应用 列表生成式 生成器表达式
协程函数应用 列表生成式 生成器表达式 一.知识点整理: 1.可迭代的:对象下有_iter_方法的都是可迭代的对象 迭代器:对象._iter_()得到的结果就是迭代器 迭代器的特性: 迭代器._n ...
随机推荐
- 一个新手后端需要了解的前端核心知识点之margin(二)
最近以开发自己博客网站为出发点开始决心打牢几个非常重要的前端知识点: margin,这个在我刚刚接触编程的时候留下的困扰的东西,一开始只想着怎么快速开发自己的网站,别人的终归是别人的,想要挖墙脚,必须 ...
- Spring Boot Reference Guide
Spring Boot Reference Guide Authors Phillip Webb, Dave Syer, Josh Long, Stéphane Nicoll, Rob Winch, ...
- centos踩坑指南之安装composer
composer是php的一个依赖管理器,那么安装composer可以快速编译php 但是在centos7以上 安装composer的有一个步骤有个小问题 对于centos6来说是 sudo mv c ...
- 实践作业4---DAY4阶段三。
阶段三:给出结论 这一阶段,我们首先列表从核心功能.细节.用户体验.辅助功能差异化功能.软件的适应性和成长性展开.我们得结论前参考了权威网站数据.并自己也做了相应分析. 结论:经过这么多工作,这个软件 ...
- auth复习和BBS项目的登录(1)
auth复习 auth组件 验证:authenticate(request,username='andy',password='123) 登录:login(request,user) 注销:login ...
- ConsoleAppender
http://logback.qos.ch/manual/appenders.html#ConsoleAppender <configuration> <appender name= ...
- [Lua快速了解一下]Lua的OOP
__index(a, b) 对应表达式 a.b 上面我们看到有__index这个重载,这个东西主要是重载了find key的操作.这波操作可以让Lua变得有点面向对象的感觉,让其有点像Javascri ...
- C++ 动态分配二维和三维数组
目的:熟悉c++动态内存分配 描述:使用c++程序定义动态数组类,使用new和delete操作符实现动态二维数组和三维数组的定义 //main.cpp //主程序类 #include <iost ...
- ViewResolver 视图解析器
pringMVC 视图解析器 前言 在前一篇博客中讲了 SpringMVC 的Controller 控制器,在这篇博客中将接着介绍一下 SpringMVC 视图解析器.当我们对SpringMVC控制的 ...
- jquery stop(true,false)的意思
stop 是jQuery中用于控制页面动画效果的方法.运行之后立刻结束当前页面上的动画效果.stop在新版jQuery中添加了2个参数:第一个参数的意思是是否清空动画序列,也就是stop的是当前元素的 ...