day05-装饰器作业
装饰器的重要内容
functools.wraps
带参数的装饰器
多个装饰器装饰同一个函数 一.编写一个装饰器,为多个函数添加登陆认证的功能。具体:只需要登录一次,后面被装饰的函数不需要重新登陆。
FLAG = False
def wrapper(f):
def inner(*args,**kwargs):
global FLAG
if FLAG == True:
ret = f(*args, **kwargs)
return ret
else:
username = input('username:')
password = input('password:')
if username == 'daxiong' and password == '':
FLAG = True
ret = f(*args,**kwargs)
return ret
else:
print('登陆失败')
return inner
@wrapper
def a():
return '今晚中大奖' @wrapper
def b():
return '奖金八百万' print(a())
print(b()) 二.带参数的装饰器:
def wrapper(f):
def inner(*args,**kwargs):
ret = f(*args,**kwargs)
return ret
return inner
@wrapper
def func():
return '双色球中奖800万' #.__name__是求出字符串格式的函数名,用于文件操作。
print(func.__name__) #因为func=inner,执行func相当于执行inner,所以执行结果是inner from functools import wraps #加上这句话以及 @wraps(f),print(func.__name__)的执行结果是func.否则就是inner。
def wrapper(f):
@wraps(f) #带参数的装饰器,带参数的语法糖。
def inner(*args,**kwargs):
ret = f(*args,**kwargs)
return ret
return inner
@wrapper
def func():
return '双色球中奖800万'
print(func.__name__) #执行结果是func 三.带参数的装饰器,装饰多个函数,方便好用。FLAG相当于开关,当开关是True,被装饰的函数走的是计算时间的通道,当开关是False时,走另外一条通道。
FLAG = True #使用全局变量,True时,所有函数都被装饰,否则不被装饰。
import time
def wrapper(fl): #让语法糖带参数(传入全局变量),必须定义一个外层函数。最多三层。三层嵌套函数。
def timmer(f):
def inner(*args,**kwargs):
global FLAG
if FLAG:
start = time.time()
time.sleep(0.01)
ret = f(*args,**kwargs)
end = time.time()
print(end - start)
return ret
else:
print('当FLAG为False时,时间装饰器不起作用')
return inner
return timmer #timmer=wrapper(FLAG)
@wrapper(FLAG) #timmer=wrapper(FLAG),所以@wrapper(FLAG)就是@timmer
def a():
return '我要中双色球一等奖'
@wrapper(FLAG)
def b():
return '奖金800万'
print(a())
print(b())
#注意:带参数的装饰器是三层函数,由参数 FLAG=1,2,其他 来控制选择哪一种功能。 FLAG = 1 #FLAG=1,2,其他
import time def wapper(f1):
def timmer(f):
def inner(*args,**kwargs):
global FLAG
if FLAG == 1:
start = time.time()
time.sleep(0.1)
n = f(*args, **kwargs)
end = time.time()
print(end-start)
return n
elif FLAG == 2:
print('')
n = f(*args, **kwargs)
return n
else:
print('其他')
n = f(*args, **kwargs)
return n
return inner
return timmer @wapper(FLAG)
def f1():
print('f1111') @wapper(FLAG)
def f2():
print('f22222') f1()
f2()
四.使用多个装饰器来装饰同一个函数。用处:记录用户的登录情况,计算这个函数的执行时间。
def wrapper1(f):
def inner():
print('wrapper1 before')
f()
print('wrapper1 after')
return inner
def wrapper2(f):
def inner():
print('wrapper2 before')
f()
print('wrapper2 after')
return inner @wrapper2
@wrapper1
def func():
print('明天继续加油')
func()
#wrapper2 before
#wrapper1 before
#明天继续加油
#wrapper1 after
#wrapper2 after
day05-装饰器作业的更多相关文章
- Day 11 函数名,闭包,装饰器. +作业
		
