协程函数

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自动化 协程函数、二分查找、模块搜索的更多相关文章

  1. python 3 协程函数

    python 3 协程函数 1:把函数的执行结果封装好__iter__和__next__,即得到一个迭代器 2:与return功能类似,都可以返回值,但不同的是,return只能返回一次值,而yiel ...

  2. Python之协程函数

    Python之协程函数 什么是协程函数:如果一个函数内部yield的使用方法是表达式形式的话,如x=yield,那么该函数成为协程函数. def eater(name): print('%s star ...

  3. python基础-协程函数、递归、模块、包等内容

    1. 协程函数 1.1 yield基本用法 yield作用 1.把函数的执行结果封装好,即封装__iter__和__next__,即得到一个迭代器 2.与return功能类似,都可以返回值,但不同的是 ...

  4. Python基础(协程函数、内置函数、递归、模块和包)-day05

    写在前面 上课第五天,打卡: 凭着爱,再回首: 一.协程函数(生成器:yield的表达式形式) 1.yield 的语句形式: yield 1 - 这种方式在 Python基础(函数部分)-day04  ...

  5. python之协程函数、递归、二分法

    一.协程函数: 协程函数的语法: def eater(name): print('%s说:我开动啦' %name) food_list=[] while True: food=yield food_l ...

  6. python基础----迭代器、生成器、协程函数及应用(面向过程实例)

    一.什么是迭代器协议 1.迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代 (只能往后走不能往前退) 2.可迭代 ...

  7. python协程函数、递归、匿名函数与内置函数使用、模块与包

    目录: 协程函数(yield生成器用法二) 面向过程编程 递归 匿名函数与内置函数的使用 模块 包 常用标准模块之re(正则表达式) 一.协程函数(yield生成器用法二) 1.生成器的语句形式 a. ...

  8. python基础之协程函数、列表表达式、生成器表达式

    一.协程函数 协程函数的定义?如果在一个函数内部yield的使用方式是表达式形式的话,如x=yield,那么该函数称为协程函数 协程函数补充: def init(func): def wrapper( ...

  9. python协程函数应用 列表生成式 生成器表达式

    协程函数应用 列表生成式 生成器表达式   一.知识点整理: 1.可迭代的:对象下有_iter_方法的都是可迭代的对象 迭代器:对象._iter_()得到的结果就是迭代器 迭代器的特性: 迭代器._n ...

随机推荐

  1. 向对象(OO)程序设计

    http://www.uml.org.cn/mxdx/201208232.asp 前言 本文主要介绍面向对象(OO)程序设计,以维基百科的解释: 面向对象程序设计(英语:Object-oriented ...

  2. VMware 桥接模式 复制物理网络连接状态的作用

    参考: https://docs.vmware.com/cn/VMware-Workstation-Pro/15.0/com.vmware.ws.using.doc/GUID-826323AD-D01 ...

  3. 实践作业4---DAY5阶段四。

    阶段四:分析 这一阶段工作就是分析博客园与csdn优点缺点: 根据邹欣老师在<现代软件工程>一书中的描述: 程序 = 算法 + 数据结构: 软件 = 程序 + 软件工程(软件服务还有数据, ...

  4. Ubuntu14.04 下安装Samba服务

    1.更改linux镜像源: # vim /etc/apt/sources.list deb http://mirrors.163.com/ubuntu/ trusty main restricted ...

  5. not in查询不出数据问题

    select ID from SmartCustomer where ID not in (select distinct CustomerID from SmartPromoter where Cu ...

  6. [GO]方法的继承

    package main import "fmt" type Person struct { name string sex byte age int } func (tmp Pe ...

  7. Java Project 转 Dynamic Web Project

    使用eclipse 工具, 右键Java Project 项目 Properties - Project Facets  - Convert to faceted form... - 勾选Dynami ...

  8. Linq集合操作之Intersect,Except,Union源码分析

    Linq集合操作之Intersect,Except,Union源码分析 linq的集合运算 常见的集合运算有哪些? 这三个扩展方法在我们实际使用中用的还是非常多的,而且这里还涉及到了“复杂度” 无算法 ...

  9. Shapefile点图层转换为Shapefile线图层

    在Oracle数据表转换为Shapefile(一)和Oracle数据表转换为Shapefile(二)两篇文章中,分别介绍了两种不同的根据Oracle数据表生成Shapefile点图层的方法.本文在此基 ...

  10. 7z文件格式及其源码的分析(三)

    上一篇在这里.  这是7z文件格式分析的第三篇, 相信有了前两篇的准备,你已经了解了7z源码的大致结构, 以及如何简单调试7z的源码了. 很多同学是不是迫不及待想要拔去7z的神秘外衣,看看究竟了. 好 ...