Python標準模組 functools

2021-08-19 07:03:02 字數 3221 閱讀 6479

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函式去處理檔名和匹配模式,該函式會做...