Python中的装饰器就是函数,作用就是包装其他函数,为他们起到修饰作用。在不修改源代码的情况下,为这些函数额外添加一些功能,像日志记录,性能测试等。一个函数可以使用多个装饰器,产生的结果与装饰器的位置顺序有关。

  装饰器基本形式:

  @装饰器1

  def 函数1:

    函数体

  相当于:==》  函数1 = 装饰器1(函数1)

  装饰器特点:

  1、不修改源代码的调用方式

  2、不修改源代码内容

  3、装饰器有高阶函数递归函数相融合的特点

  多个装饰器修饰,示例:

@foo
@spam
def bar():pass 相当于: def bar():pass bar = foo(spam(bar))

  装饰器示例1(无参数传递):计算程序运行时间

import time
def foo(func):
def wrapper():
start_time = time.time()
func()
stop_time = time.time()
print('the func run %s .' % (stop_time - start_time))
return wrapper @foo
def bar():
time.sleep(3)
print("In the bar.") bar() # 输入结果 In the bar.
the func run 3.016378402709961 .

  装饰器示例2(源代码有参数传递):

import time
def foo(func):
def wrapper(args):
start_time = time.time()
func(args)
stop_time = time.time()
print('the func run %s .' % (stop_time - start_time))
return wrapper @foo
def bar(name):
time.sleep(3)
print('Hello %s .' % name) user_name = input('What is your name ?\n')
bar(user_name) # 输出结果 What is your name ?
zhanghk
Hello zhanghk .
the func run 3.0003373622894287 .

  装饰器示例3(装饰器传递参数):

import time

def foo(n):
def ac(func):
def wrapper(args):
if n == 1:
start_time = time.time()
func(args)
stop_time = time.time()
print('the func run %s .' % (stop_time - start_time))
else:
func(args)
return wrapper
return ac @foo(n = 0) # 由"n"是否等于1来判断是否计算程序运行时间
def bar(name):
time.sleep(3)
print('Hello %s .' % name) user_name = input('What is your name ?\n')
bar(user_name) # 输出结果 What is your name ?
zhanghk
Hello zhanghk .

1.16 Python基础知识 - 装饰器初识的更多相关文章

  1. 十. Python基础(10)--装饰器

    十. Python基础(10)--装饰器 1 ● 装饰器 A decorator is a function that take a function as an argument and retur ...

  2. python基础—函数装饰器

    python基础-函数装饰器 1.什么是装饰器 装饰器本质上是一个python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能. 装饰器的返回值是也是一个函数对象. 装饰器经常用于有切 ...

  3. [python基础]关于装饰器

    在面试的时候,被问到装饰器,在用的最多的时候就@classmethod ,@staticmethod,开口胡乱回答想这和C#的static public 关键字是不是一样的,等面试回来一看,哇,原来是 ...

  4. Day11 Python基础之装饰器(高级函数)(九)

    在python中,装饰器.生成器和迭代器是特别重要的高级函数   https://www.cnblogs.com/yuanchenqi/articles/5830025.html 装饰器 1.如果说装 ...

  5. 学习PYTHON之路, DAY 5 - PYTHON 基础 5 (装饰器,字符格式化,递归,迭代器,生成器)

    ---恢复内容开始--- 一 装饰器 1 单层装饰器 def outer(func): def inner(): print('long') func() print('after') return ...

  6. Python开发【第一篇】Python基础之装饰器

    写代码要遵循开发封闭原则,虽然在这个原则是用的面向对象开发,但是也适用于函数式编程,简单来说,它规定已经实现的功能代码不允许被修改,但可以被扩展,即: 封闭:已实现的功能代码块开放:对扩展开发 #s2 ...

  7. python基础-----函数/装饰器

    函数 在Python中,定义一个函数要使用def语句,依次写出函数名.括号.括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回. 函数的优点之一是,可以将代码块与主程 ...

  8. python基础之装饰器(实例)

    1.必备 #### 第一波 #### def foo(): print 'foo' foo #表示是函数 foo() #表示执行foo函数 #### 第二波 #### def foo(): print ...

  9. 【Python基础】装饰器的解释和用法

    装饰器的用法比较简单,但是理解装饰器的原理还是比较复杂的,考虑到接下来的爬虫框架中很多用到装饰器的地方,我们先来讲解一下. 函数 我们定义了一个函数,没有什么具体操作,只是返回一个固定值 请注意一下缩 ...

随机推荐

  1. 之前写的收集的一些c++代码片,算法排序,读文件,写日志,快速求积分等等

    写日志: class LogFile { public: static LogFile &instance(); operator FILE *() const { return m_file ...

  2. 动态调用WebService-获取天气

    string url = "http://www.webxml.com.cn/WebServices/WeatherWebService.asmx"; string[] args ...

  3. HDU 4431 Mahjong 模拟

    http://acm.hdu.edu.cn/showproblem.php?pid=4431 不能说是水题了,具体实现还是很恶心的...几乎优化到哭但是DFS(还加了几个剪枝)还是不行...搜索一直T ...

  4. @Accessors

    @Accessors 作用:存取器,用于配置getter和setter方法的生成结果 三个属性:fluent.chain.prefix 1.fluent:流畅的,设置为true,getter和sett ...

  5. 小白学开发(iOS)OC_ SEL数据类型(2015-08-10)

    // //  main.m //  SEL数据类型 // //  Created by admin on 15/8/12. //  Copyright (c) 2015年 admin. All rig ...

  6. ip6tables: ipv6-icmp vs icmp

    ip6tables: ipv6-icmp vs icmp资料来源 https://www.jethrocarr.com/2013/02/09/ip6tables-ipv6-icmp-vs-icmp/I ...

  7. Docker+Jenkins持续集成

    Docker+Jenkins持续集成 使用etcd+confd实现容器服务注册与发现   前面我们已经通过jenkins+docker搭建了基本的持续集成环境,实现了服务的自动构建和部署,但是,我们遇 ...

  8. OpenCV —— 直方图与匹配

    直方图就是对数据进行统计,将统计值组织到一系列事先定义好的bin中.bin中的数值是从数据中计算出来的特征的统计量,这些数据可以是诸如梯度,方向,色彩或任何其他特征. 直方图获得是是数据分布的统计图 ...

  9. c# Dictionary

    Dictionary<string,string>是一个泛型  有集合的功能,也可以看成一个数组:结构是这样的Dictionary<[key],[value]> 存入的对象是需 ...

  10. 多重背包模板 51Nod 1086

    有N种物品,每种物品的数量为C1,C2......Cn.从中任选若干件放在容量为W的背包里,每种物品的体积为W1,W2......Wn(Wi为整数),与之相对应的价值为P1,P2......Pn(Pi ...