<05day>_

上节课内容回顾:

一、闭包函数

1.定义在函数内部的函数

2.该内部函数包含对外部作用域而不是对全局作用域的引用【f2()就是闭包函数

def fi():
     x = 1
     def f2():
          print(x)
      reyurn f2
f = f1()
f()

二、装饰器

1.为什么要有装饰器:

开发封闭原则,对扩展开发的,对修改是封闭的。

2.什么是装饰器:

装饰器本身--》可以是任意可调用对象(列如:函数)

被装饰的对象--》也是任意可调用对象

3.装饰器要遵循的原则:

不修改被装饰器对象的源代码

不修改被装饰对象的调用方式

装饰器语法:

@deco #func = deco(func)
def func()
pass

-----------------------------------------05day课程-------------------------------------------------

一、空装饰器:

def deco(fcun):
    def wrapper(*args,**kwargs):
        res = fcun(*args,**kwargs)
        return res
    return wrapper

二、协程函数

1.表达式yield的使用方式

装饰器负责--初始化功能

#!/usr/bin/python
# -*- coding:utf-8 -*-
# Author:zhaosj
##################装饰器#######################
def deco(fcun):
    def wrapper(*args,**kwargs):
        res = fcun(*args,**kwargs)
        next(res) # next(res)==return res
        return res
    return wrapper

################表达式yield的使用####################
@deco # 装饰器的作用负责初始话
def eater(name):
    print(‘%s ready to eat‘ %name)
    while True:
        food = yield # 表达式yield的使用
        print(‘%s start to eat %s‘ %(name,food))

g = eater(‘alex‘)
g.send(‘手指头‘) #send 给yield传了个值【send==next】

运行结果:

2.表达式yield的使用方式

#!/usr/bin/python
# -*- coding:utf-8 -*-
# Author:zhaosj

# 表达式yield的说明
# x = yield
# g.send(‘1111‘),先把1111传给yield,由yield赋值给x,然后在往下执行。
# 直到再次遇到yield,然后把yield后的返回值返回

##################装饰器#######################
def deco(fcun):
    def wrapper(*args,**kwargs):
        res = fcun(*args,**kwargs)
        next(res) # next(res)==return res
        return res
    return wrapper

################表达式yield的使用####################
@deco # 装饰器的作用负责初始话
def eater(name):
    print(‘%s ready to eat‘ %name)
    food_list = [] #空列表接收yield返回值
    while True:
        food = yield food_list # 表达式yield的使用
        food_list.append(food)
        print(‘%s start to eat %s‘ %(name,food))

g = eater(‘alex‘)
print(g.send(‘手指头1‘)) #send 给yield传了个值【send==next】
print(g.send(‘手指头2‘))

运行结果:

三、yield与面向过程式函数:

模拟一个linux系统下命令为 # grep -lr ‘python‘ /root

目录结构:【找出文件中带有python字符的文件并打印】

---递归寻找---

!/usr/bin/python
# -*- coding:utf-8 -*-
# Author:zhaosj
import os

# 模拟一个linux系统下命令为  # grep  -lr ‘python‘ /root

#######################装饰器函数(负责每一次传一个空值)#################
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)
                target.send(file_abs_path)

@init
def opener(target):
    while True:
        file_abs_path = yield
        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
        for line in f:
            target.send((file_abs_path,line))

@init
def grep(target,pattern):
    while True:
        file_abs_path,line = yield
        if pattern in line:
            target.send(file_abs_path)

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

x = r‘D:\PycharmProjects\day_05\a‘

g = search(opener(cat(grep(printer(),‘python‘))))
print(g) #打印结果就是一个生成器

g.send(x)

运行结果:

面向过程的程序设计:是一种流水线式的编程思路,是机械式;

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

缺点:扩展性差;

【C语言没有面向对象的说法,只有面向过程】

面向过程式---应用场景

1.linux内核;2.git;3.httpd;

时间: 2024-08-06 16:00:30

<05day>_的相关文章

彻底解决_OBJC_CLASS_$_某文件名&quot;, referenced from:问题(转)

最近在使用静态库时,总是出现这个问题.下面总结一下我得解决方法: 1. .m文件没有导入   在Build Phases里的Compile Sources 中添加报错的文件 2. .framework文件没有导入静态库编译时往往需要一些库的支持,查看你是否有没有导入的库文件同样是在Build Phases里的Link Binary With Libraries中添加 3. 重复编译,可能你之前复制过两个地方,在这里添加过两次,删除时系统没有默认删除编译引用地址在Build Settings里搜索

python_字符_函数

