Python中装饰器的用法

  1. 定义:

    1. 装饰器本身就是一个函数
    2. 为其他函数提供附加功能
      1. 不改变源代码
      2. 不改变原调用方式
    3. 装饰器=高阶函数+嵌套函数
  2. 知识点:
    1. 函数本身就是一个变量(意味着可以被复制给一个变量:test=test(1) )
    2. 高阶函数
      1. 把函数名当成一个实参传递给另一个函数func(test1) (不改变源代码的前提下添加代码)
      2. 返回值中包含函数名return deco (不改变函数的调用方式)
    3. 嵌套函数:函数中加入新的函数def func1(): def func2():
  3. 典型结构:   

1 def func1(test):
2     def deco():
3         #progress
4     return deco#返回函数的地址,达到不改变调用方式的目的

完整程序:

# __Author__Panda-J____

import time

def timer(func):  # for test1 & 2
    start_time = time.time()
    func()  # run func and test its running time
    end_time = time.time()
    print("this func running time is %s" % (end_time - start_time))
return func

@timer
def test1():
    time.sleep(1)
    print("this is test1")

@timer
def test2():
    time.sleep(1)
    print("this is test2")

test1()
test2()

时间: 2024-11-02 20:31:29

Python中装饰器的用法的相关文章

8.Python中装饰器是什么?

Python中装饰器是什么? A Python decorator is a specific change that we make in Python syntax to alter functions easily. Python decorator是我们在Python语法中使用的一个特定的更改,可以轻松地改变函数. http://www.cnblogs.com/zoe233/p/7070067.html 装饰器定义: 本质是函数.函数的目的是为了完成特定的功能,那么装饰器的功能是什么呢?

对Python中装饰器(Decorator)的理解与进阶

有时候我们项目中的某些功能做些修改即需要对内部的某些函数添加一些附加功能,但是为了安全起见不想改变函数的源代码以及函数的调用方式,那么装饰器在这个地方会给我们带来很大的帮助. 装饰器(Decorator):(又叫语法糖) 定义:本质是函数,功能(装饰其它函数)就是为其他函数添加附加功能 原则:(1).不能修改被装饰的函数的源代码 (2).不能修改被装饰的函数的调用方式 1.先来实现一个简单的装饰器示例: #!/usr/bin/env python # -*- coding:utf-8 -*- #

Python编程系列---Python中装饰器的几种形式及万能装饰器

根据函数是否传参  是否有返回值 ,可以分析出装饰器的四种形式: 形式一:无参无返回值 1 def outer(func): 2 def wrapper(): 3 print("装饰器功能1") 4 ret = func() 5 print("装饰器功能2") return ret 6 return wrapper 7 8 # 定义一个无参无返回值的函数 9 @outer 10 def main_func(): 11 print("hello")

Python中装饰器(转)

本文由 伯乐在线 - 7even 翻译,艾凌风 校稿.未经许可,禁止转载!英文出处:Simeon Franklin.欢迎加入翻译组. 好吧,我标题党了.作为 Python 教师,我发现理解装饰器是学生们从接触后就一直纠结的问题.那是因为装饰器确实难以理解!想弄明白装饰器,需要理解一些函数式编程概念,并且要对Python中函数定义和函数调用语法中的特性有所了解.使用装饰器非常简单(见步骤10),但是写装饰器却很复杂. 虽然我没法让装饰器变得简单,但也许通过将问题进行一步步的讲解,可以帮助你更容易理

python中装饰器修复技术

python装饰器@wraps作用-修复被装饰后的函数名等属性的改变 Python装饰器(decorator)在实现的时候,被装饰后的函数其实已经是另外一个函数了(函数名等函数属性会发生改变), 为了不影响,Python的functools包中提供了一个叫wraps的decorator来消除这样的副作用.写一个decorator的时候,最好在实现之前加上functools的wrap, 它能保留原有函数的名称和docstring. 未加@wraps的时候: from functools impor

python中装饰器的原理

装饰器这玩意挺有用,当时感觉各种绕,现在终于绕明白了,俺滴个大爷,还是要慢慢思考才能买明白各种的真谛,没事就来绕一绕 def outer(func): def inner(): print("认证成功") result=func() print("登录成功") return result return inner@outerdef OA(): print("OA接口") 这里面需要注意的是: @outer和@outer()有区别,没有括号时,ou

python中装饰器你真的理解吗?

def w1(func): print('装饰器1....') def w1_in(): print('w1_in.....') func() return w1_in def w2(func): print('装饰器2.....') def w2_in(): print('w2_in......') func() return w2_in @w1 @w2 def f1(): print('f1....') f1() 你知道上面的代码执行的步骤吗?........................

python之装饰器 实例

=====================================写法1========================== import time def timer(func):     def deco():         start_time = time.time()         func()         stop_time = time.time()         print('the func run time is %s' %(stop_time - star

[译]Python之装饰器知必会

装饰器基础 Python的函数是对象 为了理解装饰器, 你必须先理解: 在Python的世界, 函数是对象. 这一点很重要. 让我们通过一个简单的例子来看看为什么: def shout(word="yes"): return word.capitalize()+"!" print shout() # 输出 : 'Yes!' # 作为一个对象, 你可以像任何其他对象一样, 将函数赋值给一个变量 scream = shout # 注意, 我们并没有使用括号: # 我们没