'''一.函数名.def func(): print(5555)print(func)#输出结果 <function func at 0x026B5E88> 打印函数地址. # 1. 函数 ...
 - s5_day7装饰器作业
		
# 一:编写函数,(函数执行的时间是随机的) import time import random # def foo(): # time.sleep(random.randrange(1,5)) # ...
 - Day05:装饰器,三元表达式,函数的递归,匿名/内置函数,迭代器,模块,开发目录
		
上节课复习:1.函数的对象 函数可以被当作数据取处理2.函数嵌套 嵌套调用:在调用一个函数时,函数体代码又调用了其他函数 嵌套定义:在一个函数内部又定义了另一个函数 def foo( ...
 - Python 迭代器&生成器,装饰器,递归,算法基础:二分查找、二维数组转换,正则表达式,作业:计算器开发
		
本节大纲 迭代器&生成器 装饰器 基本装饰器 多参数装饰器 递归 算法基础:二分查找.二维数组转换 正则表达式 常用模块学习 作业:计算器开发 实现加减乘除及拓号优先级解析 用户输入 1 - ...
 - 函数和常用模块【day05】:装饰器高潮(三)
		
本节内容 1.概述 2.装饰器定义 3.装饰器定义 4.带参数的生成器 一.概述 我们之前介绍了大幅片的内容,感觉跟装饰器半毛钱关系都没有,其实不然,我们分别详细阐述了高阶函数和内置函数,下面我们就来 ...
 - 函数和常用模块【day05】:装饰器前奏(一)
		
本节内容 定义 原则 实现装饰器的储备知识 函数及变量 高阶函数 一.定义 1.装饰器:本质是函数. 2.功能:用来装饰其他函数,顾名思义就是,为其他的函数添加附件功能的. 二.原则 不能修改被装饰函 ...
 - Python之路第一课Day4--随堂笔记(迭代生成装饰器)
		
上节回顾: 1.集合 a.关系测试 b.去重 2.文件操作及编码 3.函数 4.局部变量和全局变量 上节回顾 本节课内容: 1.迭代器生成器 2.装饰器 3.json pickle数据序列化 4.软件 ...
 - Python_Day_5装饰器、字符串格式化、序列化、内置模块、生成器、迭代器之篇
		
一.装饰器 为什么要用装饰器??? 在实际的开发环境中应遵循开发封闭原则,虽然在这个原则是用的面向对象开发,但也适用于函数式编程,简单地说,它规定已经实现的功能代码不是允许修改的,但是可以被扩展: 封 ...
 - Day04 - Python 迭代器、装饰器、软件开发规范
		
1. 列表生成式 实现对列表中每个数值都加一 第一种,使用for循环,取列表中的值,值加一后,添加到一空列表中,并将新列表赋值给原列表 >>> a = [0, 1, 2, 3, 4, ...
 - Day4 - Python基础4 迭代器、装饰器、软件开发规范
		
Python之路,Day4 - Python基础4 (new版) 本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 ...
 
随机推荐
- PSI-BLAST|PHI-BLAST|UniProt|IGV|Galaxy|clustalx
			
生物信息学软件: NCBI:BLAST,设定k-mer 默认是全局比对,Blastn是局部比对. PSI-BLAST最灵敏的BLAST,选中部分矩阵后在数据库中查找相应蛋白. PHI-BLAST找氨基 ...
 - axios请求接口的时候带一个参数
			
getHomeInfo () { this.axios.get('/api/index.json?city=' + this.city) .then(this.getHomeInfoSucc) } 尽 ...
 - Python csv文件操作
			
一.open文件打开和with open as 文件打开的区别 file= open("test.txt","r") try: for line in file ...
 - python安装wordcloud、jieba,pyecharts
			
1.安装wordcloud: 适用于无法使用pip install wordcloud安装的情况: 据python和windows 版本 到https://www.lfd.uci.edu/~gohlk ...
 - CodeForces 1000B Light It Up(贪心、思维)
			
https://codeforces.com/problemset/problem/1000/B 题意: 一个模拟思维题.就是有一盏灯,0时刻开着.n次操作,你可以在其中加入一次操作(或者不加),操作 ...
 - 用python批量修改音频ID3等标签
			
使用的模块是eyeD3 一.eyeD3的安装 1.安装msgpack,不安装会报错distributed 1.21.8 requires msgpack, which is not installed ...
 - 用Pandas Dataframe来抓取重构金融股票的各种业务&数据形态
			
4. 如果计算各项股票指标时,或者处理业务流程时,上一篇的直观认知数据结构,怎样帮助开发者去好好操作,又同时避免计算错误的坑. 首先从上篇的数据结据,可以看出/设计出多少种业务和股票指标. A. 恒生 ...
 - 一维跳棋(BFS)
			
一维跳棋是一种在1×(2N+1) 的棋盘上玩的游戏.一共有N个棋子,其中N 个是黑的,N 个是白的.游戏开始前,N 个白棋子被放在一头,N 个黑棋子被放在另一头,中间的格子空着. 在这个游戏里有两种移 ...
 - 计蒜客 置换的玩笑(DFS)
			
传送门 题目大意: 小蒜头又调皮了.这一次,姐姐的实验报告惨遭毒手. 姐姐的实验报告上原本记录着从 1 到 n 的序列,任意两个数字间用空格间隔.但是“坑姐”的蒜头居然把数字间的空格都给删掉了,整个数 ...
 - LA 6621 /ZOJ 3736 Pocket Cube 打表+暴力
			
这道题是长沙区域赛的一道简单题,当时题目在ZOJ重现的时候就做了一次,但是做的好复杂,用的BFS暴力,而且还没打表,最后还是莫名其妙的爆栈错误,所以就一直没弄出来,昨天做到大白书上例题05年东京区域赛 ...