码迷,mamicode.com
首页 > 其他好文 > 详细

<05day>_

时间:2017-06-03 11:23:00      阅读:144      评论:0      收藏:0      [点我收藏+]

标签:cts   返回   赋值   target   装饰器   面向   arm   line   return   

上节课内容回顾:

一、闭包函数

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 = rD:\PycharmProjects\day_05\a

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

g.send(x)

运行结果:

技术分享

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

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

缺点:扩展性差;

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

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

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

 

<05day>_

标签:cts   返回   赋值   target   装饰器   面向   arm   line   return   

原文地址:http://www.cnblogs.com/eedweek/p/6935235.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!