装饰器的作用

相信大家在

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

这次小冰也来讲解一下关于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实践代码,肯行跑不起来,哈哈哈。_仅供参考_哟~~~

python简单装饰器_简单介绍Python装饰器(一)相关推荐

  1. python中整型_实例介绍Python中整型

    实例介绍Python中整型 Python中有以下几个基本的数据类型: 整数 int 字符串 str 浮点数 float 集合 set 列表 list 元组 tuple 字典 dict 布尔类型 boo ...

  2. python or的用法_详细介绍Python中and和or实际用法

    and 和 or 的特殊性质 在Python 中,and 和 or 执行布尔逻辑演算,但是它们并不返回布尔值:而是,返回它们实际进行比较的值之一.下面来看一下实例.>>> 'a' a ...

  3. python链表详细教程_详细介绍python数据结构之链表

    这篇文章主要为大家详细介绍了python数据结构之链表的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 数据结构是计算机科学必须掌握的一门学问,之前很多的教材都是用C语言实现链表,因为c有 ...

  4. java和python结合做项目_由浅入深Java+Python结合项目实战

    [课程内容] [初级项目:图片社交+电商导购+漂流瓶] 项目实现功能: 用户注册,登录,登出图片的多种上传方式,删除首页图片分类,排序和分页个人页管理图片分享 课程内容: 开发工具和Python语言介 ...

  5. python中len用法_简单介绍Python中的len()函数的使用

    简单介绍Python中的len()函数的使用 函数:len() 1:作用:返回字符串.列表.字典.元组等长度 2:语法:len(str) 3:参数:str:要计算的字符串.列表.字典.元组等 4:返回 ...

  6. 什么是python装饰器_深入理解 Python 装饰器

    作者简介 曾凡伟,携程信息安全部高级安全工程师,2015年加入携程,主要负责安全自动化产品的设计和研发,包括各类扫描器.漏洞管理平台.安全 SaaS 平台等. Python 是一门追求优雅编程的语言, ...

  7. python实现ping命令_[小菜随笔]python tkinter实现简单的ping命令

    本文主要是介绍python图形界面上的按键与实际功能的对接,其实编程掌握了基础之后的学习应该都是靠自己去挖掘其他的 在网上发现多半教程都是2的,故本文使用的是python3.5,其实也没什么区别,就有 ...

  8. python opencv 界面按钮_如何使用Python构建简单的UI?

    借助Streamlit框架,使用用户界面展示Python项目变得前所未有的简单,你可以仅仅使用Python代码来构建基于浏览器的UI.本次演示将为迷宫求解器程序构建UI.StreamlitStream ...

  9. python中输入字符串_简单讲解Python中的字符串与字符串的输入输出

    简单讲解Python中的字符串与字符串的输入输出 发布于 2016-03-26 14:35:42 | 110 次阅读 | 评论: 0 | 来源: 网友投递 Python编程语言Python 是一种面向 ...

最新文章

  1. 看懂OpenCV中IplImage转换成CvMat的语句:CvMat sstub, *src = cvGetMat(srcarr, sstub);
  2. 国家电网公司“SG186”工程总部企业门户开发实施
  3. windows 10占用cpu和内存过高
  4. 逃离数学焦虑、算法选择,思考做好机器学习项目的3个核心问题
  5. 多CPU,多核,多进程,多线程以及进程和线程的简单理解以及区别
  6. 张萍萍山东大学计算机科学系毕业生,并行驰骋,放“码”来战!看先导杯大奖赛上山大风采...
  7. linux aio拷贝文件,Linux通过AIO进行异步读文件
  8. thinkphp 捕捉错误
  9. ldap 测试表设计
  10. OpenCV实战 | 低对比度缺陷检测应用实例--LCD屏幕脏污检测
  11. Ubuntu18.04安装CAJ阅读器
  12. uniapp上拉加载
  13. ElasticSearch已有字段添加Fields
  14. mysql myisam转innodb_WordPressMySQL数据库MyISAM表转换InnoDB方法和修复工具
  15. [BZOJ 3653] 谈笑风生
  16. Android Design - 设计风格
  17. 【Arduino】关于使用USB-ISP烧入bootloader的一些记录
  18. 2018年度锦鲤已出! 抽中奖的重点是什么?
  19. Meta宣布大裁员,超11000人!毕业前夜员工瑟瑟发抖,坐等明早的大礼包开奖!...
  20. SEO写作中五个最常见的问题

热门文章

  1. HBM2E Flashbolt--提升人工智能的算力
  2. 代码生成codegen
  3. 大规模数据处理Apache Spark开发
  4. Kaggle上的犬种识别(ImageNet Dogs)
  5. TensorFlow基础剖析
  6. python 爬取手机app的信息
  7. 第一个python程序:定义,列表,元组,集合,求并集交集,键和值,运算符,缩进
  8. C++ sizeof 运算符的使用
  9. python 在字典插入值和修改字典value值的方法
  10. Java语言中的数据类型