国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python中functools模塊的常用函數解析

2019-11-25 16:40:45
字體:
來源:轉載
供稿:網友

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_orderingclass 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 > bprint aprint sorted([b, a])

打印結果

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 烟台市| 桓台县| 正阳县| 新野县| 高州市| 千阳县| 昌邑市| 吴忠市| 盘锦市| 鲜城| 镇赉县| 正宁县| 都安| 托克托县| 平潭县| 仙桃市| 平和县| 葵青区| 县级市| 梧州市| 建阳市| 铜梁县| 武强县| 兰考县| 靖州| 新民市| 道孚县| 岫岩| 宜昌市| 从化市| 阳朔县| 蕉岭县| 乐平市| 呼玛县| 乐清市| 丁青县| 海盐县| 蒙城县| 彭州市| 合川市| 应城市|