欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python中functools模塊的常用函數(shù)解析

 更新時(shí)間:2016年06月30日 16:09:12   作者:wyabc1986  
這篇文章主要介紹了Python中functools模塊的常用函數(shù)解析,分別講解了partial、update_wrapper、wraps、total_ordering的用法,需要的朋友可以參考下

1.partial
首先是partial函數(shù),它可以重新綁定函數(shù)的可選參數(shù),生成一個(gè)callable的partial對象:

>>> int('10') # 實(shí)際上等同于int('10', base=10)和int('10', 10) 
10 
>>> int('10', 2) # 實(shí)際上是int('10', base=2)的縮寫 
2 
>>> from functools import partial 
>>> int2 = partial(int, 2) # 這里我沒寫base,結(jié)果就出錯(cuò)了 
>>> int2('10') 
Traceback (most recent call last): 
 File "<stdin>", line 1, in <module> 
TypeError: an integer is required 
>>> int2 = partial(int, base=2) # 把base參數(shù)綁定在int2這個(gè)函數(shù)里 
>>> int2('10') # 現(xiàn)在缺省參數(shù)base被設(shè)為2了 
2 
>>> int2('10', 3) # 沒加base,結(jié)果又出錯(cuò)了 
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'> 

從中可以看出,唯一要注意的是可選參數(shù)必須寫出參數(shù)名。

2.update_wrapper
接著是update_wrapper函數(shù),它可以把被封裝函數(shù)的__name__、__module__、__doc__和 __dict__都復(fù)制到封裝函數(shù)去:

#-*- 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__ 

結(jié)果:

對啊,怎樣才算活著呢?活著就是吃嘛。
None

對啊,怎樣才算活著呢?活著就是吃嘛。
什么是活著

不過也沒多大用處,畢竟只是少寫了4行賦值語句而已。

3.wraps
再有是wraps函數(shù),它將update_wrapper也封裝了進(jìn)來:

#-*- 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__ 

結(jié)果還是一樣的:

對啊,怎樣才算活著呢?活著就是吃嘛。
什么是活著

4.total_ordering
最后至于total_ordering函數(shù)則給予類豐富的排序方法,使用裝飾器簡化了操作。如果使用必須在類里面定義一個(gè)__lt__(),__le__(), __gt__(), 或__ge__()。應(yīng)該給類添加一個(gè)__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])

打印結(jié)果

False
<__main__.Student object at 0x7f16ecb194d0>
[<__main__.Student object at 0x7f16ecb194d0>, <__main__.Student object at 0x7f16ecb195d0>]

相關(guān)文章

最新評論