Python装饰器

Python装饰器 信大家在

探索过程中已经了解装饰器的作用,也有很多花里胡哨的介绍。

这次小冰也来讲解一下关于Python装饰器的一些小知识。

它的作用:

  • 性能测试
  • 日志
  • 安全验证
    ......

相信大家已经迫不及待的想知道怎么个用法啦~

就用性能测试这个话题来说吧。
比如测试运行时间

比如我们要测试执行一个函数要花的时间。

我们可以这样子写:

#-*-coding:utf-8-*- import time def foo():     pass start = time.time()
foo()
end = time.time()

print("运行耗时:", end - start)

看起来暂时没什么压力对吧。  

好的,我们如果我们要对一大堆函数进行性能测试,那么我们要写多少个重复的代码呀,这得浪费多少时间呀。  

这会咋们有救啦!用装饰器

#-*-coding:utf-8-*- import math #装饰器 def test(func):     def wrapper():         start = time.time()
        #执行要测试的函数         func()
        end = time.time()
        print(func.__name__, "运行耗时:", end - start)
    return wrapper @test def foo1():     pass @test def = foo2():     pass # ....... @test def foon():     pass #执行函数 foo1()
foo2()
foon()

emmmm开始有点样子了~~
但这是个什么原理呢?
小冰就用一点都不专业的方式给大家解释解释:

首先,我们先写好一个装饰器函数,装饰器是要给Py解释器看的,当然想让它看中你就得包装好啦。比如上面的装饰器test中的wrapper是干啥子的?!!wrapper就是把装饰好的函数给Py解释器,让他去执行。

那要给函数传参数怎么办!!!Σ(*゚д゚ノ)ノ
那要取回函数的返回值怎么办!!!(|||゚д゚)
别着急,咋们给这个test再升级!

看代码:

#-*-coding:utf-8-*- import time def test(func):     def wrapper(n):         start = time.time()
        ret = func(n)
        end = time.time()
        print(func.__name__, "运行耗时:", end - start)
        return ret
    return wrapper #这回就来测一测循环运行n次所消耗的时间吧 @test def counter(n):     ret = 0     #来个猛一点     for number in range(n**n):
        x = number ** number
        y = number ** number  ** number
        ret += x ** y
    return ret #运行函数 retNum1 = counter(520)
retNum2 = counter(1314)

print("结果1:", retNum1)
print("结果2:", retNum2)

到这里相信大家对这个神秘而又,,,忘词了,不管他…

来实践一下吧,这回咋们弄一个安全验证。

#-*-coding:utf-8-*- #这个是加密解密模块 #jiamijiemi.py import xxx
from xxxx import xx #假装我们已经写好了对账户密码进行加密和解密的函数。 __all__ = ["jiaMi", "jieMi"] #加密 def jiaMi(data):
    pass
    return reData  #加密后的数据 #解密 def jieMi(data)
    pass
    return reData  #解密后的数据

emmmm,还有一个存相互密码的加密文本呢。

key.jiami假装这是一个加密过的文本

account:小冰哟
password:lovingxiaobing

比如我们有一个函数,要去运行它要有权限,权限哪里来呢,要登录才能得到权限去运行它,怎么做么,看我操作!!!

#-*-coding:utf-8-*- from jiamijiemi import * #安全验证 def login(mySecretFunc):     def run(**kw):         with open("key.jiami", "rb") as data
        #假装在解密             kansee = jieMi(data.read())

            acAndPas = kansee.split("\n")

            account = input("输入账号:")
            password = input("输入密码:")
            if account==acAndPas[0] and password==acAndPas[1]:
                print("暖心小提示:看看周围有没有人再调高音量哟")
                return mySecretFun(**kw)
            else:
                raise ValueError("登录验证失败!") return run @login def findMyGirl(**kw):     name = kw.get("name", None)
    #默认视频     types = kw.get("types", "movie")
    if name==None:
        print("乱来,先别激动")
        exit(-1)
    #这里省略n行代码,查找隐藏在硬盘里的女神     #这个是查找到的结果     #resultList     return resultList

movie = findMyGirl(name = "仓xx", types = "movie")
pic = findMyGirl(name = "xx麻子xx依", types = "pictrue")

print("查找到的电影:", movie)
print("查找到的图片:", pic)

我:还有么?
python:当然了~~
我:(゚д゚≡゚д゚)
python:我不仅会用函数装饰器来打扮,而且还有类装饰器呢~~ㄟ(≧◇≦)ㄏ
我:Σ( ° △ °)
我和Python:敬请期待下一期吧~~~

你们肯定偷偷的copy实践代码,肯行跑不起来,哈哈哈。_仅供参考_哟~~~

3,035 ° 来自:PC 重庆市
上一篇: (python)12306车票剩余数查询
下一篇: python爬取LOL高清皮肤
您可能还喜欢这些:

亲,沙发正空着,还不快来抢?

评论审核未开启 记住我的个人信息 回复后邮件通知我
Back to Top