python--Wrapper
然后给大家介绍的是Wrapper(装饰器),使用广泛。python笔试,面试的话也会百分百问到的,基础和中级的知识储备还是必用的。
让我们开始。
先来一些基础相关知识
*args,**kwargs的区别 def function(x,y,*args,**kwargs):
print(type(x))
print(args)
print(kwargs)
print(type(args))
print(type(kwargs)) function(1,2,3,4,5,a=1,b=2,c=3) <type 'int'>
(3, 4, 5) #*args返回的是数组
{'a': 1, 'c': 3, 'b': 2} #**kwargs返回的字典
<type 'tuple'>
<type 'dict'>
正题开始
固定模板
装饰器:wrapper
模板:
def 装饰器名(func): #def 与 @之后的函数名称一致 调用函数func与ret=func(*args,**kwargs)内部函数一致
def wrapper(*args,**kwargs): #def 与 return 之后的函数名称一致
ret = func(*args,**kwargs)
return ret #return ret 与 ret=func(*args,**kwargs)一致
return wrapper @装饰器名
def foo():
pass
import time def timmer(fun1):
def wrapper(*args,**kwargs):
start_time=time.time()
res=fun1(*args,**kwargs)
stop_time=time.time()
print('run time is %s' %(stop_time-start_time))
return res
return wrapper @timmer
def foo():
time.sleep(3)
print('from foo') @timmer
def foo1():
time.sleep(5)
print('from foo1') foo()
foo1()
@wraps:避免被装饰函数自身的信息丢失
未添加@wraps
#-*- coding:utf-8 -*-
def decorator(func):
def inner_function():
pass
return inner_function @decorator
def func():
pass print(func.__name__)
#inner_function
添加@wraps
from functools import wraps def decorator(func):
@wraps(func)
def inner_function():
pass
return inner_function @decorator
def func():
pass print(func.__name__)
#func
#@wraps:避免被装饰函数自身的信息丢失
多个装饰器的同时使用
def makebold(f):
return lambda:'<b>'+f()+'</b>'
def makeitalic(f):
return lambda:'<i>'+f()+'</i>'
def makeitalic1(f):
return lambda:'<strong>'+f()+'</strong>' @makebold
@makeitalic1
@makeitalic
def say():
return 'hello' print(say())
#<b><strong><i>hello</i></strong></b>
#多个装饰器的执行顺序:是从近到远依次执行。
类装饰器
#类装饰器
class Decorator(object):
def __init__(self, f):
self.f = f
def __call__(self):
print("decorator start")
self.f()
print("decorator end") @Decorator
def func():
print("func") func()
'''
decorator start
func
decorator end
'''
import time def decorator(func):
def wrapper(*args,**kwargs):
start_time = time.time()
func(*args,**kwargs)
end_time = time.time()
print(end_time - start_time)
return wrapper class Method(object): @decorator
def func(self):
time.sleep(0.8) p1 = Method()
p1.func() # 函数调用
'''
0.815999984741
对于类方法来说,都会有一个默认的参数self,它实际表示的是类的一个实例,所以在装饰器的内部函数wrapper也要传入一个参数
- me_instance(任意参数)就表示将类的实例p1传给wrapper,其他的用法都和函数装饰器相同。
'''
较为复杂的多个装饰器
import time def deco01(func):
def wrapper(*args, **kwargs):
print("this is deco01")
startTime = time.time()
func(*args, **kwargs)
endTime = time.time()
msecs = (endTime - startTime)*1000
print("time is %d ms" %msecs)
print("deco01 end here")
return wrapper def deco02(func):
def wrapper(*args, **kwargs):
print("this is deco02")
func(*args, **kwargs)
print("deco02 end here")
return wrapper @deco01
@deco02
def func(a,b):
print("hello,here is a func for add :")
time.sleep(1)
print("result is %d" %(a+b)) if __name__ == '__main__':
f = func
f(3,4) '''
this is deco01
this is deco02
hello,here is a func for add :
result is 7
deco02 end here
time is 1032 ms
deco01 end here
'''
#多个装饰器执行的顺序就是从最后一个装饰器开始,执行到第一个装饰器,再执行函数本身。
python--Wrapper的更多相关文章
- android 自动化测试 ---python wrapper(python 包装)
		关于有道云笔记复制的东西不能直接copy到博客园,可以选择使用txt文件做个媒介 1.appium 2.monkeyrunner 3.uiautomator2 前面两种种方式都要加载androidsd ... 
