1.16 Python基础知识 - 装饰器初识
Python中的装饰器就是函数,作用就是包装其他函数,为他们起到修饰作用。在不修改源代码的情况下,为这些函数额外添加一些功能,像日志记录,性能测试等。一个函数可以使用多个装饰器,产生的结果与装饰器的位置顺序有关。
装饰器基本形式:
@装饰器1
def 函数1:
函数体
相当于:==》 函数1 = 装饰器1(函数1)
装饰器特点:
1、不修改源代码的调用方式
2、不修改源代码内容
3、装饰器有高阶函数与递归函数相融合的特点
多个装饰器修饰,示例:
@foo
@spam
def bar():pass 相当于: def bar():pass bar = foo(spam(bar))
装饰器示例1(无参数传递):计算程序运行时间
import time
def foo(func):
def wrapper():
start_time = time.time()
func()
stop_time = time.time()
print('the func run %s .' % (stop_time - start_time))
return wrapper @foo
def bar():
time.sleep(3)
print("In the bar.") bar() # 输入结果 In the bar.
the func run 3.016378402709961 .
装饰器示例2(源代码有参数传递):
import time
def foo(func):
def wrapper(args):
start_time = time.time()
func(args)
stop_time = time.time()
print('the func run %s .' % (stop_time - start_time))
return wrapper @foo
def bar(name):
time.sleep(3)
print('Hello %s .' % name) user_name = input('What is your name ?\n')
bar(user_name) # 输出结果 What is your name ?
zhanghk
Hello zhanghk .
the func run 3.0003373622894287 .
装饰器示例3(装饰器传递参数):
import time def foo(n):
def ac(func):
def wrapper(args):
if n == 1:
start_time = time.time()
func(args)
stop_time = time.time()
print('the func run %s .' % (stop_time - start_time))
else:
func(args)
return wrapper
return ac @foo(n = 0) # 由"n"是否等于1来判断是否计算程序运行时间
def bar(name):
time.sleep(3)
print('Hello %s .' % name) user_name = input('What is your name ?\n')
bar(user_name) # 输出结果 What is your name ?
zhanghk
Hello zhanghk .
1.16 Python基础知识 - 装饰器初识的更多相关文章
- 十. Python基础(10)--装饰器
十. Python基础(10)--装饰器 1 ● 装饰器 A decorator is a function that take a function as an argument and retur ...
- python基础—函数装饰器
python基础-函数装饰器 1.什么是装饰器 装饰器本质上是一个python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能. 装饰器的返回值是也是一个函数对象. 装饰器经常用于有切 ...
- [python基础]关于装饰器
在面试的时候,被问到装饰器,在用的最多的时候就@classmethod ,@staticmethod,开口胡乱回答想这和C#的static public 关键字是不是一样的,等面试回来一看,哇,原来是 ...
- Day11 Python基础之装饰器(高级函数)(九)
在python中,装饰器.生成器和迭代器是特别重要的高级函数 https://www.cnblogs.com/yuanchenqi/articles/5830025.html 装饰器 1.如果说装 ...
- 学习PYTHON之路, DAY 5 - PYTHON 基础 5 (装饰器,字符格式化,递归,迭代器,生成器)
---恢复内容开始--- 一 装饰器 1 单层装饰器 def outer(func): def inner(): print('long') func() print('after') return ...
- Python开发【第一篇】Python基础之装饰器
写代码要遵循开发封闭原则,虽然在这个原则是用的面向对象开发,但是也适用于函数式编程,简单来说,它规定已经实现的功能代码不允许被修改,但可以被扩展,即: 封闭:已实现的功能代码块开放:对扩展开发 #s2 ...
- python基础-----函数/装饰器
函数 在Python中,定义一个函数要使用def语句,依次写出函数名.括号.括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回. 函数的优点之一是,可以将代码块与主程 ...
- python基础之装饰器(实例)
1.必备 #### 第一波 #### def foo(): print 'foo' foo #表示是函数 foo() #表示执行foo函数 #### 第二波 #### def foo(): print ...
- 【Python基础】装饰器的解释和用法
装饰器的用法比较简单,但是理解装饰器的原理还是比较复杂的,考虑到接下来的爬虫框架中很多用到装饰器的地方,我们先来讲解一下. 函数 我们定义了一个函数,没有什么具体操作,只是返回一个固定值 请注意一下缩 ...
随机推荐
- SQLServer 查询最近一天,三天,一周,一月,一季度数据的方法
三天 select * from T_news where datediff(day,addtime,getdate())<= 2 and datediff(day,addtime,getdat ...
- 服务器无法远程管理客户端”计算机配置"解决方法
1.确认是否可ping 通 如无法ping通, 在入门规则中找到“文件和打印机共享(回显请求-ICMPv4-In)”,设定为启用(配置文件为:域) 2. 打开139端口 1.2在防火墙中设置如下:
- 温习 socket http tcp
Socket是一个接口,可以实现TCP或者UDP的传输HTTP是协议 资料: 1.TCP/IP连接 手机能够使用联网功能是因为手机底层实现了TCP/IP协议,可以使手机终端通过无线网络建立TCP连接. ...
- javaScript call与apply学习笔记
call和apply是借用他人的函数实现自己到功能,具体表现在改变this指向,借用他人方法 而不同的地方是call是把实参按照形参的个数传入,而apply传入的是一个数组(argument) 写一个 ...
- iterator的使用和封个问题
这篇文章的内容还是不错的: http://www.cnblogs.com/zhuyf87/archive/2012/12/08/2808290.html for (vector<int>: ...
- 对string的一些扩展函数
对string作了一些扩展,包含string转化为int.string转化为double.string转化为bool.打印系统当前时间.但没有解决数据溢出的问题,请大神帮忙解决! //头文件 /*pa ...
- Dynamics CRM 2015/2016 Web API:Unbound Custom Action 和 Bound Custom Action
今天我们再来看看Bound/Unbound Custom Action吧,什么是Custom Action?不知道的小伙伴们就out了,Dynamics CRM 2013就有了这个功能啦.和WhoAm ...
- js---03属性操作
<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...
- 用C#调用Lua脚本
用C#调用Lua脚本 一.引言 学习Redis也有一段时间了,感触还是颇多的,但是自己很清楚,路还很长,还要继续.上一篇文章简要的介绍了如何在Linux环境下安装Lua,并介绍了在Linux环境下如何 ...
- 58.express安装问题:express不是内部也或者外部的命令解决方案
转自:https://www.cnblogs.com/zhangym118/p/5842094.html "Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列 ...