python学习系列之python装饰器基础(1)

  1. 创建装饰器
# basic.py

#首先定义一个装饰器auth:

#一般装饰器
def auth(func):
    def inner():
        print ‘before‘
        func()
        print ‘after‘
    return inner

#带1个参数的装饰器
def auth_arg(func):
    def inner(arg):
        print ‘before‘
        func(arg)
        print ‘after‘
    return inner
    
#带多个参数的装饰器
def auth_args(func):
    def inner(*arg, **kwargs):
        print ‘before‘
        func(*arg,**kwargs)
        print ‘after‘
    return inner   

    
@auth
def f1():
    print ‘f1‘

@auth
def f2():
    print ‘f2‘

@auth
def f3():
    print ‘f3‘

#使用带1个参数的装饰器
@auth_arg
def f4(arg):
    print ‘f4‘,arg
    
#使用带多个参数的装饰器   
@auth_args
def f5(arg1,arg2,arg3,arg4):
    print ‘f5‘,arg1,arg2,arg3,arg4

2.另一个py文件调用这个装饰器

#test.py

#coding:utf-8
#!/usr/bin/env python

import basic

basic.f1()
basic.f2()
basic.f3()

#使用带1个参数的装饰器
basic.f4(‘123‘)
#使用带多个参数的装饰器
basic.f5(‘a‘,‘b‘,‘c‘,‘d‘)

3.最后效果:

$python test.py

before
f1
after
before
f2
after
before
f3
after
before
f4 123
after
before
f5 a b c d
after

4.总结

经过上面几个例子,我们发现,使用动态参数是比较方便万能的,可适用参数不固定的情况,因此该basic.py脚本可以改写为:

# basic.py

    
#动态参数的装饰器
def auth(func):
    def inner(*arg, **kwargs):
        print ‘before‘
        func(*arg,**kwargs)
        print ‘after‘
    return inner   

    
@auth
def f1():
    print ‘f1‘

@auth
def f2():
    print ‘f2‘

@auth
def f3():
    print ‘f3‘

@auth
def f4(arg):
    print ‘f4‘,arg
    
@auth
def f5(arg1,arg2,arg3,arg4):
    print ‘f5‘,arg1,arg2,arg3,arg4
时间: 11-27

python学习系列之python装饰器基础(1)的相关文章

Python学习之三大名器-装饰器、迭代器、生成器

Python学习之三大名器-装饰器.迭代器.生成器 一.装饰器     装饰,顾名思义就是在原来的基础上进行美化及完善,器这里指函数,所以说装饰器就是装饰函数,也就是在不改变原来函数的代码及调用方式的前提下对原函数进行功能上的完善.其核心原理其实是利用闭包.     格式 @关键字+装饰函数          被装饰函数()      注意:@行必须顶头写而且是在被装饰函数的正上方     按照形式可以分为:无参装饰器和有参装饰器,有参装饰器即给装饰器加上参数     以下示例是一个无参装饰器,

Python学习系列(八)( 面向对象基础)

 Python学习系列(八)( 面向对象基础) Python学习系列(七)( 数据库编程) 一,面向对象 1,域:属于一个对象或类的变量.有两种类型,即实例变量—属于每个实例/类的对象:类变量—属于类本身. 2,类的方法:对象也可以使用属于类的函数来具有功能,这样的函数称之为类的方法.域和方法合称为类的属性.类使用class关键字创建,类的属性被列在一个缩进块中. 3,self:类的方法与普通的函数只有一个特别的区别----他们必须有一个额外的第一个参数名称,但是在调用的时候不能为其赋值,Pyt

python学习系列之python装饰器基础(2)---装饰含返回值的函数

在上篇基础(1)中,我写了一个装饰器及使用方法,但是如果遇到一个函数带返回值的话,就不好使了,因此重写一个装饰器如下: #basic2.py #coding:utf-8 def auth(func):     def inner(*arg, **kwargs):         print 'before'         temp = func(*arg,**kwargs) #这行是关键,func相当于fetch_server_list         print 'after'       

python学习系列之python装饰器基础(5)---多装饰器的使用

有些时候,可能实际工作中需要同时使用多个装饰器,具体怎么用,见代码: #basic5.py def auth1(func):     def inner():         print 'before 1'         func()         print 'after 1'     return inner def auth2(func):     def inner():         print 'before 2'         func()         print '

python学习系列之python装饰器基础(6)---装饰器加参数

一.常规的装饰器,比如 @auth,执行2步操作: 1.执行auth函数,并传参func进来 2.获取返回值,并赋值给被装饰器的函数的函数名(如让fetch_server_list等于返回值) 二.而带参数的装饰器,比如 @auth(before,after),则执行3步操作: 1.执行auth(before,after)这个函数,得到返回值ret(假设返回值为ret) 2.创建装饰器,获取返回值,拼接为@ret 3.相当于@auth函数的2个步骤: 1)执行ret函数 2)将ret函数的返回值

python学习笔记7:装饰器

一.什么是装饰器 装饰器,它本身是一个函数. 装饰器的作用在于,在不改变现有函数的调用方式的前提下,给其新增一些功能:这些功能一般都是公用的. 它经常用于有切面需求的场景,比如:插入日志.性能测试.事务处理.缓存.权限校验等场景.(此句引用:https://zhuanlan.zhihu.com/p/25648515) 二.学装饰器的前提知识 1.函数即变量 2.高阶函数 3.函数嵌套 以上三个知识点,在我的上一篇博客'python学习笔记6:函数'里 有详细介绍,这里不赘述 三.一个例子 1.场

python 学习笔记7(装饰器)

闭包(closure)是函数式编程的重要的语法结构. 定义:如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包(closure). def outer(): x = 1 def inner(): print(x) return inner f = outer() f() inner就是内部函数,inner里引用了外部作用域的变量x(x在外部作用域outer里面,不是全局作用域),则这个内部函数inner就是一个闭包. 闭包=函数块+定义函数时的环

Python学习之路7?装饰器

一:命名空间与作用域 1.1命名空间 局部命名空间: def foo(): x=1 def func(): pass 全局命名空间: import time class ClassName:pass def foo():pass 内键命名空间: sum,max,min 等 python加载三个命名空间的顺序: 1.内键命名空间 2.全局命名空间:文件级别的或叫做模块级别的 3.局部命名空间:只有调用函数的时候才会加载,函数调用结束就被释放掉 1.2作用域 全局作用域: 1 同时x=1为全局变量

python学习进度14(装饰器)

由于函数也是一个对象,而且函数对象可以被赋值给变量,所以,通过变量也能调用该函数. >>> def now(): ... print('2015-3-25') ... >>> f = now >>> f() 2015-3-25 函数对象有一个__name__属性,可以拿到函数的名字: >>> now.__name__ 'now' >>> f.__name__ 'now' 现在,假设我们要增强now()函数的功能,比如