Python functools模組學習總結

2021-07-23 23:38:50 字數 3905 閱讀 1216

functools.partial

作用:functools.partial 通過包裝手法,允許我們 "重新定義" 函式簽名

用一些預設引數包裝乙個可呼叫物件,返回結果是可呼叫物件,並且可以像原始物件一樣對待

凍結部分函式位置函式或關鍵字引數,簡化函式,更少更靈活的函式引數呼叫

複製**

**如下:

#args/keywords 呼叫partial時引數

def partial(func, *args, **keywords):

def newfunc(*fargs, **fkeywords):

newkeywords = keywords.copy()

newkeywords.update(fkeywords)

return func(*(args + fargs), **newkeywords) #合併,呼叫原始函式,此時用了partial的引數

newfunc.func = func

newfunc.args = args

newfunc.keywords = keywords

return newfunc

宣告:複製**

**如下:

urlunquote = functools.partial(urlunquote, encoding='latin1')

當呼叫 urlunquote(args, *kargs)

相當於 urlunquote(args, *kargs, encoding='latin1')

e.g:

複製**

**如下:

import functools

def add(a, b):

return a + b

add(4, 2)

6plus3 = functools.partial(add, 3)

plus5 = functools.partial(add, 5)

plus3(4)

7plus3(7)

10plus5(10)15

應用:典型的,函式在執行時,要帶上所有必要的引數進行呼叫。

然後,有時引數可以在函式被呼叫之前提前獲知。

這種情況下,乙個函式有乙個或多個引數預先就能用上,以便函式能用更少的引數進行呼叫。

複製**

**如下:

('__module__', '__name__', '__doc__')

('__dict__',)

這個函式主要用在裝飾器函式中,裝飾器返回函式反射得到的是包裝函式的函式定義而不是原始函式定義

複製**

**如下:

#!/usr/bin/env python

# encoding: utf-8

def wrap(func):

def call_it(*args, **kwargs):

"""wrap func: call_it"""

print 'before call'

return func(*args, **kwargs)

return call_it

@wrap

def hello():

"""say hello"""

print 'hello world'

@wrap2

def hello2():

"""test hello"""

print 'hello world2'

if __name__ == '__main__':

hello()

print hello.__name__

print hello.__doc__

print

hello2()

print hello2.__name__

print hello2.__doc__

得到結果:

複製**

**如下:

before call

hello world

call_it

wrap func: call_it

before call

hello world2

hello2

test hello

functool.wraps

複製**

**如下:

from functools import wraps

def wrap3(func):

@wraps(func)

def call_it(*args, **kwargs):

"""wrap func: call_it2"""

print 'before call'

return func(*args, **kwargs)

return call_it

@wrap3

def hello3():

"""test hello 3"""

print 'hello world3'

結果複製**

**如下:

before call

hello world3

hello3

test hello 3

functools.reduce

複製**

**如下:

functools.reduce(function, iterable[, initializer])

等同於內建函式reduce()

用這個的原因是使**更相容(python3)

functools.cmp_to_key

functools.cmp_to_key(func)

將老式鼻尖函式轉換成key函式,用在接受key函式的方法中(such as sorted(), min(), max(), heapq.nlargest(), heapq.nsmallest(), itertools.groupby())

乙個比較函式,接收兩個引數,小於,返回負數,等於,返回0,大於返回整數

key函式,接收乙個引數,返回乙個表明該引數在期望序列中的位置

例如:複製**

**如下:

sorted(iterable, key=cmp_to_key(locale.strcoll))  # locale-aware sort order

functools.total_ordering

複製**

**如下:

functools.total_ordering(cls)

這個裝飾器是在python2.7的時候加上的,它是針對某個類如果定義了__lt__、le、gt、__ge__這些方法中的至少乙個,使用該裝飾器,則會自動的把其他幾個比較函式也實現在該類中

複製**

**如下:

@total_ordering

class student:

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()))

print dir(student)

得到複製**

**如下:

['__doc__', '__eq__', '__ge__', '__gt__', '__le__', '__lt__', '__module__']

Python flask模組介面開發學習總結

flask 是乙個簡單且十分強大的python web 框架。它被稱為微框架,微 並不是意味著把整個web應用放入到乙個python檔案,微框架中的 微 是指flask旨在保持 簡潔且易於擴充套件,flask框架的主要特徵是核心構成比較簡單,但具有很強的擴充套件性和相容性,程式設計師可以使用pyth...

kali auxiliary掃瞄常用模組總結筆記

命令列滲透,主要針對埠和系統服務,從基礎開始一點點積累.做乙個筆記方便查詢 arp掃瞄 search arp use auxiliary scanner discovery arp sweep set inte ce rhost shost smac threads run埠掃瞄 search po...

Xamarin for android學習總結一

1.adapter就是資料讀入記憶體後的 記憶體中介 2.intend,broadcast,server,provider,activity,執行關係圖 3.toast用於向使用者顯示一些幫助 提示 c 中toast是由其他執行緒呼叫更新ui主線程之用 4.android中ui執行緒與後台執行緒互動...