- Python框架、库以及软件资源汇总
		转自:http://developer.51cto.com/art/201507/483510.htm 很多来自世界各地的程序员不求回报的写代码为别人造轮子.贡献代码.开发框架.开放源代码使得分散在世 ... 
- Awesome Python
		Awesome Python A curated list of awesome Python frameworks, libraries, software and resources. Insp ... 
- Machine and Deep Learning with Python
		Machine and Deep Learning with Python Education Tutorials and courses Supervised learning superstiti ... 
- Building Python 2.7.10 with Visual Studio 2010 or 2015 - Google Chrome
		您的浏览器(Chrome 33) 需要更新.该浏览器有诸多安全漏洞,无法显示本网站的所有功能. 了解如何更新浏览器 × p-nand-q.com C++ Python Programming L ... 
- python提取隐含结构的字符串
		当我用Stanford CoreNLP和A Python wrapper for the Java Stanford Core NLP tools(NLP的python调用工具)进行句法分析时,遇到一 ... 
- Python:渗透测试开源项目
		Python:渗透测试开源项目[源码值得精读] sql注入工具:sqlmap DNS安全监测:DNSRecon 暴力破解测试工具:patator XSS漏洞利用工具:XSSer Web服务器压力测试工 ... 
- Python金融行业必备工具
		有些国外的平台.社区.博客如果连接无法打开,那说明可能需要"科学"上网 量化交易平台 国内在线量化平台: BigQuant - 你的人工智能量化平台 - 可以无门槛地使用机器学习. ... 
- python 各种开源库
		测试开发 来源:https://www.jianshu.com/p/ea6f7fb69501 Web UI测试自动化 splinter - web UI测试工具,基于selnium封装. 链接 sel ... 
- python 三方面库整理
		测试开发 Web UI测试自动化 splinter - web UI测试工具,基于selnium封装. selenium - web UI自动化测试. –推荐 mechanize- Python中有状 ... 
随机推荐
- 【Ionic】---Using Local Notifications In Your Ionic Framework App
			Using Local Notifications In Your Ionic Framework App 配置好ng-cordova先 <script src="lib/ngCord ... 
- Mysql 求时间 between 昨天 and 上个月的今天 等时间函数
			问题: Mysql表中一列create_time,类型datetime(YYYY-MM-DD HH:MM:SS),想获取上个月今天到昨天的数据. select * from 表名 where date ... 
- 连接数据库报错:1130-Host 'xxx' is not allowed to connect to this MySQL server解决
			出现这个问题的同学都很奇怪,为啥用localhost就可以连接上,但是使用本地ip就不行.出现这个问题的原因就是mysql未开启mysql远程访问权限导致. 这时候我们就用cmd去访问下你的mysql ... 
- OC跟Swift混编
			OC项目中使用Swift 本文版权归作者所有,如需转载请联系孟祥月 CSDN博客:http://blog.csdn.net/mengxiangyue 独立博客:http://mengxiangyue ... 
- 《Cron表达式详解》
			Cron表达式是一个字符串,字符串以5或6个空格隔开,分为6或7个域,每一个域代表一个含义,Cron有如下两种语法格式: Seconds Minutes Hours DayofMonth Month ... 
- 即将要被淘汰的兼容之--CSS Hack
			css hack 条件注释法只在IE下生效<!--[if IE]>这段文字只在IE浏览器显示<![endif]-->只在IE6下生效<!--[if IE 6]>这段 ... 
- <Android 基础(十七)> ViewPager介绍
			介绍 Layout manager that allows the user to flip left and right through pages of data. You supply an i ... 
- Android基础Activity篇——销毁活动
			销毁活动只需要添加 finish(); 这个方法即可.相当于back键. 
- WebAPI示例
			一.新建项目 二. 代码: Models.Products实体类 public class Product { /// <summary> /// 产品编号 /// </summar ... 
- 初看Mybatis 源码 (一)
			Mybatis 的使用,首先需要构建一个SqlSessionFactory 实例.而该实例可以通过SqlSessionFactoryBuilder来创建. String resource = &quo ... 
