Python编程举例-装饰器
- 装饰器的通常用途是扩展已定义好的函数的功能
一个浅显的装饰器编程例子
#装饰器函数
def outer(fun):
def wrapper():
#添加新的功能
print('验证')
fun()
return wrapper #必须返回整个函数
@outer
#被装饰的函数
def Func1():
print('func1')
@outer
def Func2():
print('func2')
@outer
def Func3():
print('func3')
Func1()
Func2()
Func3()
装饰器函数接收参数和返回参数
#装饰器函数
def outer(fun):
def wrapper(arg): #带上参数,参数是传递到wrapper函数
#添加新的功能
print('验证')
result = fun(arg) #接收原函数的返回值
return result #返回一个返回值
return wrapper #必须返回整个函数
@outer #等同于outer(Func1)
#被装饰的函数
def Func1(arg): #带参数
print('func1',arg)
return 'return'
'''
Func1 =
def wrapper(arg):
print('验证')
result = fun(arg)
return reuslt
'''
@outer
def Func2(arg):
print('func2',arg)
@outer
def Func3(arg):
print('func3',arg)
response = Func1('alex')
print(response)
Func2('lisa')
Func3('ted')
>>>>>>>>>
验证
func1 alex
return #返回值
验证
func2 lisa
验证
func3 ted
Python编程举例-装饰器的更多相关文章
- Python编程系列---装饰器执行的底层原理及流程
代码中No.1 No.2 ...表示执行流程 """No.1 No.2 ...表示执行流程""" def set_func(func): ...
- 面向切面编程AOP——加锁、cache、logging、trace、同步等这些较通用的操作,如果都写一个类,则每个用到这些功能的类使用多继承非常难看,AOP就是解决这个问题的,python AOP就是装饰器
面向切面编程(AOP)是一种编程思想,与OOP并不矛盾,只是它们的关注点相同.面向对象的目的在于抽象和管理,而面向切面的目的在于解耦和复用. 举两个大家都接触过的AOP的例子: 1)java中myba ...
- python函数式编程之装饰器(一)
1.开放封闭原则 简单来说,就是对扩展开放,对修改封闭 在面向对象的编程方式中,经常会定义各种函数. 一个函数的使用分为定义阶段和使用阶段,一个函数定义完成以后,可能会在很多位置被调用 这意味着如果函 ...
- python基础—函数装饰器
python基础-函数装饰器 1.什么是装饰器 装饰器本质上是一个python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能. 装饰器的返回值是也是一个函数对象. 装饰器经常用于有切 ...
- Day11 Python基础之装饰器(高级函数)(九)
在python中,装饰器.生成器和迭代器是特别重要的高级函数 https://www.cnblogs.com/yuanchenqi/articles/5830025.html 装饰器 1.如果说装 ...
- [python基础]关于装饰器
在面试的时候,被问到装饰器,在用的最多的时候就@classmethod ,@staticmethod,开口胡乱回答想这和C#的static public 关键字是不是一样的,等面试回来一看,哇,原来是 ...
- Python深入05 装饰器
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 装饰器(decorator)是一种高级Python语法.装饰器可以对一个函数.方法 ...
- Day04 - Python 迭代器、装饰器、软件开发规范
1. 列表生成式 实现对列表中每个数值都加一 第一种,使用for循环,取列表中的值,值加一后,添加到一空列表中,并将新列表赋值给原列表 >>> a = [0, 1, 2, 3, 4, ...
- Noah的学习笔记之Python篇:装饰器
Noah的学习笔记之Python篇: 1.装饰器 2.函数“可变长参数” 3.命令行解析 注:本文全原创,作者:Noah Zhang (http://www.cnblogs.com/noahzn/) ...
随机推荐
- Java设计模式の代理模式
目录 代理模式 1.1.静态代理 1.2.动态代理 1.3.Cglib代理 代理模式 代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是 ...
- expect 批量增加用户及配置密码
start.sh #!/bin/bash password="111111" username="test" if [ $# == 1 ] then usern ...
- NOIP模拟赛13
期望得分:100+0+100=200 实际得分:100+5+100=205 T1 空间卡到30M.. n<=2.5*1e7 若x是整除区间[1,n]每个数的最小的数,那么对[1,n]每个数分解质 ...
- UVA 1647 Computer Transformation
https://vjudge.net/problem/UVA-1647 题意: 开始有一个1,接下来每一步1变成01,0变成10 问n不之后00的个数 打表找规律 第3步之后: 如果第i步之后有x个字 ...
- 算法专题-STL篇
这篇文章着重记录c++中STL的用法.主要粗略的介绍其用法,以知识点的形式呈现其功能,不会深入源码分析其工作原理. 排序和检索. sort(a,a+n),对a[0]往后的n个元素(包括a[0])进行排 ...
- 2015/11/2用Python写游戏,pygame入门(2):游戏中的事件和显示
pygame是一个比较大的库,以我这点弱小的实力是没办法详解的.所以我只讲我懂得那些部分,其他部分由大家慢慢查找了解. ------------------------------- 我用pygame ...
- WPF技术点
常用Path路径 正三角形(左):<Path Data="M40,0 L0,30 40,60 z" Stretch="Uniform"/> 正三角形 ...
- 打表找规律C - Insertion Sort Gym - 101955C
题目链接:https://cn.vjudge.net/contest/273377#problem/C 给你 n,m,k. 这个题的意思是给你n个数,在对前m项的基础上排序的情况下,问你满足递增子序列 ...
- Vmware安装ubuntu详细教程
1.环境准备: (1) 范例系统为WIN10 64位家庭普通版,已正确安装虚拟机VMware Workstation 12 Pro.(2) 下载Ubuntu系统. 2.安装过程: 2.1 VMware ...
- 南邮综合题writeup
http://teamxlc.sinaapp.com/web3/b0b0ad119f425408fc3d45253137d33d/index.php fuckjs直接console得到地址 http: ...