装饰器

装饰器的本质是一个python函数,它的作用是在不对原函数做任何修改的同时,给函数添加一定的功能。装饰器的返回值也是一个函数对象。

分类:

1、不带参数的装饰器函数:

def wrapper(f):                    #装饰器
def inner():
'''执行函数之前要做的'''
print('葫芦娃葫芦娃,一根藤上七个娃。')
     ret = f()
'''执行函数之后要做的'''
     print('风吹雨打都不怕,啦啦啦啦~')
return ret
return inner @wrapper #语法糖 @wrapper 相当于 func = wrapper(func)
def func(*args,**kwargs):
print("澳门顶级赌场上线啦,性感荷官在线发牌,让您嗨翻天~") func() #func() = inner() 调用装饰器 计算结果:
葫芦娃葫芦娃,一根藤上七个娃。
澳门顶级赌场上线啦,性感荷官在线发牌,让您嗨翻天~
风吹雨打都不怕,啦啦啦啦~

  其中wrapper()就是装饰器函数,func()为被装饰函数,被装饰之后func()可以实现inner中的一部分功能。

2、带参数的装饰器函数:

def timer(func):

    def inner(*args,**kwargs):
print("大头儿子小头爸爸,一对好朋友快乐父子俩。")
ret = func(*args,**kwargs)
print("儿子的头大手儿很小,爸爸的头小手儿很大。")
return ret
return inner @timer
def func(name):
print("%s是隔壁王叔叔"%name) func("王文劲") 计算结果: 大头儿子小头爸爸,一对好朋友快乐父子俩。
王文劲是隔壁王叔叔
儿子的头大手儿很小,爸爸的头小手儿很大。
原则:开放封闭原则

1、开放:对拓展是开放的,可以添加新功能(装饰器)

2、封闭:对修改是封闭的,不能轻易修改以前的代码

应用:
用户登录检测
运用——登录检测:
user,pw='jaye','88888888'
login_status = False
def login():
if login_status == False:
if auth_type =="jingdong"
username = input()
password = input()
if user == username and pw == password:
print('welcome to moubao store')
home()
login_status = True
elif auth_type =="weixin"
...
else:
pass
@login(auth_type = 'jingodng')
def home():
print('welcome to home page')
@login(auth_type = 'weixin')
def finance():
print('welcome to home page')
@login(auth_type = 'jingodng')
def book():
print('welcome to home page')
												

python函数学习之装饰器的更多相关文章

  1. python函数与方法装饰器

    之前用python简单写了一下斐波那契数列的递归实现(如下),发现运行速度很慢. def fib_direct(n): assert n > 0, 'invalid n' if n < 3 ...

  2. Python函数篇:装饰器

    装饰器本质上是一个函数,该函数用来处理其他函数,它可以让其他函数在不需要修改代码的前提下增加额外的功能,装饰器的返回值也是一个函数对象.它经常用于有切面需求的场景,比如:插入日志.性能测试.事务处理. ...

  3. python函数:叠加装饰器、迭代器、自定义迭代器、生成式

    一.叠加多个装饰器二.迭代器三.自定义迭代器四.xxx生成式 一.叠加多个装饰器 # 加载装饰器就是将原函数名偷梁换柱成了装饰器最内层那个wrapper函数 # 在加载完毕后,调用原函数其实就是在调用 ...

  4. python 函数基础及装饰器

    没有参数的函数及return操作 def test1(): print ("welcome") def test2(): print ("welcomt test2&qu ...

  5. python学习-42 装饰器 --- 函数闭包1

    函数闭包举例: def father(name): print('hello world') def son(): print('儿子说:我的爸爸是%s' % name) def grandfson( ...

  6. Python学习 :装饰器

    装饰器(函数) 装饰器作为一个函数,可以为其他函数在不修改原函数代码的前提下添加新的功能 装饰器的返回值是一个函数对象.它经常用于有切面需求的场景,比如:插入日志.性能测试.事务处理.缓存.权限校验等 ...

  7. python笔记5:装饰器、内置函数、json

    装饰器 装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象. 先看简单例子: def run(): time.sleep(1 ...

  8. python基础之函数当中的装饰器

    在实际工作当中存在一个开放封闭原则 1.对扩展是开放的 为什么要对扩展开放呢? 我们说,任何一个程序,不可能在设计之初就已经想好了所有的功能并且未来不做任何更新和修改.所以我们必须允许代码扩展.添加新 ...

  9. Python学习笔记: 装饰器Decorator

    介绍 装饰器是对功能函数的加强. 在原来的功能函数之外,另外定义一个装饰器函数,对原来的功能函数进行封装(wrapper)并在wrapper的过程中增加一些辅助功能. 应用场景 如下场景: 业务函数f ...

随机推荐

  1. ASP.Net 中的三种控件

    ---恢复内容开始--- 第一种:HTML控件 ASP.Net把HTML控件当成普通字符串渲染到浏览器端,不去检查正确性.无法在服务器端进行处理. 比如: <input111 type=&quo ...

  2. 键盘录入6个int类型的数据存入数组arr中,将arr数组中的内容反转...

    一.有一道很有意思的数组操作相关编程题,闲来无事用JS解决了一下,问题描述如下: (1) 键盘录入6个int类型的数据存入数组arr中: (2) 将arr数组中的内容反转: (3) 将反转后的数组角标 ...

  3. 复习宝典之SpringMVC

    查看更多宝典,请点击<金三银四,你的专属面试宝典> 第七章:SpringMVC MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(co ...

  4. vue组件间传值详解

    1.父传子----传值要点: <1> 在组件注册的时候必须要使用 return 去返回 data对象;

  5. BUG-jQuery提交表单submit方法-TypeError: e[h] is not a function

    问题:button按钮设置id为submit后,表单jquery.submit()无法提交,报告异常TypeError: e[h] is not a function 源码: 解决:参考http:// ...

  6. YII2集成GOAOP,实现面向方面编程!

    引言: 软件开发的目标是要对世界的部分元素或者信息流建立模型,实现软件系统的工程需要将系统分解成可以创建和管理的模块.于是出现了以系统模块化特性的面向对象程序设计技术.模块化的面向对象编程极度地提高了 ...

  7. Jquery无刷新上传单个文件

    function ajax_photo(photo_type){        $(document).on('change','#sitephoto',function(){             ...

  8. JAVA8 Stream API的使用

    /** * @auther hhh * @date 2018/12/31 12:48 * @description Stream流:用来处理数组.集合的API * 1.不是数据结构,没有内部存储(只是 ...

  9. Java基础之this和super关键字用法

    this 在java中,this是一个引用当前类对象的引用变量,主要有以下几种用法: 引用当前类的实例变量· this关键字可以用来引用当前类的实例变量.如果实例变量和某个方法的参数之间存在歧义(实例 ...

  10. python--复习之路的目录

    想要看时点链接看看,常来复习,温故而知新,可以为师矣. 1:基本类型 python--基本类型之字符串 python--基本类型之列表 python--基本类型之元组 python--基本类型之集合 ...