python函数修饰符@的使用
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 函数修饰符(装饰器)的使用
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( ...
- Python 函数修饰器
# 一.用函数修饰函数 #!/usr/bin/python3 def decorate_func(func): def call(*args, **kwargs): print('you have c ...
随机推荐
- Hive安装、配置和使用
Hive概述 Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类SQL查询功能. Hive本质是:将HQL转化成MapReduce程序. Hive处理的数据存储 ...
- https连接
在发送连接之前设置显示握手过程: System.setProperty("javax.net.debug", "all"); DubboServer ...
- XMind 是一个全功能的思维导图和头脑风暴软件,为激发灵感和创意而生
XMind 是一个全功能的思维导图和头脑风暴软件,为激发灵感和创意而生 https://www.xmind.cn/
- 阿里云ubuntu 16.04 搭建pptpd 第二版
前言:1.我常用的服务器在国内,但我又有某方面的需求,所以想要搭建一个pptpd的服务器 2.但我又不常用,所以感觉阿里云包年包月的不划算,所以准备采用阿里云按量付费的实例来搭建pptpd,并形 ...
- Linux环境下搭建禅道管理工具-包含软件资源
Linux环境下搭建禅道管理工具 1:百度云盘下载: 禅道--链接: https://pan.baidu.com/s/1Stu7nOZVIPO5TnpJWjWtiQ 提取码:dnik CentOs操 ...
- element-ui中的hover 光标移入某一个具体的td 有hover效果
<template> <div> <el-table :data="tableData" style="width: 100%"& ...
- MYSQL 命令导出事件、存储过程、触发器
普通导出某个数据库 mysqldump -u username -p passowrd databasename > file.sql 顺便导出事件 使用 –events 参数 mysqldum ...
- 你知道Java要注意技术点吗?
关于Java的编程常识,有人会问哪几个是重要的常识点,不知道咱们是否知道呢?给咱们同享一下. 1.JVM相关(包含了各个版其他特性) 关于刚刚触摸Java的人来说,JVM相关的常识纷歧定需求了解很深, ...
- WPF Datagrid 控制 第一行和第一列之间的空白
原文:WPF Datagrid 控制 第一行和第一列之间的空白 这个位置就是 这里 我们更改 DataGridControltemplate 模板 看树形结构 里面是一个BUtton 功能是全选 能找 ...
- import和from...import
目录 一.import 模块名 二.from 模块名 import 具体的功能 三.import和from...import...的异同 一般使用import和from...import...导入模块 ...