本文将要为您介绍的是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函数修饰符@的使用就为您介绍到这里,感谢您关注懒咪学编程c.lanmit.com.

本文地址:https://c.lanmit.com/bianchengkaifa/Python/3963.html

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

  1. 【爆肝更新】Python基础教程:第五章_Python函数

    原创:公众号 数据说话 [爆肝更新]Python基础教程:第五章_Python函数 函数介绍 学习目标: 快速体验一下函数的使用 了解函数的作用. 函数:是组织好的,可重复使用的,用来实现特定功能的代 ...

  2. python函数的作用是什么_Python函数

    python函数讲解 函数三问: 什么是函数? 函数就是可以完成特定功能的代码块,函数就是存放代码的容器可以理解为一个装有一些工具的箱子 为什么有函数? 1.减少了代码的冗余 2.让程序增加了可扩展性 ...

  3. python关于函数作用的描述_Python函数的概念和使用

    函数 为了便于程序的维护和更好的实现模块化,好的程序都会分解为很多函数. 可以这么说,对于任何的编程语言,函数都是一个非常重要的概念. python 不仅简化了函数的定义过程,而且还大量借鉴了其他函数 ...

  4. python函数装饰器有什么用_Python @函数装饰器及用法(超级详细)

    前面介绍的 @staticmethod 和 @classmethod 的本质就是函数装饰器,其中 staticmethod 和 classmethod 都是 Python 内置的函数. 使用 @ 符号 ...

  5. python中的object是什么意思_Python函数是所谓的第一类对象(First-Class Object)是什么鬼?...

    之前写过一篇关于装饰器的文章,虽然写得还算不错,但是也有不少同学表示没看懂,我大概分析了其中的原因,主要问题是他们不理解函数,因为Python中的函数不同于其它语言. 正确理解 Python函数,能够 ...

  6. python函数代码块以什么开头_Python 函数

    函数能提高应用的模块性,和代码的重复利用率. 定义一个函数: 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号(). 任何传入参数和自变量必须放在圆括号中间.圆括号之间可以用于定义参数. ...

  7. python函数作用域包括局部变量和参数_python函数变量的作用域声明(全局变量和局部变量)...

    函数变量的作用域声明(全局变量和局部变量) 引入问题: 局部变量: 局部变量:定义在函数内部的变量,它的作用域也仅限于函数内部,出了函数就不能使用了. 例如: #encoding = utf-8 de ...

  8. python中、函数定义可以不包括以下_python函数定义精讲

    原标题:python函数定义精讲 在 Python 中,你也可以定义包含若干参数的函数.这里有三种可用的形式,也可以混合使用. 默认参数值 最常用的一种形式是为一个或多个参数指定默认值.这会创建一个可 ...

  9. python关键字参数必须位于位置参数之前_python函数中的参数(关键字参数,默认参数,位置参数,不定长参数)...

    默认参数:定义函数的时候给定变量一个默认值. def num(age=1): 位置参数:调用函数的时候根据定义函数时的形参位置和实参位置进行引用. 关键字参数:如果定义的函数中含有关键字参数,调用函数 ...

  10. python中的换行符是哪个键_python的换行符是什么?

    python换行符是什么? python换行符是"\n". Windows换行符是'\r\n', Unix/Linux的换行符为'\n', Mac的换行符为'\r', 在pytho ...

最新文章

  1. C++_泛型编程与标准库(三)
  2. java action的头文件注释_有没有java大神,帮我详细注释下面的代码,action里面复制来的...
  3. spring五:获取容器中对象信息
  4. 数据预处理:读取文件数据,并存为python数组
  5. java version 和javac版本不一致_解决linux下javac -version和java -version版本显示不一致...
  6. 分享10个值得关注的C语言开源项目
  7. 进度计划软件哪个好用_斑马进度计划软件学习视频-资源管理
  8. [译]Vulkan教程(20)重建交换链
  9. 关于Python在Linux、Mac和Windows上的安装方法总结
  10. mysql 模糊查询 s_MySql反向模糊查询
  11. 软考高项:十大知识领域47个过程组速记
  12. ASO优化|华为关键词覆盖优化技巧
  13. 抖音主页头图怎么设置,掌握以下5点技巧即可丨国仁网络资讯
  14. 谢孟媛初级文法28 课地方副词时间副词和程度副词
  15. opencv附加依赖项
  16. 人工智能在计算机领域中的应用
  17. CF134C Swaps 题解
  18. ArcGIS学习05:坐标系
  19. GIT | GIT命令大全
  20. 微信小程序 Notes | 常用开发事例(五)基于云平台导出 Excel

热门文章

  1. 190811每日一句
  2. unity 将虚拟相机的视角局部放大,显示在一个平面上
  3. C#生成dll, VS或unity调用
  4. Atitit 实体的概念与理解 目录 1. 使用不同的语言来描述实体 1 1.1. H5 table dom模型 json 1 1.2. Sql table 1 1.3. Java class m
  5. Atitit 演讲常用肢体语言与手势总结 目录 1. 原则 ,哑语一样,手势不只是补充。。。 1 2. 比拟实际物体与抽象物体 1 2.1. 三个实用的手势: 1 2.2. (五)、演讲中忌讳的动作
  6. Atitit 把项目外包的面临的风险attilax总结
  7. atitit.GUI图片非规则按钮跟动态图片切换的实现模式总结java .net c# c++ web html js
  8. paip.基于urlrewrite的反向代理以及内容改写
  9. paip.FTP服务端及客户端的使用总结
  10. qq安全使用指南.txt