一.字符集和字符编码 1.定义 计算机中储存的信息都是用二进制数表示的,而我们在屏幕上看到的英文.汉字等字符是二进制数转换之后的结果.通俗的说,按照何种规则将字符存储在计算机中,如'a'用什么表示,称为"编码":反之,将存储在计算机中的二进制数解析显示出来,称为"解码",如同密码学中的加密和解密.在解码过程中,如果使用了错误的解码规则,则导致'a'解析成'b'或者乱码. 字符(Character):是一个信息单位,在计算机里面,一个中文汉字是一个字符,一个英文字母是

Oracle SQL语言基础及环境准备_超越OCP精通Oracle视频教程培训26

Oracle SQL语言基础及环境准备_超越OCP精通Oracle视频教程培训26 本课程介绍: Oracle视频教程,风哥本套oracle教程培训是<<Oracle数据库SQL语言实战培训教程>>的第1/5套:SQL语言之基础入门及环境准备.主要学习Oracle数据库SQL语言基础介绍.PL/SQL语言介绍.数据库SQL对象与数据类型介绍.SQL语言实战环境准备等. Oracle SQL语言之基础及环境准备,课程内容详细如下: Oracle数据库SQL语言基础介绍Oracle数据

Oracle SQL语言DDL和对象管理_超越OCP精通Oracle视频教程培训27

Oracle SQL语言DDL和对象管理_超越OCP精通Oracle视频教程培训27 本课程介绍: Oracle视频教程,风哥本套oracle教程培训是<<Oracle数据库SQL语言实战培训教程>>的第2/5套:Oracle SQL语言DDL和对象管理.主要学习Oracle数据库模式对象和表中可用的数据类型,表/临时表的创建与使用,索引/约束的创建与管理,视图/同义词/序列的创建和使用,触发器/存储过程/包的创建和使用. Oracle SQL语言DDL和对象管理,课程内容详细如下

Oracle SQL语言DML语句与事务_超越OCP精通Oracle视频教程培训28

Oracle SQL语言DML语句与事务_超越OCP精通Oracle视频教程培训28 本课程介绍: Oracle视频教程,风哥本套oracle教程培训是<<Oracle数据库SQL语言实战培训教程>>的第3/5套:Oracle SQL语言DML语句与事务.主要学习Oracle数据库SQL语句INSERT命令,学习使用UPDATE命令,学习使用DELETE命令,学习创建PL/SQL对象,事务概念与控制,锁的检测和锁争用,了解撤销数据. Oracle SQL语言DML语句与事务管理,课

Oracle SQL语言之查询语句_超越OCP精通Oracle视频教程培训29

Oracle SQL语言之查询语句_超越OCP精通Oracle视频教程培训29 本课程介绍: Oracle视频教程,风哥本套oracle教程培训是<<Oracle数据库SQL语言实战培训教程>>的第4/5套:Oracle SQL语言之查询语句.主要学习Oracle数据库SQL查询限制排序.Oracle SQL联接查询.Oracle SQL子查询等. 视频学习地址: http://edu.51cto.com/course/course_id-8047.html Oracle SQL语

STL_算法(21)_ STL_算法_填充新值

STL_算法_填充新值 fill(b, e, v) fill(b, n, v) generate(b, n, p) generate_n(b, n, p) #include<iostream> #include<algorithm> #include<vector> #include<list> // #include<string> using namespace std; int main() { list<string> sli

[[其他教程]] 2015年最新版iOS基础视频_最适合初学者入门

主讲:孙庆虎类型:iOS 适合对象:初学者入门视频介绍:本视频是iOS学院精心录制的免费精华版iOS语言基础视频,该视频特点在于最大程度保证了知识点的完整性,按知识点进行视频录制,每个视频控制在20分钟左右,不会使学生产生疲劳,授课讲究通俗易懂.幽默风趣.绝对干货.通过该视频的学习,相信你能够轻轻松松地入门C语言,为iOS开发学习打下坚实的基础. 视频概况: 第01天内容 01.尚学堂_孙庆虎C语言_mac os x的基本用法02.尚学堂_孙庆虎C语言_mac os x文件系统及常用终端命令03

C++ Primer笔记8_动态内存_智能指针

1.动态内存 C++中,动态内存管理是通过一对运算符完成的:new和delete.C语言中通过malloc与free函数来实现先动态内存的分配与释放.C++中new与delete的实现其实会调用malloc与free. new分配: 分配变量空间: int *a = new int; // 不初始化 int *b = new int(10); //初始化为10 string *str = new string(10, ); 分配数组空间: int *arr = new int[10];//分配的