python函数修饰符@的作用是为现有函数增加额外的功能,常用于插入日志、性能测试、事务处理等等。

创建函数修饰符的规则:

(1)修饰符是一个函数

(2)修饰符取被修饰函数为参数

(3)修饰符返回一个新函数

(4)修饰符维护被维护函数的签名

例子1:被修饰函数不带参数

def log(func):

def wrapper():

print('log开始 ...')

func()

print('log结束 ...')

return wrapper

@log

def test():

print('test ..')

test()

运行结果:

log开始 ...

test ..

log结束 ...

例子2:使用functools模块提供的修改函数属性的方法wraps

def log(func):

def wrapper():

print('log开始 ...')

func()

print('log结束 ...')

return wrapper

@log

def test1():

print('test1 ..')

def test2():

print('test2 ..')

print(test1.__name__)

print(test2.__name__)

运行结果:

wrapper

test2

可见test1的函数名称变了,如果某些代码用到就会出问题,可以使用functools模块提供的修改函数属性的方法wraps

from functools import wraps

def log(func):

@wraps(func)

def wrapper():

print('log开始 ...')

func()

print('log结束 ...')

return wrapper

@log

def test1():

print('test1 ..')

def test2():

print('test2 ..')

print(test1.__name__)

print(test2.__name__)

运行结果:

test1

test2

例子3:被修饰函数带参数

from functools import wraps

def log(func):

@wraps(func)

def wrapper(*args,**kwargs):

print('log开始 ...',func.__name__)

ret = func(*args,**kwargs)

print('log结束 ...')

return ret

return wrapper

@log

def test1(s):

print('test1 ..', s)

return s

@log

def test2(s1, s2):

print('test2 ..', s1, s2)

return s1 + s2

test1('a')

test2('a','bc')

运行结果:

log开始 ... test1

test1 .. a

log结束 ...

log开始 ... test2

test2 .. a bc

log结束 ...

例子4:修饰符带参数,需要比上面例子多一层包装

from functools import wraps

def log(arg):

def _log(func):

@wraps(func)

def wrapper(*args,**kwargs):

print('log开始 ...',func.__name__, arg)

ret = func(*args,**kwargs)

print('log结束 ...')

return ret

return wrapper

return _log

@log('module1')

def test1(s):

print('test1 ..', s)

return s

@log('module1')

def test2(s1, s2):

print('test2 ..', s1, s2)

return s1 + s2

test1('a')

test2('a','bc')

运行结果:

log开始 ... test1 module1

test1 .. a

log结束 ...

log开始 ... test2 module1

test2 .. a bc

log结束 ...

Python 函数修饰符(装饰器)的使用

Python 函数修饰符(装饰器)的使用 1.  修饰符的来源修饰符是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志.性能测试.事务处理等. 修饰符是解决这类问题的绝佳设计, ...

Python中的函数修饰符@

首先,什么是函数修饰符?函数修饰符就是对原有函数做一层包装.比如有以下两个函数: 复制代码 def func1(): print 'I am function func1' def func2(): ...

python函数修饰器(decorator)

python语言本身具有丰富的功能和表达语法,其中修饰器是一个非常有用的功能.在设计模式中,decorator能够在无需直接使用子类的方式来动态地修正一个函数,类或者类的方法的功能.当你希望在不修改函 ...

Python中@修饰符的作用。

'@'符号用作函数修饰符是python2.4新增加的功能,修饰符必须出现在函数定义前一行,不允许和函数定义在同一行.也就是说@A def f(): 是非法的. 只可以在模块或类定义层内对函数进行修饰, ...

flask 文件下载 文件服务器 请求参数 函数修饰符

180M电子书 通过已经下载到pc,在上传到私有公网服务器,之后,再异地下载 以下代码,文件内容错乱 [root@bigdata-server- mydataweb]# tree . ├── mydl ...

solidity 学习笔记(3) 函数修饰符/继承

修饰符: 函数修饰符有 constant  view pure 其中 constant和view的功能是一样的  不会消耗gas 也就是说不会做任何存储   constant在5.0以后的版本中被废弃 ...

Python classmethod 修饰符

描述 classmethod修饰符对应的函数不需要实例化,不需要self参数,但第一个参数需要是表示自身类的cls参数,可以调用类的属性,类的方法,实例化对象等. 语法 classmethod语法: ...

python的@修饰符

‘@’引用已有的函数,对下面的函数进行修饰.引用函数必须放在修饰函数的上面,引用函数的返回值,返回给被修饰的函数 一个简单的栗子: def funA(fn): print('A') # 输出A fn( ...

ethereum(以太坊)(十)--函数修饰符

pragma solidity ^0.4.0; contract modifierTest{ uint public v1; uint constant v2 =10; //uint constant ...

随机推荐

HDU 1051 Wooden Sticks

题意: 有 n 根木棒,长度和质量都已经知道,需要一个机器一根一根地处理这些木棒. 该机器在加工过程中需要一定的准备时间,是用于清洗机器,调整工具和模板的. 机器需要的准备时间如下: 1.第一根需要1 ...

IT教程网

这个IT教程网(印度),我认为是最好的.里面的知识基础实用,覆盖面很广,作为IT入门和了解都是极好的. http://www.tutorialspoint.com/

matlab中读取txt数据文件(转)

根据txt文档不同种类介绍不同的读取数据方法 一.纯数据文件(没有字母和中文,纯数字) 对于这种txt文档,从matalb中读取就简单多了 例如test.txt文件,内容为“17.901 -1.111 ...

IOS添加自定义字体库

1.将需要的字体库xxx.ttf添加到工程中,注意一定要在copy bundle resources中存在,如果没有添加上去 2.在info.plist 文件中添加 fonts provided by ...

pyglet: a cross-platform windowing and multimedia

pyglet pyglet: a cross-platform windowing and multimedia library for Python.

U盘中毒无限蓝屏重启的解决办法

开门见山,这个帖子只针对U盘中毒导致的以下两种症状: 1.win10系统无法进入并且要求初始化,卸载所有第三方应用 2.win7系统无限蓝屏重启): 其他的硬件故障不在本次讨论范围之内. 说明以下.上 ...

