python自动化开发-[第五天]-面向过程、模块、包

今日概要:

  1、内置模块

  2、协程函数

  3、递归

  4、面向过程编程与函数编程

  5、模块

  6、包

  7、re正则

一、内置模块

  1、匿名函数lambda

  定义:匿名函数通常是创建了可以被调用的函数,它返回了函数,而并没有将这个函数命名

#不使用匿名函数
def func(x,y):
    return x+y

func(1,2)

#使用匿名函数
f=lambda x,y:x+y
print(f(1,2))

  2、max,zip(拉链函数),sorted用法

age={
‘dragon‘:18,
‘panda‘:20,
‘banana‘:21,
‘lili‘:30
}

print(max(age))

#默认是以字典的key进行排序,key如果是字符串就按照首位顺序,首位如果一致,一次递归比较
#方法一,用zip将key和values反转
res=zip(age.values(),age.keys())

print(max(res))
def foo(k):
    return age[k]

print(max(age,key=foo))
print(max(age,key=lambda k:age[k]))
print(min(age,key=lambda k:age[k]))

print(sorted(age)) #默认的排序结果是从小到大
print(sorted(age,key=lambda x:age[x])) #默认的排序结果是从小到大
print(sorted(age,key=lambda x:age[x],reverse=True)) #默认的排序结果是从小到大,resverse反转从大到小

  3、map,reduce,filter

    1、map

#map,将lambda函数对应的关系映射到列表里
l=[‘dragon‘,‘banana‘,‘water‘]
res=map(lambda x:x+‘_guess‘,l)
print(res)  #返回值为迭代器
print (list(res))

     2、reduce

#1、默认不加参数,从列表中取出一个值当作元素,然后依次取出第二个值到最后依次与第一个元素做运算,最终得出最后的值
#2、加参数后就从参数中取第一个值
from functools import reduce

l=[1,2,3,4,5]
print(reduce(lambda x,y:x+y,l,10))

    3、filter

#filter过滤规则,将匹配的元素提取出来
l=[‘test123‘,‘goto123‘,‘run123‘,‘pass‘]

res=filter(lambda x:x.endswith(‘123‘),l)
print(list(res))

二、协程函数

  python由于GIL的原因,导致其线程无法发挥多核的并行计算能力(后来有了multiprocessing,可以实现多进程并行),显得比较鸡肋。既然在GIL之下,同一时刻只能有一个线程在运行,那么对于CPU密集的程序来说,线程之间的切换开销就成了拖累,而以I/O为瓶颈的程序正是协程所擅长的:多任务并发(非并行),每个任务在合适的时候挂起(发起I/O)和恢复(I/O结束)

#!/usr/bin/python
# -*- coding:utf-8 -*-
#例子:
def f1(func):

    def f2(*args,**kwargs):
        g = func(*args,**kwargs)
        next(g)
        return g
    return f2

@f1
def eater(name):
    print (‘%s ready to eat‘ %(name))
    while True:
        food = yield
        print (‘%s,%s‘ %(name,food))

g = eater(‘alex‘)

g.send(‘jjj‘)

三、递归

  定义:在函数调用过程中,直接或间接地调用了函数本身,这就是函数的递归调用

  notice:python默认最大递归数为1000,sys.getrecursionlimit()查看

l = list(range(1000))
def to(info,g):
    if len(info) == 0:
        print (‘not exit‘)
        return
    mid = int(len(info)/2)
    if info[mid] > g:
        print (‘%s‘ %(info[0:mid]))
        to(info[0:mid],g)
    elif info[mid] < g:
        print (‘%s‘ %(info[mid+1:]))
        to(info[mid+1:],g)
    elif info[mid] == g:
        print (info[mid])

to(l,25)

四、面向过程

  定义:面向过程程序设计:是一种流水线式的变成思路,是机械式

  优点:程序结构清晰,可以把复杂的问题简单化

  缺点:扩展性差

  适用场景:

      git程序,httpd服务,linux内核

import os

#1、定义一个初始化yield的装饰器
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
#第四步进行grep过滤,如果第一次存在,则跳过该文件,进入下一次文件判断
@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‘路径‘
g=search(opener(cat(grep(printer(),‘python‘))))
print(g)
g.send(x)

五、模块

   1、import导入模块

      产生新的名称空间,以新建的名称空间为全局名称空间,执行文件的代码,拿到一个模块名,执行模块名.py产生的名称空间

   2、from ... import ...

      产生新的名称空间,以新建的名称空间为全局名称空间,执行文件的代码,直接拿到就是模块名.py产生的名称空间中名字

     优点:方便不用添加前缀

     缺点:容易跟当前文件的名称空间冲突

   3、模块的搜索顺序:

       内存---->内置---->sys.path

   4

时间: 2024-10-07 01:36:21

python自动化开发-[第五天]-面向过程、模块、包的相关文章

老男孩教育Python自动化开发精英班-开班典礼感想

