Python中functools模块的常用函数解析

 更新时间:2016年06月30日 16:09:12   作者:wyabc1986  
这篇文章主要介绍了Python中functools模块的常用函数解析,分别讲解了partial、update_wrapper、wraps、total_ordering的用法,需要的朋友可以参考下

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 "<stdin>", line 1, in <module> 
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 "<stdin>", line 1, in <module> 
TypeError: keyword parameter 'base' was given by position and by name 
>>> int2('10', base=3) 
3 
>>> type(int2) 
<type 'functools.partial'> 

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

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 0x7f16ecb194d0>
[<__main__.Student object at 0x7f16ecb194d0>, <__main__.Student object at 0x7f16ecb195d0>]

相关文章

  • Python基础学习之模块的安装和卸载

    Python基础学习之模块的安装和卸载

    其实现在还是有很多刚开始学习的小伙伴,会遇到模块不会安装的情况,或者一遇到报错就懵了,这样就很耽误我们的学习进度。所以,今天我们就来了解一下Python几种安装模块的方法吧
    2022-09-09
  • Python使用进程Process模块管理资源

    Python使用进程Process模块管理资源

    这篇文章主要介绍了Python使用进程Process模块管理资源,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • 编写Python脚本来实现最简单的FTP下载的教程

    编写Python脚本来实现最简单的FTP下载的教程

    这篇文章主要介绍了编写Python脚本来实现最简单的FTP下载的教程,主要用到了ftplib模块,无图形界面...需要的朋友可以参考下
    2015-05-05
  • Python设计模式之观察者模式简单示例

    Python设计模式之观察者模式简单示例

    这篇文章主要介绍了Python设计模式之观察者模式,简单描述了观察者模式的概念、原理,并结合实例形式分析了Python观察者模式的相关定义与使用技巧,需要的朋友可以参考下
    2018-01-01
  • python 下载文件的几种方法汇总

    python 下载文件的几种方法汇总

    这篇文章主要介绍了python 下载文件的几种方法汇总,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下
    2021-01-01
  • python交互模式下输入换行/输入多行命令的方法

    python交互模式下输入换行/输入多行命令的方法

    这篇文章主要介绍了python交互模式下输入换行/输入多行命令的方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-07-07
  • Python中的装饰器类详解

    Python中的装饰器类详解

    Python 装饰器在很多情况下是一个非常有用的工具,它们可以用于修改或增强函数或类的行为,本篇文章将深入探讨如何在 Python 中使用类装饰器
    2023-06-06
  • 人工智能学习pyTorch自建数据集及可视化结果实现过程

    人工智能学习pyTorch自建数据集及可视化结果实现过程

    这篇文章主要为大家介绍了人工智能学习pyTorch自建数据集及可视化结果的实现过程,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2021-11-11
  • python openvc 裁剪、剪切图片 提取图片的行和列

    python openvc 裁剪、剪切图片 提取图片的行和列

    这篇文章主要介绍了python openvc 裁剪、剪切图片 提取图片的行和列,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-09-09
  • Django与图表的数据交互的实现

    Django与图表的数据交互的实现

    本文主要介绍了Django与图表的数据交互的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08

最新评论