装饰器@decorator理解(需补充.....)

def w1(fun):
    def inner1(arg):
        print("h")
        return fun(arg)

    return inner1

@w1
def w(arg):
    print(‘ello‘)

w()

理解:1、代码从上到下执行,将w1放内存,然后遇到了@w1

     2、@w1就会把w函数,当作参数放入w1中,既:fun = w,就会执行w1函数

     3、执行w1函数时,将inner1放内存,并且返回一个inner1函数名给w 既然 w = inner1

4、此时w()函数仍然存在,与其同名的w变量(既inner1)指向新的函数inner1()

   5、继续往下执行,当遇到w()时,先执行新的w()函数(既inner()函数),打印出h

     6、在调用原始函数,打印ello

时间: 2024-10-12 08:07:59

装饰器@decorator理解(需补充.....)的相关文章

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

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

python之我对装饰器的理解

从一开始学习python的时候,就一直不是很理解装饰器是个什么东东,再看了很多篇博文和自己动手敲了好多代码后,算是略有了解. 我理解的装饰器是: 在不改变原有函数调用的情况下,对其进行包装,使其变成另外一种函数来使用,一般的用途是 插入日志.性能测试.事务处理等. def host_restrict(tags=[], names=[]):     def decorator(f):         @functools.wraps(f)         def decorated(*args, 

[Python] 对 Python 装饰器的理解的一些心得分享出来给大家参考

最近写一个py脚本来整理电脑中的文档,其中需要检校输入的字符,为了不使代码冗长,想到使用装饰器. 上网搜索有关python的装饰器学习文档,主要看的是AstralWind的一篇博文,以及Limodou的一篇文章.作为初学者,这两篇文章对新手有很大的帮助,但仍然有些不易理解的地方.因此在此以一个初学者的认知记录一下python的装饰器的学习心得. 1. 什么是装饰器? 顾名思义,装饰器就是在方法上方标一个带有@符号的方法名,以此来对被装饰的方法进行点缀改造. 当你明白什么是装饰器之后,自然会觉得这

转发对python装饰器的理解

[Python] 对 Python 装饰器的理解的一些心得分享出来给大家参考 原文  http://blog.csdn.net/sxw3718401/article/details/39519587 主题 Python 最近写一个py脚本来整理电脑中的文档,其中需要检校输入的字符,为了不使代码冗长,想到使用装饰器. 上网搜索有关python的装饰器学习文档,主要看的是 AstralWind的一篇博文,以及Limodou的一篇文章.作为初学者,这两篇文章对新手有很大的帮助,但仍然有些不易理解的地方

python装饰器(decorator)

最近在自学Python,在装饰器这里迷惑了我很久,有几个问题一直困惑着我.1.装饰器的语法原理:2.为什么要用装饰器: 首先来看一下装饰器的原理.总而言之,装饰器就是函数或者类作为函数的返回值.将函数或者类作为装饰器的参数传递之后,装饰器对该函数或者类进行相应操作后再将其返回.这就是装饰器的基本原理.举个例子来讲,我们定义装饰器decorator,定义函数f.其过程便如下:f=decorator(f).这里显得很抽象,我们用具体的例子来描述一下其意思.这里我们定义了一个函数: 1 def rec

python入门(六)装饰器的理解

装饰器用于拓展原有函数功能的一种函数比如: def helloWorld(fun) def out() print ("======start========") fun() print ("=====end======") return out @helloWorld def back () print ("let's go") back() 运行结果: ======start======== let's go =====end====== b

请设计一个有参装饰器decorator,它可作用于任何函数上

最近有小伙伴面试,遇到一个很有意思的题:请设计一个有参装饰器decorator,它可作用于任何函数上,要求可以接受一个int作为参数,该参数为要求的执行秒数,如果该函数的执行时间大于规定的执行秒数,请打印改函数名字和执行时间. 这个题我之前面试的也遇到过,当时用高阶函数的方式实现,现在又遇到了,废话少说,咱们开发. 先来分析下: 1 有参数的装饰器 --> 高阶函数 2 执行时间 --> time 库 上代码: from functools import wraps import time #

十、PYTHON 学习之装饰器加深理解

在第六章已经有所介绍,这里看到一篇比较好的文章转过来. 基本概念 装饰器是23z种设计模式之一,经常被用于有切面需求的场景,较为经典的有插入日志.性能测试.事务处理, Web权限校验, Cache等. 很有名的例子来理解,咖啡,加糖的咖啡,加牛奶的咖啡. 本质上,还是咖啡,只是在原有的东西上,做了"装饰",使之附加一些功能或特性. 例如记录日志,需要对某些函数进行记录 笨的办法,每个函数加入代码,如果代码变了,就悲催了 装饰器的办法,定义一个专门日志记录的装饰器,对需要的函数进行装饰.

就谈个py 的装饰器 decorator

很早很早就知道有这么个 装饰器的东西,叫的非常神秘. 包括c#  和 java 中都有这个东西, c#中叫做attribut 特性,java中叫做Annotation 注解,在偷偷学习c#教程的时候,我承认我 看了盗版的视频,上边的讲师一带而过,说过这个东西,所以我觉得这个东西很是高达上,这里不说这两个语言,就单说python python中实现这个 很简单,当然如果支持这种语法的话,方式是一样的. 很多程序员就喜欢把简单的东西弄复杂了,例如我,说了 这么一大堆,还没到正题,只是我要讲起来这个东