Python装饰器用法实例分析
作者:贝贝爱豆豆 发布时间:2023-02-22 12:05:49
标签:Python,装饰器
本文实例讲述了Python装饰器用法。分享给大家供大家参考,具体如下:
无参数的装饰器
#coding=utf-8
def log(func):
def wrapper():
print 'before calling ',func.__name__
func()
print 'end calling ',func.__name__
return wrapper
@log
def hello():
print 'hello'
@log
def hello2(name):
print 'hello',name
if __name__=='__main__':
hello()
运行结果:
before calling hello
hello
end calling hello
带参数的装饰器:
#coding=utf-8
def log(func):
def wrapper(name):
print 'before calling ',func.__name__
func(name)
print 'end calling ',func.__name__
return wrapper
@log
def hello(name):
print 'hello',name
@log
def hello2(name):
print 'hello',name
if __name__=='__main__':
hello('haha')
运行结果:
before calling hello
hello haha
end calling hello
多个参数的时候:
#coding=utf-8
def log(func):
'''
*无名字的参数
**有名字的参数
:param func:
:return:
'''
def wrapper(*args,**kvargs):
print 'before calling ',func.__name__
print 'args',args,'kvargs',kvargs
func(*args,**kvargs)
print 'end calling ',func.__name__
return wrapper
@log
def hello(name,age):
print 'hello',name,age
@log
def hello2(name):
print 'hello',name
if __name__=='__main__':
hello('haha',2)
hello(name='hehe',age=3)
输出:
end calling hello
before calling hello
args () kvargs {'age': 3, 'name': 'hehe'}
hello hehe 3
end calling hello
装饰器里带参数的情况
本质就是嵌套函数
#coding=utf-8
def log(level,*args,**kvargs):
def inner(func):
def wrapper(*args,**kvargs):
print level,'before calling ',func.__name__
print level,'args',args,'kvargs',kvargs
func(*args,**kvargs)
print level,'end calling ',func.__name__
return wrapper
return inner
@log(level='INFO')
def hello(name,age):
print 'hello',name,age
@log
def hello2(name):
print 'hello',name
if __name__=='__main__':
hello('haha',2)
运行输出:
INFO before calling hello
INFO args ('haha', 2) kvargs {}
hello haha 2
INFO end calling hello
希望本文所述对大家Python程序设计有所帮助。
来源:https://blog.csdn.net/YANG_Gang2017/article/details/78568411


猜你喜欢
- 在Windows下安装MySQL ,用了官方的配置向导生成了my.ini,本以为很安稳了,谁知十多个小时过去之后,系统响应非常慢,看资源管理
- 什么是进程进程就是操作系统中执行的一个程序,操作系统以进程为单位分配存储空间,每个进程都有自己的地址空间、数据栈以及其他用于跟踪进程执行的辅
- 以前我在mysql中分页都是用的 limit 100000,20这样的方式,我相信你也是吧,但是要提高效率,让分页的代码效率更高一些,更快一
- 今天有业务需要制作用户头像的需求,在网上找了个可以裁剪大图制作自己希望大小的图片的方法(基于Struts2)。特此记录一下。不废话,具体的步
- 引言我们先来简单学习一下用 Go 实现观察者设计模式,给怎么实现事件驱动编程、事件源这些模式做个铺垫。主要也是我也老没看设计模式了,一起再复
- 如果你是个学生,你应该会C,C++和Java。还会一些VB,或C#/.NET。多少你还可能开发过一些Web网页,你知道一些HTML,CSS和
- 无规矩不成方圆。编写代码也是,如果没有大概的框架,管理代码将会是一件很头疼的事。先看看笔者以前写的python脚本:如果只有一个用例,这样看
- 安装很简单pip install psutil官网地址为:https://pythonhosted.org/psutil/ (文档上有详细的
- csv是Comma-Separated Values的缩写,是用文本文件形式储存的表格数据,比如如下的表格:就可以存储为csv文件,文件内容
- 今天我们整理了ip地址和身份证的javascript验证方法。虽然ip地址和身份证的验证不是很经常会遇到,但是大家也可以研究一下js代码,里
- 浏览网页的时候经常会碰到一些不认识的英文单词,或者想知道一些中文单词的翻译,这时候再去找翻译软件或者翻译网站就有些麻烦了。因此我做了一个“中
- 如下所示:function getobj(objs, key, value) {for (var i in objs) {var obj =
- python一直被病垢运行速度太慢,但是实际上python的执行效率并不慢,慢的是python用的解释器Cpython运行效率太差。“一行代
- 前提条件,两台服务器都安装了mysql相同的版本,数据库名也一样,最好数据都是尽量的差不多。mysql服务器端 192.168.0.1: 新
- 我写的这个程序import tensorflow as tfsess=tf.InteractiveSession()x=tf.Variabl
- 问题作为一个负责几个服务器的数据库管理员,我接到许多电话是关于磁盘空间的。我所做的第一件事是找到可以缩小的数据文件来释放一些磁盘上的空间。我
- Git 工作区、暂存区和版本库基本概念我们先来理解下Git 工作区、暂存区和版本库概念工作区:就是你在电脑里能看到的目录。暂存区:英文叫st
- 1.首先通过控制面板应用卸载当前环境下的Node.js相关安装,并清理磁盘残存的文件夹等文件2.下载nvm来管理node版本 &
- 最近看到网上的一些作品,然后进行一些完善。只是用于学习,不要去干坏事哦。程序来源于网,我只是做了一些优化。当然这种方法破解还是有点慢哦。我用
- python可以装在任意的系统盘中,没有强制要求,默认路径是装在C盘。为什么软件默认安装位置是在C盘?下面我们来说一说。首先,需要明确一点,