一:python functools.wraps 实例

1. 未使用wraps的实例

#!/usr/bin/env python
# coding:utf-8 def logged(func):
def with_logging(*args, **kwargs):
'''i am wraps's doc'''
print func.__name__ + " was called"
return func(*args, **kwargs) return with_logging @logged
def f(x):
"""i am original doc"""
return x + x * x print f.__name__ # 期望的是原本的名字f,结果换成了装饰器里的新函数的名字with_logging
print f.__doc__ # 期望的是原本的注释,加了个装饰器成了新加装饰器里的注释了

2. 使用了wraps的实例

from functools import wraps

def logged(func):
@wraps(func)
def with_logging(*args, **kwargs):
'''i am wraps's doc'''
print func.__name__ + " was called"
return func(*args, **kwargs) return with_logging @logged
def f(x):
"""i am original doc"""
return x + x * x print f.__name__ # prints 'f'
print f.__doc__ # prints 'i am original doc'

二:python functools.partial 实例解读

#!/usr/bin/env python
# coding:utf-8 from functools import partial # 函数在执行时,要带上所有必要的参数进行调用。但是,有时参数可以在函数被调用之前提前获知。这种情况下,
# 一个函数有一个或多个参数预先就能用上,以便函数能用更少的参数进行调用。
def add(a, b):
return a+b
add(4, 3) # 普通执行函数的方式
plus = partial(add, 10) # 预先输入一部分参数10,
plus(2) # 再输入剩下的参数,超出少于都会报错;
plus = partial(add, 10, 2) # 预先输入所有参数
plus() # 不能再有入参了 def add2(a, b, c=2): # 有默认值的函数
return a + b + c
plus3 = partial(add2, 1)
plus3(1, 2)
partial(add2, 101)(1) def add3(*argv, **kwargs): # 不限制入参
return reduce(lambda x,y:x+y, argv)
plus4 = partial(add3, 1, 2)
plus4()

python functools.wraps functools.partial实例解析的更多相关文章

  1. python中super的用法实例解析

    概念 super作为python的内建函数.主要作用如下: 允许我们避免使用基类 跟随多重继承来使用 实例 在单个继承的场景下,一般使用super来调用基类来实现: 下面是一个例子: class Ma ...

  2. python的模块future用法实例解析

    计算机的知识太多了,很多东西就是一个使用过程中详细积累的过程.最近遇到了一个很久关于future的问题,踩了坑,这里就做个笔记,免得后续再犯类似错误.   future的作用:把下一个新版本的特性导入 ...

  3. Python标准库: functools (cmp_to_key, lru_cache, total_ordering, partial, partialmethod, reduce, singledispatch, update_wrapper, wraps)

    functools模块处理的对象都是其他的函数,任何可调用对象都可以被视为用于此模块的函数. 1. functools.cmp_to_key(func) 因为Python3不支持比较函数,cmp_to ...

  4. python functools.wraps装饰器模块

    # -*-coding=utf-8 -*-#实现一个函数执行后计算执行时间的功能 __author__ = 'piay' import time, functools def foo(): ''' 定 ...

  5. 【Python】functools.wraps定义函数装饰器

    第一次见到functools.wraps是在 Flask Web开发 中,一直不明白怎么回事. 装饰器(decorator)是干嘛的?对于受到封装的原函数来说,装饰器能够在那个函数执行前或者执行后分别 ...

  6. Python 中实现装饰器时使用 @functools.wraps 的理由

    Python 中使用装饰器对在运行期对函数进行一些外部功能的扩展.但是在使用过程中,由于装饰器的加入导致解释器认为函数本身发生了改变,在某些情况下——比如测试时——会导致一些问题.Python 通过  ...

  7. Python装饰器之functools.wraps的作用

    # -*- coding: utf-8 -*- # author:baoshan def wrapper(func): def inner_function(): pass return inner_ ...

  8. Python 装饰器之 functools.wraps

    在看 Bottle 代码中看见 functools.wraps 这种用法. def make_default_app_wrapper(name): """ Return ...

  9. python中functools.wraps装饰器的作用

    functools.wraps装饰器用于显示被包裹的函数的名称 import functools def node(func): #@functools.wraps(func) def wrapped ...

随机推荐

  1. 【window】window10永久关闭更新

    在使用pc过程中自己遇到的问题 相关资料:http://www.ghost580.com/win10/2016-10-21/17295.html 作者:smile.轉角 QQ:493177502

  2. CentOS 安装 clang

    Clang是一个C语言.C++.Objective-C.Objective-C++语言的轻量级编译器.源代码发布于BSD协议下.2013年4 月,Clang已经全面支持C++11标准,并开始实现C++ ...

  3. 深入理解 Node.js 中 EventEmitter源码分析(3.0.0版本)

    events模块对外提供了一个 EventEmitter 对象,即:events.EventEmitter. EventEmitter 是NodeJS的核心模块events中的类,用于对NodeJS中 ...

  4. 工具篇-Java中一些utils

    下边是整理的一些Java开发的utils,顺便吐槽下新浪博客的编辑器排版跟我写的博客一样 烂,所以改用博客园 一.字符串 1. Java中String与其他类型之间的转换 String与日期对象 pu ...

  5. Generative Adversarial Nets[iGAN]

    本文来自<Generative Visual Manipulation on the Natural Image Manifold>,是大神Jun-Yan Zhu在2016年9月的作品. ...

  6. 【转】DataTable与实体类互相转换

    原文地址:https://www.cnblogs.com/marblemm/p/7084797.html /// <summary> /// DataTable与实体类互相转换 /// & ...

  7. Keil开发环境如何生成BIN文件

    为什么需要BIN文件呢? 有些烧录器只支持BIN文件. 进行OTA远程升级时,只能使用BIN文件. 使用JLink脚本文件进行一键烧录时,只支持BIN文件. BIN文件要比HEX和AXF文件小的多. ...

  8. 【原创】Mysql中select的正确姿势

    引言 大家在开发中,还有很多童鞋在写查询语句的时候,习惯写下面这种不规范sql select * from table 而不写成下面的这种规范方式 select col1,col2,...,coln ...

  9. Groovy语言学习--语法基础(5)

    至此groovy语言学习-语法基础就结束了,新的工作已经安排下来,要干活了. 对groovy了解到一定程度之后就可以在java项目中对其进行引入了.为此新建了一个微型的项目,个人觉得千言万语不如代码实 ...

  10. Lucene.Net如何实现搜索结果分类统计功能

    最近我们搜易站内搜索系统的一个客户需要一个无限级分类和分类统计功能,要实现的效果如下: 但由于搜易站内搜索系统是基于Lucene.net 2.0开发的,并没有内置的分类统计搜索功能,于是乎只能自己实现 ...