初摄装饰器

一、理论知识:

定义:装饰器本身是函数,就是为了为其他函数添加附加功能。

原则:

1、不能修改被修饰函数的源代码

2、不能修改被修饰函数的调用方式

装饰器知识必备:

1、函数即“变量”

2、高阶函数

a:把一个函数名作为实参传给另外一个函数

b:返回值中包含函数值

3、嵌套函数

高阶函数+嵌套函数=》装饰器

二、低潮版

import time

def timmer(func):

def bar(*args,**kwargs): #*args,**kwargs:表示非固定参数

start_time=time.time()

func(*args,**kwargs)

stop_time=time.time()

print (‘the func run time %s‘%(stop_time-start_time))

return bar #只是返回了内存地址,并没有运行bar()函数

@timmer #调用装饰器timmer。相当于:test1=timmer(test1)

def test1(): #由于返回bar()的地址,所以test1=timmer(test1)=bar

time.sleep(3)

print (‘in the test1‘)

@timmer

def test2(name):

print (‘in the test2‘,name)

#test1 = timmer(test1) #把返回的bar()函数内存地址赋值给test1

test1()

test2(2)

三、高潮版

当被修饰函数中出现返回值(return ‘from home‘)

user,passwd= ‘peter‘,‘123qwe‘

def auth(auth_type):

print (‘auth_type:‘,auth_type)

def outer(func):

def warpper(*args,**kwargs):

print (‘warpper:‘,*args,**kwargs)

username = input (‘Username:‘).strip()

password = input (‘Password:‘).strip()

if (user==username and passwd ==password):

print (‘\033[32;1mUser has passed authentication\033[0m‘)

te=func(*args,**kwargs) #相当于执行home(*args,**kwargs)

print (‘----------‘)

return te

else:

exit(‘\033[31;1mInvalid username or password\033[0m‘)

return warpper

return outer

def index():

print (‘welcome to index page‘)

@auth(auth_type=‘local‘)

def home(name):

print (‘welcome to home page‘,name )

return ‘from home‘

@auth(auth_type=‘lodap‘)

def bbs():

print (‘welcome to bbs page‘)

index()

print (home(2))

bbs()

时间: 2024-11-07 04:58:32

初摄装饰器的相关文章

Python成长之路_装饰器

一.初入装饰器 1.首先呢我们有这么一段代码,这段代码假如是N个业务部门的函数 1 def f1(aaa): 2 print('我是F1业务') 3 if aaa == 'f1': 4 return 'ok' 5 6 def f2(aaa): 7 print('我是F2业务') 8 if aaa == 'f2': 9 return 'ok' 业务代码 这里呢也就是当我们调用上面的函数的时候,传入值给aaa,当aaa的值等于f1或者f2就返回ok 2.公司有N个业务部门,1个基础平台部门,基础平台

装饰器初析

对于python的装饰器今天刚开始真正的进行分析查看,阅读了之后确实感觉有几分巧妙.神奇,不过我其实还是不知道这种东西的存在究竟在哪里会发挥出来他的优势,或者说他到底该怎么没用,也许是我对其认识不够吧. 感谢一片文章,内容真的很好,对我的理解有很大的帮助. class entryExit(object): def __init__(self, f): self.f = f def __call__(self): print ("Entering", self.f.__name__) s

面试官初问之装饰器

对于装饰器在Python中的应用,实在是数不胜数,在面试的问题中也是拷问的必备项,那么要如何回答这个问题才能算得上是完美的回答呢?装饰器就是验证登录的,在你进入这个view之前我先验证你是不是登录的状态.OK,这个回答没有问题,但是你也被OUT了,简单的了解与使用是初级程序员常常犯的错误,面试官显然是要你造火箭的能力啊!兄弟!! 所谓的装饰器仅仅是一种语法糖,可作用的对象可以是函数也可以是类,装饰器本身就是一个函数,其主要的工作方式就是将被装饰的类或者函数作为参数传递给装饰器函数,最简单的装饰器

python函数(3):装饰器

昨天学了很多函数方面的概念和知识其中有一个闭包的函数.很多人都对闭包的作用不是很清楚,今天我们就来认识一个新的知识点装饰器.它就是闭包函数的一个经典应用. 预习: 编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件),要求登录成功一次,后续的函数都无需再输入用户名和密码 一.楔子 def func1(): print('in func1') 想要计算上面函数的执行时间: import time def func1(): start = time.time() print('in fu

python之路--装饰器函数

(一)装饰器的形成过程 装饰器的本质是闭包函数的一种应用,装饰器是用来装饰函数的,在不修改原函数及其调用方式的情况下对原函数功能进行拓展. #简单的无参函数装饰器 import time def timmer(func): def inner(): start = time.time() func() end = time.time() print(end -start) return inner @timmer#语法糖 def hahaha(): time.sleep(2)#停止时间的一种用法

s14 第4天 关于python3.0编码 函数式编程 装饰器 列表生成式 生成器 内置方法

python3 编码默认为unicode,unicode和utf-8都是默认支持中文的. 如果要python3的编码改为utf-8,则或者在一开始就声明全局使用utf-8 #_*_coding:utf-8_*_ 或者将字符串单独声明: a = "中文".encode("utf-8") 函数式编程 函数式编程中的函数指代的是数学中的函数. 函数式编程输入如果确定,则输出一定是确定的.函数中并没有很多逻辑运算 python是一个面向对象的语言,只是一部分支持函数式编程.

函数的闭包和装饰器

函数的闭包: #1.闭 必须是内部的函数 #2.包 引用了外部作用域中的变量 命名空间: 一共有三种命名空间从大范围到小范围的顺序:内置命名空间.全局命名空间.局部命名空间 作用域(包括函数的作用域链): 小范围的可以用大范围的但是大范围的不能用小范围的范围从大到小(图) 在小范围内,如果要用一个变量,是当前这个小范围有的,就用自己的如果在小范围内没有,就用上一级的,上一级没有就用上上一级的,以此类推.如果都没有,报错 函数的嵌套: 嵌套调用 嵌套定义:定义在内部的函数无法直接在全局被调用 函数

14 Python 装饰器

装饰器 装饰器其实就是一个以函数作为参数并返回一个替换函数的可执行函数.让我们从简单的开始,直到能写出实用的装饰器. 1 def outer(some_func): 2 def inner(): 3 print "before some_func" 4 ret = some_func() # 1 5 return ret + 1 6 return inner 7 def foo(): 8 return 1 9 decorated = outer(foo) # 2 10 decorate

函数和装饰器

函数定义空函数函数作用域块级作用域局部作用域作用域链终极版作用域函数参数定义:默认参数可变参数关键字参数组合参数小结高阶函数与函数返回值高阶函数函数返回值lambda与匿名函数mapfilterreducelambda小结装饰器格式装饰器原理带参数的装饰器装饰器应用装饰器小结开放封闭原则闭包概念闭包的作用 函数定义 在Python中,定义一个函数要使用def语句,依次写出函数名.括号.括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回. 我们以自定义一个求绝对值