day05 协程函数,递归函数,匿名函数lambda,内置函数map reduce filter max min zip sorted,匿名函数lambda和内置函数结合使用,面向过程编程与函数编程,模块与包的使用,re模块内置函数

  

基础篇


本章大纲:

协程函数

递归函数

匿名函数lambda

内置函数map reduce filter  max min zip sorted

匿名函数lambda和内置函数结合使用

面向过程编程与函数编程

模块与包的使用

re模块内置函数


一,协程函数

注意:函数先定义,后使用。这是函数第一原则。函数主要分为定义,调用

1.1,什么是协程函数

协程函数特点:yield变为表达式,可以通过g.send(value)传值,用send传值时协程函数需要初始化,也可以说是生成器函数的一种

1.2,协程函数的初识

def eater(name):
    print(‘%s 开始吃了‘ %name)
    while True:
        food=yield
        print(‘%s开始吃%s‘%(name,food))

g=eater(‘alex‘)
next(g)

 断点分析为什么需要next()

  第一步用next作用:

      a,因为yeild的原因程序肯定是暂停的。只有next程序才能执行。

      b,而send是先发送一个值给yeild然后在next,显然程序都不能开始了。从何说起接收send发送的值呀。所以第一步next让程序先走到yeild停等待send发值状态

  第二步send作用:

      a,通过send把值发送给暂停的yeild

      b,当yeild接收到了send发送的值,他会自动next()一次生成器

1.3,通过yeild表达式保存协程函数状态

def eater(name):
    print(‘%s 开始吃了‘ %name)
    list1=[]
    while True:
        food=yield list1
        print(‘%s开始吃%s‘%(name,food))
        list1.append(food)

g=eater(‘alex‘)
next(g)
res=g.send(‘苹果‘)
res=g.send(‘橘子‘)
res=g.send(‘香蕉‘)
print(res)

  

1.4通过装饰器解决协程函数第一次next问题

def zhuangshi(func):
    def neibu(*args,**kwargs):
        g=func(*args,**kwargs)
        next(g)
        return g
    return neibu
@zhuangshi      #eater=neibu
def eater(name):
    print(‘%s 开始吃了‘ %name)
    list1=[]
    while True:
        food=yield list1
        print(‘%s开始吃%s‘%(name,food))
        list1.append(food)

g=eater(‘alex‘)
res=g.send(‘苹果‘)
res=g.send(‘橘子‘)
res=g.send(‘香蕉‘)
print(res)

1.5 利用yeild实现grep -rl ‘python‘ /root

import os

def init(func):
    def wrapper(*args,**kwargs):
        res=func(*args,**kwargs)
        next(res)
        return res
    return wrapper

@init
def search(target):
    while True:
        search_path=yield
        g=os.walk(search_path)
        for par_dir,_,files in g:
            for file in files:
                file_abs_path=r‘%s\%s‘ %(par_dir,file)
                # print(file_abs_path)
                target.send(file_abs_path)

@init
def opener(target):
    while True:
        file_abs_path=yield
        # print(‘opener func==>‘,file_abs_path)
        with open(file_abs_path,encoding=‘utf-8‘) as f:
            target.send((file_abs_path,f))

@init
def cat(target):
    while True:
        file_abs_path,f=yield  #(file_abs_path,f)
        for line in f:
            tag=target.send((file_abs_path,line))
            if tag:
                break
@init
def grep(target,pattern):
    tag=False
    while True:
        file_abs_path,line=yield tag
        tag=False
        if pattern in line:
            tag=True
            target.send(file_abs_path)

@init
def printer():
    while True:
        file_abs_path=yield
        print(file_abs_path)

x=r‘C:\Users\Administrator\PycharmProjects\python17期\day5\a‘

g=search(opener(cat(grep(printer(),‘python‘))))
print(g)

g.send(x)

  

二,递归函数

2.1,什么是递归函数

  递归调用顾名思义即在函数内部调用函数(自己调用自己),通常用它来计算阶乘,累加等

2.2,递归函数计算1-100

2.3,递归函数的递归层级问题

2.4,怎么避免递归层级过问题

2.5,递归函数优化方向尾递归

Python介绍

Python介绍

Python介绍

Python介绍

Python介绍

Python介绍

Python介绍

Python介绍

Python介绍

Python介绍

Python介绍

Python介绍

Python介绍

Python介绍

Python介绍

Python介绍

时间: 2024-12-09 22:42:41

day05 协程函数,递归函数,匿名函数lambda,内置函数map reduce filter max min zip sorted,匿名函数lambda和内置函数结合使用,面向过程编程与函数编程,模块与包的使用,re模块内置函数的相关文章

python--函数式编程 (高阶函数(map , reduce ,filter,sorted),匿名函数(lambda))

