装饰器本质是函数,装饰其他函数,就是为其他函数添加附加功能。

原则:1.不能修改被装饰的函数的源代码
          2.不能修改被装饰的函数的调用方式
 
实现装饰器 知识储备
1.函数即“变量”
2.高阶函数
        a.把一个函数当作实参传给另外一个函数(在不修改被装饰函数源代码的情况下 为其添加功能)
        b.返回值中包含函数名(不修改函数的调用方式)
3.嵌套函数
 
高阶函数+嵌套函数 =》 装饰器
 
高阶函数#变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。
嵌套函数:在一个函数体内创建另外一个函数,这种函数就叫内嵌函数(基于python支持静态嵌套域)
 高阶函数
def bar():
print 'in the bar'
def foo(func):
res=func()
return res
foo(bar)
#!/usr/bin/env python
#-*- coding:utf-8 -*-
# Author:DCC import time
def bar():
time.sleep(2)
print("in the bar")
def test1(func):
start_time=time.time()
func()
stop_time=time.time()
print("run time is %s" %(stop_time-start_time))
test1(bar)

嵌套函数

y = 10
# def test():
# y+=1
# print y
def test():
# global y
y = 2
print(y)
test()
print(y)
def dad():
m = 1
def son():
n = 2
print('--->', m + n)
print('-->',m)
son()
dad()

迭代器。

#!/usr/bin/env python
#-*- coding:utf-8 -*-
# Author:DCC import time def timer(func):
def deco(*args,**kwargs):
# def warpper(*args,**kwargs):
start_time = time.time()
func(*args,**kwargs)
stop_time = time.time()
print("the func run time is %s" % (stop_time-start_time) )
return deco @timer # test1 = timer(test1)
def test1():
time.sleep(3)
print("in the test1") @timer # test2 = timer(test2) =deco
def test2(name,age):
print(name,age)
print("in the test2") test1()
test2("dcc","2;5")
 
 
 
 
 
 
 
 
 
 
 

day4----装饰器的更多相关文章

  1. 小白的Python之路 day4 装饰器前奏

    装饰器前奏: 一.定义: 1.装饰器本质是函数,语法都是用def去定义的 (函数的目的:他需要完成特定的功能) 2.装饰器的功能:就是装饰其他函数(就是为其他函数添加附加功能) 二.原则: 1. 不能 ...

  2. 小白的Python之路 day4 装饰器高潮

    首先装饰器实现的条件: 高阶函数+嵌套函数 =>装饰器 1.首先,我们先定义一个高级函数,去装饰test1函数,得不到我们想要的操作方式 import time #定义高阶函数 def deco ...

  3. Day4 装饰器——迭代器——生成器

    一 装饰器 1.1 函数对象 一 函数是第一类对象,即函数可以当作数据传递 #1 可以被引用 #2 可以当作参数传递 #3 返回值可以是函数 #3 可以当作容器类型的元素 二 利用该特性,优雅的取代多 ...

  4. day4 装饰器深入解析

    Python装饰器 装饰器是在不修改源码给代码添加功能的常用方法.@是装饰的标志.我们知道,在给代码增加功能的时候,要遵循开放封闭的原则,不能随便更改原码,因此装饰器的功能就显示出来了,只需要在函数前 ...

  5. day4装饰器

    Python装饰器 1.必备 def foo(): print(foo) <function foo at 0x7f62db093f28> >>> foo <fun ...

  6. day4装饰器-迭代器&&生成器

    一.装饰器 定义:本质是函数,(装饰其他函数)就是为其它函数添加附加功能 原则:1.不能修改被装饰的函数的源代码 2.不能修改被装饰的函数的调用方式 实现装饰器知识储备: 1.函数及“变量” 2.高阶 ...

  7. 装饰器、生成器,迭代器、Json & pickle 数据序列化

    1. 列表生成器:代码例子 a=[i*2 for i in range(10)] print(a) 运行效果如下: D:\python35\python.exe D:/python培训/s14/day ...

  8. Python之旅Day5 列表生成式 生成器 迭代器 装饰器

    装饰器 器即函数,装饰即修饰,意指为其他函数添加新功能 装饰器定义:本质就是函数,功能是为其他函数添加新功能 装饰器涉及的知识点= 高阶函数+函数嵌套+闭包 在遵循下面两个原则的前提下为被装饰者新功能 ...

  9. 函数和常用模块【day05】:装饰器高潮(三)

    本节内容 1.概述 2.装饰器定义 3.装饰器定义 4.带参数的生成器 一.概述 我们之前介绍了大幅片的内容,感觉跟装饰器半毛钱关系都没有,其实不然,我们分别详细阐述了高阶函数和内置函数,下面我们就来 ...

  10. 函数和常用模块【day05】:装饰器前奏(一)

    本节内容 定义 原则 实现装饰器的储备知识 函数及变量 高阶函数 一.定义 1.装饰器:本质是函数. 2.功能:用来装饰其他函数,顾名思义就是,为其他的函数添加附件功能的. 二.原则 不能修改被装饰函 ...

随机推荐

  1. c++ primer 5th 练习3.43

    #include <iostream> using namespace std; int main() { ][]={,,,,,,,,,,,}; /* for(int (&i)[4 ...

  2. nodejs 下载,安装,测试(windows环境下)

    1.下载 nodejs英文官网:http://nodejs.org/ nodejs中文官网:http://nodejs.cn/ 两个都可以下载,用户可以根据自己的网络来选择用哪个下载. 进入官网之后版 ...

  3. python json学习之路1-认识json格式数据

    JSON 语法规则 JSON 语法是 JavaScript 对象表示语法的子集. 数据在键值对中 数据由逗号分隔 花括号保存对象 方括号保存数组JSONJSON 名称/值对 JSON 数据的书写格式是 ...

  4. nginx 设置反响代理实现nginx集群

    ginx.conf: worker_processes  1; events { worker_connections  1024; } http { include       mime.types ...

  5. Spring----->projects----->Spring Boot

    1.概述:(about Spring Boot) Spring boot是在spring framework的基础上搭建起来的一个基本项目,该项目中已经集成了spring框架下的若干模块以及sprin ...

  6. spring中Bean的生命周期

    初始化方法:在Bean实例初始化后自动执行的方法 销毁方法:在Bean实例销毁前执行的方法 <bean id="bm" class="springTest.Car& ...

  7. vsftpd基于pam_mysql的虚拟用户机制

    何为vsftpd? vsftpd:very secure ftp daemon 程序:/usr/sbin/vsftpd 配置文件:/etc/vsftpd/vsftpd.conf 其用户分为:匿名用户( ...

  8. HTML小知识---Label

    今天知道了一个html小知识: <input type="checkbox" id="chkVersion" />                 ...

  9. Select查询语句2

    一.模糊查询 1.语法结构 select*from table_name where column like '%context%' 在使用like运算符时如果不使用通配符“%”,则like的作用与= ...

  10. ASP.NET ZERO Core Application 学习笔记

    地址:https://www.aspnetzero.com/Documents/Development-Guide-Core 1.恢复数据库 MIGRATOR CONSOLE APPLICATION ...