python decorator 基础
# -*- coding: utf-8 -*-
def log_cost_time(func):
def wrapped(*args, **kwargs):
import time
begin = time.time()
try:
return func(*args, **kwargs)
finally:
print 'func %s cost %s' % (func.__name__, time.time() - begin)
return wrapped @log_cost_time
def complex_func(num):
ret = 0
for i in xrange(num):
ret += i * i
return ret
#complex_func = log_cost_time(complex_func) if __name__ == '__main__':
print complex_func(100000)
code snippet 0
@decdef func():pass
- functools.update_wrapper
functools.update_wrapper(wrapper, wrapped[, assigned][, updated])- functools.wraps: update_wrapper的封装
-
This is a convenience function for invoking
partial(update_wrapper,wrapped=wrapped,assigned=assigned,updated=updated)as a function decorator when defining a wrapper function.
简单改改代码:
import functools
def log_cost_time(func):
@functools.wraps(func)
def wrapped(*args, **kwargs):
import time
begin = time.time()
try:
return func(*args, **kwargs)
finally:
print 'func %s cost %s' % (func.__name__, time.time() - begin)
return wrapped
def log_cost_time(stream):
def inner_dec(func):
def wrapped(*args, **kwargs):
import time
begin = time.time()
try:
return func(*args, **kwargs)
finally:
stream.write('func %s cost %s \n' % (func.__name__, time.time() - begin))
return wrapped
return inner_dec import sys
@log_cost_time(sys.stdout)
def complex_func(num):
ret = 0
for i in xrange(num):
ret += i * i
return ret if __name__ == '__main__':
print complex_func(100000)
code snippet 1
def Haha(clz):
clz.__str__ = lambda s: "Haha"
return clz @Haha
class Widget(object):
''' class Widget ''' if __name__ == '__main__':
w = Widget()
print w
动态地为某个对象增加额外的责任

由于装饰器模式仅从外部改变组件,因此组件无需对它的装饰有任何了解;也就是说,这些装饰对该组件是透明的。


def catchall(func):
@functools.wraps(func)
def wrapped(*args, **kwargs):
try:
return func(*args, **kwargs)
except:
pass
return wrapped
python decorator 基础的更多相关文章
- Python Decorator 和函数式编程
看到一篇翻译不错的文章,原文链接: Python Decorator 和函数式编程
- Python文件基础
===========Python文件基础========= 写,先写在了IO buffer了,所以要及时保存 关闭.关闭会自动保存. file.close() 读取全部文件内容用read,读取一行用 ...
- 3.Python编程语言基础技术框架
3.Python编程语言基础技术框架 3.1查看数据项数据类型 type(name) 3.2查看数据项数据id id(name) 3.3对象引用 备注Python将所有数据存为内存对象 Python中 ...
- Python爬虫基础
前言 Python非常适合用来开发网页爬虫,理由如下: 1.抓取网页本身的接口 相比与其他静态编程语言,如java,c#,c++,python抓取网页文档的接口更简洁:相比其他动态脚本语言,如perl ...
- 小白必看Python视频基础教程
Python的排名从去年开始就借助人工智能持续上升,现在它已经成为了第一名.Python的火热,也带动了工程师们的就业热.可能你也想通过学习加入这个炙手可热的行业,可以看看Python视频基础教程,小 ...
- Python爬虫基础之requests
一.随时随地爬取一个网页下来 怎么爬取网页?对网站开发了解的都知道,浏览器访问Url向服务器发送请求,服务器响应浏览器请求并返回一堆HTML信息,其中包括html标签,css样式,js脚本等.我们之前 ...
- 零基础学Python--------第2章 Python语言基础
第2章 Python语言基础 2.1 Python语法特点 2.11注释 在Python中,通常包括3种类型的注释,分别是单行注释.多行注释和中文编码声明注释. 1.单行注释 在Python中,使用 ...
- Python学习基础笔记(全)
换博客了,还是csdn好一些. Python学习基础笔记 1.Python学习-linux下Python3的安装 2.Python学习-数据类型.运算符.条件语句 3.Python学习-循环语句 4. ...
- Python数据分析基础教程
Python数据分析基础教程(第2版)(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1_FsReTBCaL_PzKhM0o6l0g 提取码:nkhw 复制这段内容后 ...
随机推荐
- 休息,归类一下CSS初级的东西
css基础的东西集中体现在了"磊盒子"这一个枯燥无味的东西上面,灵活的运用盒子的内外边距,浮动,定位以及一些基础的属性,将一个静态的页面变得磊出来,这是CSS基础的练习. 在css ...
- SpringMVC---@RequestMapping
配置文件 承接第一,二章 index.jsp <%@ page language="java" contentType="text/html; charset=UT ...
- linux-之常用命令
Linux常用命令,长时间不用或者想用时具体的使用方法模糊了,可以进行查看,避免还要去其他地方进行查找麻烦,所以找了一些命令进行记录. 1.帮助命令 help 和 man 帮助查看命令的具体使用方 ...
- webpack 3.X学习之CSS处理
Loaders Loaders是Webpack最重要的功能之一,他也是Webpack如此盛行的原因.通过使用不同的Loader,Webpack可以的脚本和工具,从而对不同的文件格式进行特定处理. Lo ...
- params SqlParameter[] commandParameters(转)
C#代码 ExecuteReader(string connectionString, CommandType commandType, string commandText, params Sql ...
- 状态压缩- Brackets
标签: ACM 题目: We give the following inductive definition of a "regular brackets" sequence: t ...
- SQL知识目录
SQL理论知识 -------理论知识总结 -------理论知识总结 -------理论知识总结 -------理论知识总结 -------理论知识总结 -------理论知识总结 -------理 ...
- Linux系统安装-MacBook网卡驱动问题解决
先附上MacBook的linux安装教程 需要注意的是第7步中可能无法识别出OS X的系统,也没关系,只要格式化磁盘的时候注意选择对应磁盘即可,格式化成EXT4分区. 安装好后发现无法连接无线网络,应 ...
- java基础回顾(2)
java中只有两种类型:基础类型.引用类型 8中基本类型:byte short int long float double char boolean,其中byte类型取值范围[-2^7~2^7-1] ...
- NGUI_01
序言:这是张三疯第一次开始NGUI插件的学习,刚开始学习,肯定有很多漏洞,后期会及时的补上的.希望大家可以见谅,希望大佬多多指教. 扩充:为提供和我一样的小白找不到免费的NGUI插件,这里分享百度网盘 ...