【调试基础】Part 2 文本字符

01 字节存储顺序 大端:低字节存在高地址,高字节存在低地址.eg:IBM: 小端:低字节存在低地址,高字节存在高地址.eg:INTEL: 02 字符集 ASCII:128=26小写 + 26大写 + ...

Javascript高级编程学习笔记(26)—— 函数表达式(4)私有变量

私有变量 严格来讲,JS中没有私有成员的概念,所有对象属性都是公有的. 但是JS中有私有变量的概念 所有在函数中定义的变量都可以认为是私有变量,因为不能在函数外部进行访问 私有变量包括 1.函数参数 ...

leecode 937 Reorder Log Files (模拟)

传送门:点我 You have an array of logs.  Each log is a space delimited string of words. For each log, the ...

面向对象 【类库】【委托】【is as运算符】

类库(Class Library) .dll文件 类库字面意思就是类的集合,里面有很多被编译后的C#代码,不可阅读,不可修改,只能调用 类库是一个综合性的面向对象的可重用类型集合,这些类型包括:接口. ...

python修饰符作用_python函数修饰符@的使用相关推荐

  1. Python学习笔记11:函数修饰符

    Python学习笔记11:函数修饰符 Python有很多有趣的特性,其中函数修饰符就是一个. 我们在之前的那个web应用示例中用过如下写法: @web.route('/log') @符号后边的,就是一 ...

  2. python @修饰符_python函数修饰符@的使用方法解析

    python函数修饰符@的作用是为现有函数增加额外的功能,常用于插入日志.性能测试.事务处理等等. 创建函数修饰符的规则: (1)修饰符是一个函数 (2)修饰符取被修饰函数为参数 (3)修饰符返回一个 ...

  3. python修饰符的理解_python函数修饰符@的使用方法解析

    这篇文章主要介绍了python函数修饰符@的使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 python函数修饰符@的作用是为现有函数增 ...

  4. python修饰符号的使用_Python 函数修饰符(装饰器)的使用

    Python函数修饰符(装饰器)的使用 1.修饰符的来源 修饰符是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志.性能测试.事务处理等. 修饰符是解决这类问题的绝佳设计,有了修 ...

  5. python中占位符包括_python中占位符

    python如何在一个字符串中使用两个占位符 1. 使用连接符: + 12 world = "World"print "Hello " + world + &q ...

  6. python 修饰器 教程_python 实现 修饰器模式

    无论何时我们想对一个对象添加额外的功能,都有下面这些不同的可选方法. 如果合理,可以直接将功能添加到对象所属的类(例如,添加一个新的方法) 使用组合 使用继承 与继承相比,通常应该优先选择组合,因为继 ...

  7. python测试函数怎么写_Python - 函数

    函数,function,是一段代码的集合体.是Python为了代码最大程度的重用.减小代码冗余而提供的最基本的程序结构. Python是一门面向对象的编程语言,对函数进行分类和封装,由对象实现对方法的 ...

  8. python感叹号的作用_Python的作用

    电脑上安装python这个软件的作用是什么,我不懂.pycharm是输入python语如果把C语言比作笔芯,那么python就像装了笔芯的笔,两者都可以用来写字,但后者写起来可能更顺畅.具体来说,py ...

  9. python中括号的作用_python中中括号

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 在python语言中最常见的括号有三种,分别是:小括号().中括号:代表list ...

最新文章

  1. jQuery对下拉框Select操作总结
  2. 产品经理要懂的「技术那些事」
  3. SD-WAN的C级视图
  4. where is ConstraintViolationException raised
  5. std::chrono时间库详解
  6. postgresql,pgadmin4安装后出错,界面只有文字
  7. mysql email能索引吗_10、MySQL索引
  8. PHP开启输出错误信息
  9. 免费下载卫星地图 高清卫星地图软件
  10. 理解全概率公式与贝叶斯公式
  11. 二进制转化为十六进制
  12. 区块链技术实体结合解决方案——汇新云
  13. gimp 架构_GIMP 2.10正式发布,史无前例的改动
  14. 显示12306服务器处理中正在排队,12306排队等待中怎么办 12306一直在排队解决方法(图文)...
  15. 推荐系统之 FNN和DeepFM和NFM
  16. 友情的目的和作为目的的友情
  17. matlab中columns怎么用,css columns属性怎么用
  18. WDF开发USB设备驱动教程(2)
  19. 深入理解函数式编程(下)
  20. Bea公司和sun公司介绍

热门文章

  1. ops电脑属于微型计算机吗,泽创触摸一体机OPS电脑是什么?
  2. 澳洲值得代购物品汇总
  3. IntelliJ IDEA 之 配置JDK 的 4种方式
  4. 航空货代系统之日常航班管理
  5. 77. Combinations(组合)
  6. numpy.random.randint()函数生成随机坐标点
  7. oracle 应收 系统选项,R12 总账 应收 应付 税 基本设置 (图文版)
  8. 团队中技术同质化的反思
  9. python pie函数_matplotlib 知识点11:绘制饼图(pie 函数精讲)
  10. 电机世界之直流无刷电机(科普文)