2016年1月14日   老男孩教育Python自动化开发精英班-第一天 期待中的老男孩教育Python自动化开发精英班开办了. 我知道对于我这个年龄进入这个班意味着什么?首先,精力不如年轻人,其次,单位繁杂的事务性工作较多.所以,从现在起必须对工作处理更加效率,休息时间要进行压缩,否则就不能腾出更多的时间学习,压力还是很大的. 我知道,在这个班中都是些年轻人,大家都为了掌握一门具备前瞻性.实用性和就业面宽广的本事而来,以后可以在社会上有更多的.更好的和收入可观的发展机会.有人问了,你都快退休了

Python自动化开发,Day1 - Python基础1

本章内容 Python是什么? Python的发展史 Python2与3的区别 Python的语言类型 Python的优缺点 一.Python是什么? Python的创始人是吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,作为ABC语言的一种继承.之所以选中Python作为该编程语言的名字,是因为他是一个叫Monty Python的喜剧团体的爱好者. 最新的TIOBE排行榜中,Python赶超

第五章---面向过程编程

编程范式(流派): 面向对象编程,面向过程编程 各有用处!! 编程:语法+数据结构(list dict)+算法(逻辑) 1.面向过程编程:核心是过程二字,过程指得是解决问题的步骤,相当于设计一条流水线,机械式的思维方式 优点:复杂的问题流程化,进而简单化       缺点:可扩展性差       运用场景:系统监控脚本,自动部署脚本之类的,eg:软件包解压安装(不再需要扩展了)就可以使用面向过程的思维编写代码 1 ''' 2 面向过程实例:用户登录注册 3 第一步:用户输入用户名密码 4 第二步

Python 自动化开发_简介

一.python  介绍 Python  简介[前世今生]: python的创始人是吉多·范罗苏姆(Guido van Rossum).于1989年的圣诞节期间开发的一个新脚本程序.作为ABC语言的一种继承. 为什么要学习python呢: 我的理解不是为什么要去学python.而是学习python能给你带来什么乐趣.每个人的求知欲不一样.所以看个人理解.简单点说对于运维的同学来说,学了python后不止自己的收入可以变得客观,也会使自己的工作变得很轻松.当然某些人可能会说我会shell编程就够了

Python自动化开发课堂笔记【Day06】 - Python进阶(类)

类与对象 面向过程的程序设计: 优点:极大的降低了程序的复杂度 缺点:一套流水线或者流程就是用来解决一个问题,生产汽水的流水线无法生产汽车,即使能,也是得大改,改一个组件,牵一发而动全身面向对象的程序设计 优点:解决了程序的扩展性,对于某一个对象单独修改,会立刻反映到整个体系中,如对游戏中一个人物参数的特征和技能修改都很容易 缺点:可控性差,无法像面向过程的程序设计流水线式的可以很精准的预测问题的处理流程和结果,面向对象的程序一旦开始就由对象之间的交互解决问题,谁也无法预测最终结果. pytho

python自动化开发学习【第七天】

面向对象简介 a.面向过程:根据业务逻辑从上到下编写代码. b.函数式编程:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可. c.面向对象:对函数进行分类和封装. 注:java和C# 都只支持面向对象编程,python比较灵活即支持面向对象也支持函数式编程. 创建类和对象 面向对象编程时一种编程方式,通过使用“类”与“对象”来实现,所以面向对象其实就对“类”与“对象”的使用. a.类就是一个模板,模板可以包含多个函数,函数里实现一些功能. b.对象则是根据模板创建的实例,通过实例对

Python自动化开发课堂笔记【Day04】 - Python基础(函数补充,模块,包)

表达式形式的yield yield的语句形式: yield 1yield的表达式形式: x=yield 1 x=yield 2 g.send('1111') #先把1111传给yield,由yield赋值给x,然后再往下执行,直到再次碰到yield,然后把yield后的返回值返回 协程函数示例 1 def gen(func): 2 def wrapper(*args,**kwargs): 3 res = func(*args,**kwargs) 4 next(res) #相当于next(g)或者

Python自动化开发学习的第三周---python基础学习

本周内容 1.函数的基本语法和特性 2.参数与局部变量 3.返回值 4.递归函数 5.匿名函数 6.函数式编程介绍 7.高阶函数 8.内置函数 ---------分割线------------ 1.函数的基本语法和特性 函数是什么? 定义: 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可 特性: 减少重复代码 使程序变的可扩展 使程序变得易维护 语法定义 1 def sayhi():#函数名 2 print("Hello, I'm nobody!&

Python自动化开发03

集合 1.去重 list_1 = set([1,2,3,4,0,7,4,8]) list2 = set([99,34,6,8,3]) list3 = set([0,4,8]) list4 = set([84,45,49]) print(list_1) <<< {0, 1, 2, 3, 4, 7, 8} 2. 交集 list_1 & list2 print(list_1.intersection(list2)) <<< {8, 3} 3.并集(合集) list_1