functools,用於高階函式:指那些作用於函式或者返回其它函式的函式,通常只要是可以被當做函式呼叫的物件就是這個模組的目標。
在python 2.7 中具備如下方法,
cmp_to_key,將乙個比較函式轉換關鍵字函式;
partial,針對函式起作用,並且是部分的;
reduce,與python內建的reduce函式功能一樣;
total_ordering,在類裝飾器中按照缺失順序,填充方法;
將老式的比較函式(comparison function)轉換為關鍵字函式(key function),與接受key function的工具一同使用(例如sorted,min,max,heapq.nlargest,itertools.groupby),該函式主要用於將程式轉換成python 3格式的,因為python 3中不支援比較函式。
比較函式是可呼叫的,接受兩個引數,比較這兩個引數並根據他們的大小關係返回負值、零或者正值中的乙個。關鍵字函式也是可呼叫的,接受乙個引數,同時返回乙個可以用作排序關鍵字的值。
from functools import cmp_to_key
defcompare
(ele1,ele2):
return ele2 - ele1
a = [2,3,1]
print sorted(a, key = cmp_to_key(compare))
控制台輸出,
[3, 2, 1]
functools.partial(func, *args, **keywords),函式裝飾器,返回乙個新的partial物件。呼叫partial物件和呼叫被修飾的函式func相同,只不過呼叫partial物件時傳入的引數個數通常要少於呼叫func時傳入的引數個數。當乙個函式func可以接收很多引數,而某一次使用只需要更改其中的一部分引數,其他的引數都保持不變時,partial物件就可以將這些不變的物件凍結起來,這樣呼叫partial物件時傳入未凍結的引數,partial物件呼叫func時連同已經被凍結的引數一同傳給func函式,從而可以簡化呼叫過程。
如果呼叫partial物件時提供了更多的引數,那麼他們會被新增到args的後面,如果提供了更多的關鍵字引數,那麼它們將擴充套件或者覆蓋已經凍結的關鍵字引數。
partial物件的呼叫如下,
import functools
defadd
(a,b):
return a + b
add3 = functools.partial(add,3)
add5 = functools.partial(add,5)
print add3(4)
print add5(10)
控制台輸出,
7
15
與python內建的reduce函式一樣,為了向python3過渡;
import functools
a = range(1,6)
print functools.reduce(lambda x,y:x+y,a)
控制台輸出,
15
這是乙個類裝飾器,給定乙個類,這個類定義了乙個或者多個比較排序方法,這個類裝飾器將會補充其餘的比較方法,減少了自己定義所有比較方法時的工作量;
被修飾的類必須至少定義 __lt__(), __le__(),__gt__(),__ge__()中的乙個,同時,被修飾的類還應該提供 __eq__()方法。
from functools import total_ordering
class
person:
# 定義相等的比較函式
def__eq__
(self,other):
return ((self.lastname.lower(),self.firstname.lower()) ==
(other.lastname.lower(),other.firstname.lower()))
# 定義小於的比較函式
def__lt__
(self,other):
return ((self.lastname.lower(),self.firstname.lower()) <
(other.lastname.lower(),other.firstname.lower()))
p1 = person()
p2 = person()
p1.lastname = "123"
p1.firstname = "000"
p2.lastname = "1231"
p2.firstname = "000"
print p1 < p2
print p1 <= p2
print p1 == p2
print p1 > p2
print p1 >= p2
控制台輸出,
true
true
false
false
false
from functools import wraps
defmy_decorator
(f):
@wraps(f)
def(*args,**kwds):
print
"calling decorated function"
return f(*args,**kwds)
@my_decorator
defexample
():"""docstring"""
print
"called example function"
example()
print example.__name__
print example.__doc__
控制台輸出,
calling decorated function
called example function
example
docstring
將 @wraps(f)注釋掉,然後執行程式,控制台輸出,
calling decorated function
called example function
none
Python標準模組 sys
import syspath sys.path是模組搜尋路徑。python在程式啟動時進行配置,自動將頂級檔案的主目錄 任何pythonpath目錄 標準庫目錄 pth檔案中目錄合併。from sys import path舉例 如果想要呼叫另乙個資料夾中的某個函式,比如 path dir funf...
Python標準模組 functools
functools,用於高階函式 指那些作用於函式或者返回其它函式的函式,通常只要是可以被當做函式呼叫的物件就是這個模組的目標。在python 2.7 中具備如下方法,cmp to key,將乙個比較函式轉換關鍵字函式 partial,針對函式起作用,並且是部分的 reduce,與python內建的...
python標準模組學習1
fnmatch模組是pythhon自帶的模組,其主要功能是通過模式來匹配檔名 介面函式呼叫為 fnmatch.fnmatch file,patten patten的匹配模式為shell模式 當我們檢視其原始碼的時候,fnmatch其實是呼叫了fnmatchcase函式去處理檔名和匹配模式,該函式會做...