1.partial首先是partial函数,它可以重新绑定函数的可选参数,生成一个callable的partial对象:

>>> int('10') # 实际上等同于int('10', base=10)和int('10', 10)

10

>>> int('10', 2) # 实际上是int('10', base=2)的缩写

2

>>> from functools import partial

>>> int2 = partial(int, 2) # 这里我没写base,结果就出错了

>>> int2('10')

Traceback (most recent call last):

File "", line 1, in

TypeError: an integer is required

>>> int2 = partial(int, base=2) # 把base参数绑定在int2这个函数里

>>> int2('10') # 现在缺省参数base被设为2了

2

>>> int2('10', 3) # 没加base,结果又出错了

Traceback (most recent call last):

File "", line 1, in

TypeError: keyword parameter 'base' was given by position and by name

>>> int2('10', base=3)

3

>>> type(int2)

从中可以看出,唯一要注意的是可选参数必须写出参数名。

2.update_wrapper接着是update_wrapper函数,它可以把被封装函数的__name__、__module__、__doc__和 __dict__都复制到封装函数去:

#-*- coding: gbk -*-

def thisIsliving(fun):

def living(*args, **kw):

return fun(*args, **kw) + '活着就是吃嘛。'

return living

@thisIsliving

def whatIsLiving():

"什么是活着"

return '对啊,怎样才算活着呢?'

print whatIsLiving()

print whatIsLiving.__doc__

print

from functools import update_wrapper

def thisIsliving(fun):

def living(*args, **kw):

return fun(*args, **kw) + '活着就是吃嘛。'

return update_wrapper(living, fun)

@thisIsliving

def whatIsLiving():

"什么是活着"

return '对啊,怎样才算活着呢?'

print whatIsLiving()

print whatIsLiving.__doc__

结果:

对啊,怎样才算活着呢?活着就是吃嘛。

None

对啊,怎样才算活着呢?活着就是吃嘛。

什么是活着

不过也没多大用处,毕竟只是少写了4行赋值语句而已。

3.wraps再有是wraps函数,它将update_wrapper也封装了进来:

#-*- coding: gbk -*-

from functools import wraps

def thisIsliving(fun):

@wraps(fun)

def living(*args, **kw):

return fun(*args, **kw) + '活着就是吃嘛。'

return living

@thisIsliving

def whatIsLiving():

"什么是活着"

return '对啊,怎样才算活着呢?'

print whatIsLiving()

print whatIsLiving.__doc__

结果还是一样的:

对啊,怎样才算活着呢?活着就是吃嘛。

什么是活着

4.total_ordering最后至于total_ordering函数则给予类丰富的排序方法,使用装饰器简化了操作。如果使用必须在类里面定义一个__lt__(),__le__(), __gt__(), 或__ge__()。应该给类添加一个__eq__() 方法。

from functools import total_ordering

@total_ordering

class Student(object):

def __init__(self, name):

self.name = name

def __eq__(self, other):

return self.name.lower() == other.name.lower()

def __lt__(self, other):

return self.name.lower() < other.name.lower()

a = Student('dan')

b = Student('mink')

print a > b

print a

print sorted([b, a])

打印结果

False

[<__main__.student object at>, <__main__.student object at>]

本文标题: Python中functools模块的常用函数解析

本文地址: http://www.cppcns.com/jiaoben/python/155305.html

