python之偏函數

摘要:python的設計核心原則就是簡潔——在這種原則的指導下,誕生了lambda表達式和偏函數:兩者都讓函數調用變得簡潔。本文主要爲你介紹偏函數的應用。python

爲何要用偏函數

若是咱們定義了一個函數,好比說將四個數相加add(one ,two,three,four),上層有不少函數須要調用這個函數。在這些調用中,80%的調用傳遞的參數都是one=1,two=20,若是咱們每都輸入相同的參數,這樣乏味並且浪費,當然,咱們能夠經過默認參數來解決這個問題;可是若是另外咱們也須要參數是one=2,two=10的狀況呢?因此,咱們須要一種函數,可以將任意數量的參數的函數轉化成帶剩餘參數的函數對象。session

經過上面,咱們大概明白了什麼是偏函數:簡單的說,偏函數就是某一種函數帶有固定參數的實現,因此,咱們須要:函數

1)給偏函數命名spa

2)傳遞固定參數設計

from functools import partial
def add(a,b):
    return a+b

p1 = partial(add, 100)

p2 = partial(add, 90)

print('p1=', p1(99))

print('p2=', p2(30))

'''
結果:
p1=199
p2=120    
'''

使用偏函數

結合getattr反射code

            import functools
            class RequestContext(object):
                def __init__(self):
                    self.request = "xxxxx"
                    self.session = "iusdkfjlskdf"

            obj = RequestContext()
            # obj.request
            # obj.session



            def get_data(name):
                return getattr(obj,name)

            request_proxy = functools.partial(get_data,'request')
            session_proxy = functools.partial(get_data,'session')

            request = request_proxy()
            print(request)

            session = session_proxy()
            print(session)
結果:
"xxxxx"
"iusdkfjlskdf"
相關文章
相關標籤/搜索