python 装饰器的用法

为什么要使用装饰器?

在不改变原函数功能的情况,为了添加新的功能 我们可以在函数运行前后给函数添加新的功能

 1 def outer(func):
 2     #fun()等于原f1函数
 3     def inner():
 4         print(‘ccccc‘)
 5         r=func()
 6         print(‘dddd‘)
 7         return r
 8     return inner
 9 @outer
10 #@outer代表运行了2个步骤:1.将f1作为参数运行outer函数,2.新函数f1=inner()
11 def f1():
12     print(‘很复杂‘)
13 r=f1()
14 print(r)
15 #输出:ccccc
16 #     很复杂
17 #    dddd
18 #    None

两个装饰器的作用

def outer_1(func):
    def inner(*args,**kwargs):
        print(‘aaaa‘)
        r=func(*args,**kwargs)
        print(‘bbbb‘)
        return r
    return inner

def outer(func):
    def inner(*args,**kwargs):
        print(‘ccccc‘)
        r=func(*args,**kwargs)
        print(‘dddd‘)
        return r
    return inner

@outer_1
@outer
def f1(a1,a2):
    print(‘很复杂‘)
    return a1+a2

r=f1(2,4)
print(r)
#输出:
aaaa
ccccc
很复杂
dddd
bbbb
6
时间: 2024-08-04 18:31:50

python 装饰器的用法的相关文章

Python装饰器主要用法

#!/usr/bin/env python3 # -*- coding: utf-8 -*- __author__ = '人生入戏' user = "admin" passwd = "123456" def auth(auth_type): #print("auth_type:",auth_type) def out_wrapper(func): #print("func",func) def wrapper(*args,**

python装饰器高级用法

1.装饰类 下面,直接来看代码是如何实现装饰类的: def decorator(aClass): class newClass: def __init__(self, age): self.total_display = 0 self.wrapped = aClass(age) def display(self): self.total_display += 1 print("total display", self.total_display) self.wrapped.displa

python装饰器的用法

def logger(func): def inner(*args, **kwargs): #1 print "Arguments were: %s, %s" % (args, kwargs) return func(*args, **kwargs) #2 return inner >>> @logger ... def foo1(x, y=1): ...     return x * y >>> @logger ... def foo2(): ..

Python装饰器的另类用法

之前有比较系统介绍过Python的装饰器,本文算是一个补充.今天我们一起探讨一下装饰器的另类用法. 语法回顾 开始之前我们再将Python装饰器的语法回顾一下. @decorate def f(...): pass 等同于: def f(...): pass f = decorate(f) @语法的好处在于: 相同的函数名只出现一次,避免了f = decorate(f)这样的语句. 可读性更高,让读代码的人一眼就明白函数被装饰了哪些功能. @call()装饰器 假设你要创建一个整数平方的列表,你

5.初识python装饰器 高阶函数+闭包+函数嵌套=装饰器

一.什么是装饰器? 实际上装饰器就是个函数,这个函数可以为其他函数提供附加的功能. 装饰器在给其他函数添加功能时,不会修改原函数的源代码,不会修改原函数的调用方式. 高阶函数+函数嵌套+闭包 = 装饰器 1.1什么是高阶函数? 1.1.1函数接收的参数,包涵一个函数名. 1.1.2 函数的返回值是一个函数名. 其实这两个条件都很好满足,下面就是一个高阶函数的例子. def test1(): print "hamasaki ayumi" def test2(func): return t

Python装饰器由浅入深

装饰器的功能在很多语言中都有,名字也不尽相同,其实它体现的是一种设计模式,强调的是开放封闭原则,更多的用于后期功能升级而不是编写新的代码.装饰器不光能装饰函数,也能装饰其他的对象,比如类,但通常,我们以装饰函数为例子介绍其用法.要理解在Python中装饰器的原理,需要一步一步来.本文尽量描述得浅显易懂,从最基础的内容讲起. (注:以下使用Python3.5.1环境) 一.Python的函数相关基础 第一,必须强调的是python是从上往下顺序执行的,而且碰到函数的定义代码块是不会立即执行它的,只

深入浅出 Python 装饰器:16 步轻松搞定 Python 装饰器

Python的装饰器的英文名叫Decorator,当你看到这个英文名的时候,你可能会把其跟Design Pattern里的Decorator搞混了,其实这是完全不同的两个东西.虽然好像,他们要干的事都很相似--都是想要对一个已有的模块做一些"修饰工作",所谓修饰工作就是想给现有的模块加上一些小装饰(一些小功能,这些小功能可能好多模块都会用到),但又不让这个小装饰(小功能)侵入到原有的模块中的代码里去.但是OO的Decorator简直就是一场恶梦,不信你就去看看wikipedia上的词条

python装饰器方法

前几天向几位新同事介绍项目,被问起了@login_required的实现,我说这是django框架提供的装饰器方法,验证用户是否登录,只要这样用就行了,因为自己不熟,并没有做过多解释. 今天查看django官网,忽然发现,装饰器用法并不是django框架提供的,而是python的一种语法,真心汗一个,自以为python用的很熟了,看来是井底之蛙! 恰逢周末,静下心来了解一下python的装饰器方法. 谈到代码里的装饰器,很自然的想到了设计模式中的装饰器模式,为了防止再次张冠李戴,特意翻了翻设计模

一段小代码说明@property装饰器的用法

#coding:utf-8 """ 一段小代码说明@property装饰器的用法.__name是私有变量 外部不能通过foo.__name访问,但可以通过foo._Foo__name访问. 如果想通过点运算符设置和访问实例属性怎么办,@property派上用途了, 先将一个方法头上加上@property,这个方法就变成实例属性了,再加上这个@get_name.setter 装饰器(@属性名.setter)就可以通过赋值来设置属性. python北京周末培训班 https://