day04.4-装饰器
1. 装饰器
- 装饰器本身就是函数,功能是为其他函数添加附加功能
- 装饰器的设计原则:
(a). 不修改被修饰函数的源代码;
(b). 不修改被修改函数的调用方法。
- 装饰器=高阶函数+函数嵌套+闭包
- 装饰器框架
def timmer(func):
def wrapper():
func()
return wrapper
func = timmer()
func()
2. 装饰器实例1:计算被修饰函数的运行时间
import time
def bin(name,age):
time.sleep(3)
print("I am %s, I am %s years old" %(name,age))
time.sleep(3)
def timer(func):
def wrapper(*args,**kwargs):
star = time.time()
func(*args,**kwargs)
stop = time.time()
res = stop-star
return res
return wrapper
bin = timer(bin) #相当于wrapper = timer(bin)
dif_time = bin("alex",18) #相当于dif_time = wrapper("alex",18)
print("被修饰函数的运行时间为%s" %dif_time) """
运行结果:
I am alex, I am 18 years old
被修饰函数的运行时间为6.001323223114014
"""
3. 装饰器实例2:登录界面添加身份认证功能
user_list = [{"name":"stephen","passwd":""},
{"name": "klay", "passwd": ""},
{"name": "durant", "passwd": ""},
{"name": "green", "passwd": ""}]
def home(name):
print("Welcome %s to enter the system" %name)
def certification(func):
def wrapper(name):
passwd = input("please enter your password:").strip()
for item in user_list:
if item["name"]==name and item["passwd"]==passwd:
func(name)
return 1
return 0
return wrapper
home = certification(home) #相当于wrapper = certification(home)
res = home("klay") #相当于wrapper("klay")
if not res:
print("密码或用户名输入错误")
"""
运行结果:
please enter your password:123
Welcome klay to enter the system
"""
day04.4-装饰器的更多相关文章
- python开发学习-day04(迭代器、生成器、装饰器、二分查找、正则)
s12-20160123-day04 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: ...
- Day04 - Python 迭代器、装饰器、软件开发规范
1. 列表生成式 实现对列表中每个数值都加一 第一种,使用for循环,取列表中的值,值加一后,添加到一空列表中,并将新列表赋值给原列表 >>> a = [0, 1, 2, 3, 4, ...
- day04 迭代器&生成器&装饰器
目录 1.迭代器 2.生成器 3.推导式 4.匿名函数 5.内置函数 6.递归 7.闭包 8.装饰器 一.迭代器 特点: 1. 省内存 2. 只能向前. 不能反复 3. 惰性机制 让不同的数据类型 ...
- Day04:函数参数、对象、嵌套、闭包函数和装饰器
上节课复习: 1.什么是函数 函数就是具备某一功能的工具 2.为何用函数 1.程序的组织结构和可读性 2.减少代码冗余 3.扩展性强 ...
- day04 装饰器 迭代器&生成器 Json & pickle 数据序列化 内置函数
回顾下上次的内容 转码过程: 先decode 为 Unicode(万国码 ) 然后encode 成需要的格式 3.0 默认是Unicode 不是UTF-8 所以不需要指定 如果非要转为U ...
- Python之路【第五篇】: 函数、闭包、装饰器、迭代器、生成器
目录 函数补充进阶 函数对象 函数的嵌套 名称空间与作用域 闭包函数 函数之装饰器 函数之可迭代对象 函数之迭代器 函数之生成器 面向过程的程序设计思想 一.函数进阶之函数对象 1. 函数对象 秉承着 ...
- Python 装饰器的形成过程
装饰器 定义:本质是函数,(装饰其他函数),即为其他函数添加附加功能. 原则: 1.不能修改被装饰的函数的源代码: 2.不能修改被装饰的函数的调用方式. 实现装饰器知识储备: ...
- python3.x 基础三:装饰器
装饰器:本质是函数,用于装饰其他函数,在不改变其他函数的调用和代码的前提下,增加新功能 原则: 1.不能修改被装饰函数的源代码 2.不能修改被装饰函数的调用方式 3.装饰函数对于被装饰函数透明 参考如 ...
- Python高手之路【四】python函数装饰器
def outer(func): def inner(): print('hello') print('hello') print('hello') r = func() print('end') p ...
- python装饰器
今天看了装饰器的一些内容,感觉@修饰符还是挺抽象的. 装饰器就是在不用改变函数实现的情况下,附加的实现一些功能,比如打印日志信息等.需要主意的是装饰器本质是一个高阶函数,她可以返回一个函数. 装饰器需 ...
随机推荐
- 将本地Jar包安装到maven仓库中去
开发中会遇到无法通过pom.xml下载jar包的情况,遇到这种情况我们可以手动在本地安装jar包到本地仓库中去,这样就可以下次再用到的话不用再次联网下载,具体以oracle的驱动包ojdbc6.jar ...
- proxmox 安装ROS 备忘
虚拟机设置:使用qemu64 CPU和vrtio网卡在家里测试性能最好.
- 【原】Coursera—Andrew Ng机器学习—编程作业 Programming Exercise 4—反向传播神经网络
课程笔记 Coursera—Andrew Ng机器学习—课程笔记 Lecture 9_Neural Networks learning 作业说明 Exercise 4,Week 5,实现反向传播 ba ...
- 对excel进行封装
package com.huawei.utils; import java.io.FileNotFoundException;import java.io.FileOutputStream;impor ...
- 前端开发之CSS入门篇
一.CSS介绍和语法 二.CSS引入方式 三.基本选择器 四.高级选择器 五.伪类选择器 六.伪元素选择器 1️⃣ CSS介绍和语法 1. CSS的介绍 (1)为什么需要CSS? 使用css的目的就 ...
- strncmp memcmp区别
内部实现:前者逐每个字符进行比较,并判当前字符是否为0: 后者逐内存块进行比较. 效率:后者自然要优,不论从内部实现上,还是系统优化上. 场景:后者无法替代前者.在项目中遇到一种情况,两个字符串比较, ...
- zabbix自定义key监控nginx和fpm(网站并发数)
一. nginx编译参数 监控nginx,主要讲解监控并发数 --prefix=/usr/local/nginx --with-http_stub_status_module zabbix编译参数的查 ...
- "分辨率"到底是个什么概念?它和DPI之间是什么关系?
"分辨率"到底是个什么概念?它和DPI之间是什么关系? 分辨率:显示分辨率(屏幕分辨率)是屏幕图像的精密度,是指显示器所能显示的像素有多少.由于屏幕上的点.线和面都是由像素组成的, ...
- leetcode - database - 177. Nth Highest Salary (Oracle)
题目链接:https://leetcode.com/problems/nth-highest-salary/description/ 题意:查询出表中工资第N高的值 思路: 1.先按照工资从高到低排序 ...
- jquery函数$.proxy简单示例
来自于<jquery 权威指南> ------------------------------ <!DOCTYPE html PUBLIC "-//W3C//DTD XHT ...