python中functools_Python中functools模块的常用函数解析

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值