1.1函数式编程 面向过程编程:我们通过把大段代码拆成函数,通过一层一层的函数,可以把复杂的任务分解成简单的任务,这种一步一步的分解可以称之为面向过程的程序设计.函数就是面向过程的程序设计的基本单元. 函数式编程:是使用一系列函数去解决问题,函数式编程就是根据编程的范式来的出想要的结果,只要是输入时确定的,输出就是确定的. 1.2高阶函数 能把函数作为参数传入,这样的函数就称为高阶函数. 1.2.1函数即变量 以python的内置函数print()为列,调用该函数一下代码 >>> pri

[python基础知识]python内置函数map/reduce/filter

python内置函数map/reduce/filter 这三个函数用的顺手了,很cool. filter()函数:filter函数相当于过滤,调用一个bool_func(只返回bool类型数据的方法)来迭代遍历每个序列中的元素. 返回bool_func结果为true的元素的序列(注意弄清楚序列是什么意思)http://blog.csdn.net/bolike/article/details/19997465序列参考</a> 如果filter参数值为None,list参数中所有为假的元 素都将被

Python-函数式编程-map reduce filter lambda 三元表达式 闭包

lambda 匿名函数,核心是作为算子,处理逻辑只有一行但具有函数的特性,核心用于函数式编程中 三元运算符 其实本质上是if分支的简化版,满足条件返回 if 前面的值,不满足条件返回 else后面的值 # 100 < 100 返回 False, 则 返回 else后面的值 value = 100 if 100 < 100 else 10 print(value) map 映射函数(依次把可迭代对象(可多个)中的值依次传递到函数中,然后返回生成器(长度以最短的为基础)) numbers = [1

Python进阶:函数式编程(高阶函数,map,reduce,filter,sorted,返回函数,匿名函数,偏函数)...啊啊啊

函数式编程 函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计.函数就是面向过程的程序设计的基本单元. 而函数式编程(请注意多了一个"式"字)--Functional Programming,虽然也可以归结到面向过程的程序设计,但其思想更接近数学计算. 我们首先要搞明白计算机(Computer)和计算(Compute)的概念. 在计算机的层次上,CPU执行的是加减乘除的指令代码

Python基础篇【第2篇】: Python内置函数--map/reduce/filter/sorted

Python内置函数 lambda lambda表达式相当于函数体为单个return语句的普通函数的匿名函数.请注意,lambda语法并没有使用return关键字.开发者可以在任何可以使用函数引用的位置使用lambda表达式.在开发者想要使用一个简单函数作为参数或者返回值时,使用lambda表达式是很方便的.总结:处理简单逻辑,自动返回结果 语法格式: lambda parameters: expression 就相当于 def fun(args) return expression 并且lam

python 中 模块,包, 与常用模块

一 模块 模块:就是一组功能的集合体, 我们的程序可以直接导入模块来复用模块里的功能 导入方式 一般为 : import 模块名 在python中, 模块一般分为四个通用类别 1使用python编写.py 文件 2.已被编译为共享库或DLL 的c 或c++扩展 3把一系列模块组织到一起的文件夹(注:文件夹下有一个__init__.py文件,该文件夹称之为包) 4.使用c编写并链接到python解释器的内置模块 使用模块的优点: 1.从文件级别组织程序, 更方便管理 2.拿来主义, 提升开发效率

模块与包的定义 os 模块

os模块是与操作系统交互的模块之前我们也用过os模块就是更改文件的名字的时候 我们如果用os求求文件夹是不行的  可以求文件  因为文件夹在python中最大就是4096个字节 所以你必须求出文件夹内的文件的大小相加 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工作目录:相当于shell下cd os.curdir 返回当前目录: ('.') os.pardir 获取当前目录的父目录字符串名:('..

python内置函数map/reduce/filter

python有几个内置的函数很有意 思:map/filter/reduce,都是对一个集合进行处理,filter很容易理解用于过滤,map用于映射,reduce用于归并. 是python列表方法的三架马车. filter() 函数:filter 函数的功能相当于过滤器.调用一个布尔函数bool_func来迭代遍历每个seq中的元素:返回一个使bool_seq返回值为true的元素的序列. >>>a=[1,2,3,4,5,6,7]>>>b=filter(lambda x:

内置函数(max,min,zip)及文件处理

几个有意思的内置函数 max , min最基本用法 l=[1,3,100,-1,2] print(max(l)) print(min(l)) zip 1 print(list(zip(('a','n','c'),(1,2,3)))) 2 print(list(zip(('a','n','c'),(1,2,3,4)))) 3 print(list(zip(('a','n','c','d'),(1,2,3)))) 4 5 p={'name':'alex','age':18,'gender':'non