手把手教你使用python复杂一点点的装饰器

#只要@deco后面跟括号,都要 先传装饰器参数,返回 再传目标待装饰函数,返回 传目标函数的参数
#这个参数可以是类
def deco(arg):#装饰器的函数在这里传
    print(‘0‘,arg)
    def _deco(func):#装饰函数在这里传
        print(‘1‘,arg)
        def __deco():#装饰函数的参数在这里传
            print("所装饰函数 %s 调用前 [%s]." % (func.__name__, arg))
            func()
            print(" 所装饰函数 %s 调用后 [%s]." % (func.__name__, arg))
            return 1
        return __deco
    return _deco 

#@deco表示调用 deco,
#且每当调用接下来定义的函数 myfunc,则为调用 deco 返回的函数 func 

#与前面不同的地方在于,这里 @deco后面跟了(),是调用状态,
#所以会直接传参、调用deco,并调用 函数deco返回的函数_deco
#且每当调用接下来定义的函数 myfunc,则为
# 调用 传装饰器参数的deco所返回的 传所装饰函数的_deco所返回的__deco
@deco("装饰器参数")
def myfunc():
    print(" 这一句出来了证明函数 myfunc 调用了")
    return ‘ok‘#这里没用了,在deco中有用而已 

‘‘‘
这里0 1都打印出来了
‘‘‘ 

@deco("装饰器参数er")
def myfunc2():
    print(" 这一句出来了证明函数 2 调用了") 

myfunc()
print(‘\n‘) a =myfunc2()#1 返回的是deco返回的1
‘‘‘
装饰器呢,测试的时候,例如测试函数性能的时候经常用。
 写一些工具的时候,例如协服务程序的定时器的时候也经常用。
总之就有点类似 用在所写代码上的 一些工具
‘‘‘

  

作者:头条号 / 趣味Python
链接:http://toutiao.com/i6313766939822916098/
来源:头条号(今日头条旗下创作平台)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

时间: 2024-08-24 23:13:50

手把手教你使用python复杂一点点的装饰器的相关文章

手把手教你用python打造网易公开课视频下载软件3-对抓取的数据进行处理

上篇讲到抓取的数据保存到rawhtml变量中,然后通过编码最终保存到html变量当中,那么html变量还会有什么问题吗?当然会有了,例如可能html变量中的保存的抓取的页面源代码可能有些标签没有关闭标签,例如<div>hello</,这样的错误,那么怎么处理呢?接着看下面的代码: soup=BeautifulSoup(html) 其中利用模块BeautifulSoap,可能很方便去整理html源文件内容,这里我写了个小例子,大家看一下,代码如下: html='<html>&l

手把手教你用python打造网易公开课视频下载软件4-图形化界面

上一篇讲解完函数:def getdownLoadInfo (url): 传入公开课的url地址,就可以提取课程的信息,这一篇讲解一下如何编写图像化界面.大概思考一下图像化界面需要的内容: (1)一个标签:显示为:"请输入公开课地址" (2)一个文本框:用来输入地址 (3)一个按钮:点击用来提取视频信息 (4)一个标签和多行文本框,其中标签用来显示课程信息,多行文本用来显示下载链接 完成后的效果图如下: 我们先贴出代码: #创建APP app=wx.App(False) #创建frame

手把手教你搭建Python虚拟环境,还不会赶紧收藏学习哦!

不同的python项目可能会用到不同的包,而不同的包或不同的python版本之间可能存在冲突.因此,为每个项目创建不同的虚拟环境非常有用.它可以保证一个项目只访问,它所在虚拟环境下安装的包,保持全局解释器的干净整洁,而且由于环境是独立的,因此不需要超户权限. 创建虚拟环境的方式一般有以下几种. 一种是自Python 3.3增加的用于创建虚拟环境的venv标准库.使用这种方法会在指定目录下,创建一个指定虚拟环境名字的文件夹. 像下面这样,在我创建了一个名为 vir1 的虚拟环境后,产生了一个对应的

手把手教你把Python应用到实际开发 不再空谈语法

手把手教你把Python应用到实际开发 不再空谈语法 1. 字典推导(Dictionary comprehensions)和集合推导(Set comprehensions) 大多数的Python程序员都知道且使用过列表推导(list comprehensions).如果你对list comprehensions概念不是很熟悉——一个list comprehension就是一个更简短.简洁的创建一个list的方法. >>> some_list = [1, 2, 3, 4, 5] >&

手把手教你使用Python抓取QQ音乐数据!

[一.项目目标] 通过手把手教你使用Python抓取QQ音乐数据(第一弹)我们实现了获取 QQ 音乐指定歌手单曲排行指定页数的歌曲的歌名.专辑名.播放链接. 通过手把手教你使用Python抓取QQ音乐数据(第二弹)我们实现了获取 QQ 音乐指定歌曲的歌词和指定歌曲首页热评. 通过手把手教你使用Python抓取QQ音乐数据(第三弹)我们实现了获取更多评论并生成词云图. 此次我们将将三个项目封装在一起,通过菜单控制爬取不同数据. [二.需要的库] 主要涉及的库有:requests.openpyxl.

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

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

Python基础(八)装饰器

今天我们来介绍一下可以提升python代码逼格的东西——装饰器.在学习装饰器之前我们先来复习一下函数的几个小点,方便更好的理解装饰器的含义. 一.知识点复习 1, 在函数中f1和f1()有什么不同,f1:表示的是将整个函数看作一个整体:f1():表示执行f1函数,下面通过一个例子来看一下: 1 2 3 4 5 def f1():     print('f1') f1                    #代表函数体本身,什么也不操作 f1()                  #代表执行函数

python中的无参装饰器和有参装饰器

python中的无参装饰器和有参装饰器 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 装饰器特点: 1>.开放封闭原则,即对扩展是开放的,对修改时封闭的: 2>.装饰器本质可以是任意可调用的对象,被装饰的对象也可以是任意可调用对象: 3>.装饰器的功能是在不修改被装饰器对象源代码以及被装饰器对象的调用方式的前提下为其扩展新功能: 4>.装饰器本质是函数,(即装饰其他函数)就是为其他函数添加附加功能. 一.典型装饰器案例 1 #!/usr/bin/env pyth

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