python中functools_Python中functools模块的常用函数解析相关推荐

  1. python 中os.path 的一些路径常用函数

    python 中os.path 的一些路径常用函数 import os path = 'AAA/BBB/ccc.txt' aa=os.path.dirname(path) #返回文件路径 print( ...

  2. python six模块详解_对python中的six.moves模块的下载函数urlretrieve详解

    实验环境:windows 7,anaconda 3(python 3.5),tensorflow(gpu/cpu) 函数介绍:所用函数为six.moves下的urllib中的函数,调用如下urllib ...

  3. python日历函数_Python—日历函数—日历模块的常用函数,calendar,常见

    Python-日历函数-日历模块的常用函数,calendar,常见 发表时间:2020-07-07 日历函数 calendar模块中提供了非常多的函数来处理年历和日历. 例如:打印2020年7月份的日 ...

  4. python装饰器及functools模块

    python装饰器及functools模块 本文是笔者学习python装饰器以及functools模块的笔记. 在开始学习之前,先在此列举出python函数的一些特性: 一切皆对象:python函数也 ...

  5. Python — matplotlib.pyplot 绘图模块及常用函数

    目录 1. 基本用法与折线图 pyplot 模块的常用函数 折线图函数: matplotlib.pyplot.plot() 常用 format_string 参数 常用函数 grid () 控制各轴网 ...

  6. python重要的第三方库pandas模块常用函数解析之DataFrame

    pandas模块常用函数解析之DataFrame 关注公众号"轻松学编程"了解更多. 以下命令都是在浏览器中输入. cmd命令窗口输入:jupyter notebook 打开浏览器 ...

  7. Mahout中关于MultiLayer Perceptron模块的源码解析

    Mahout中关于MultiLayer Perceptron模块的源码解析 前段时间学习NN时使用到了BPNN,考虑到模型的分布式扩展,我想到使用Mahout的MultiLayer Perceptro ...

  8. python基础常用语句-python爬虫之python一条语句分析几个常用函数和概念

    https://www.xin3721.com/eschool/pythonxin3721/ 前言 过年也没完全闲着,每天用一点点时间学点东西,本文为大家介绍几个python操作的细节,包含all.a ...

  9. 计算机vb常用计算公式,计算机等级考试二级VB常用函数解析

    p=ABS(X):取X的绝对值. p=Log(X):求X的自然对数. Y=Sgn(X):符号函数. 说明: X>0时Y=1;X=0时 Y=0;X<0 时Y=-1. 例: Response. ...

  10. 【pickle】详解python中的pickle模块(常用函数、示例)

    1.序列化.反序列化介绍 序列化:把对象转换为字节序列的过程称为对象的序列化. 反序列化:把字节序列恢复为对象的过程称为对象的反序列化. 2.pickle模块说明 python中的pickle模块实现 ...

最新文章

  1. 【FFmpeg】ffmpeg命令详解(一)
  2. javascript 设计模式(一)
  3. java 集合类源码分析--collections
  4. 利用System.Net.Mail 的SmtpClient发送邮件
  5. 在 C++ 中使用 PPL 进行异步编程
  6. eclipse/myeclipse中快捷键 Ctrl+shift+down/up 出现屏幕颠倒的解决方法
  7. 计算机用户名登陆管理员权限,关于win10勿删用户账号下管理员身份导致无法登录系统的问题...
  8. api函数原型大全_如何使用您的API优先平台来使原型做好生产准备
  9. python几行代码识别验证码_Python有多强?文字识别(验证码识别)只需三行代码!...
  10. 对称加密和非对称加密转载
  11. Nginx 安装与使用
  12. RabbitMQ下载与安装(window版) 自我总结
  13. awk取列 shell 读文件_大厂运维高手如何打造核心竞争力?这些Shell命令合集得知道!...
  14. 9.Kong入门与实战 基于Nginx和OpenResty的云原生微服务网关 --- 高级进阶
  15. 基于Jtopo的网络拓扑编辑器初探
  16. javaweb 温习
  17. ActiveMQ 之安全认证
  18. 测序技术回顾与第三代测序技术展望
  19. 一文看懂新能源汽车国家政策(附政策汇总)
  20. 2021-11-09 2.bea生命周期和回调及其它注解

热门文章

  1. 与近似比固定算法的高性能算法
  2. dstat 性能监测工具
  3. 20200102每日一句
  4. python, c/c++去掉文本的换行符
  5. HCI实验图常见类型
  6. Atitit 写的计算机技术类的书 与it类紧密的学科 atiitt it学科体系化 体系树与知识点概念大总结 v3 t88.xlsx 门类 学科一级分类 专业、二级学科分类 课程 书籍 工学
  7. Atitit java sound api体系 javadoc与类层级 目录 1. 软件包 javax.sound.sampled 1 1.1. 软件包 javax.sound.sampled 1
  8. Atitit 视图状态ViewState)的原理与管理
  9. paip.软件版本完善计划C426fromVC423
  10. paip.php调试不能显示局部变量内容with xdebug