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)
與python內建的reduce函式一樣,為了向python3過渡;7
15
控制台輸出,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):
"calling decorated function"
return f(*args,**kwds)
@my_decorator
defexample
():"""docstring"""
"called example function"
example()
print example.__name__
print example.__doc__
將 @wraps(f)注釋掉,然後執行程式,控制台輸出,calling decorated function
called example function
example
docstring
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函式去處理檔名和匹配模式,該函式會做...