偏函式與部分應用函式

2021-06-26 10:16:50 字數 857 閱讀 4621

首先偏函式是個數學概念, 偏函式不是"函式"的一種, 而是乙個跟函式平行的概念. 定義可參考wiki  , 它是指定義域x中可能存在某些值在值域y中沒有對應的值.

scala可以通過模式匹配來定義偏函式, 下面這兩種方式定義的函式, 都可以認為是偏函式, 因為他們都只對其定義域int的部分值做了處理. 那麼像p1哪有定義成partialfunction的額外好處是, 你可以在呼叫前使用乙個isdefinedat方法, 來校驗引數是否會得到處理.  或者在呼叫時使用乙個orelse方法, 該方法接受另乙個偏函式,用來定義當引數未被偏函式捕獲時該怎麼做. 也就是能夠進行顯示的宣告. 在實際**中最好使用partialfunction來宣告你確實是要定義乙個偏函式, 而不是漏掉了什麼.

def p1:partialfunction[int, int] =

def p2 = (x:int) =>x match

而部分應用函式, 是指乙個函式有n個引數, 而我們為其提供少於n個引數, 那就得到了乙個部分應用函式. 

比如我先定義乙個函式

def sum(a:int,b:int,c:int) = a + b + c;
那麼就可以從這個函式衍生出乙個偏函式是這樣的:

def p_sum = sum(1, _:int, _:int)
於是就可以這樣呼叫p_sum(2,3), 相當於呼叫sum(1,2,3) 得到的結果是6. 這裡的兩個_分別對應函式sum對應位置的引數. 所以你也可以定義成

def p_sum = sum (_:int, 1, _:int)
這東西有啥用呢? 乙個是當你在**中需要多次呼叫乙個函式, 而其中的某個引數又總是一樣的時候, 使用這個可以使你少敲一些**. 另乙個呢? 

scala 部分應用函式與偏函式

部分應用函式 是指乙個函式有n個引數,而我們為其提供少於n個引數,那就得到了乙個部分應用函式.def sum a int,b int,c int a b c 那麼就可以從這個函式衍生出乙個偏函式是這樣的 def p sum sum 1,int,int 於是就可以這樣呼叫p sum 2,3 相當於呼叫...

Scala部分函式 偏函式

例如 def sum x int,y int,z int x y z,當呼叫sum的時候,如果不提供所有的引數,或者只提供某些引數時,比如sum sum 3,int,int sum int,3,4 這樣就生成了所謂的部分應用函式。案例 def showmsg title string content...

GUI tkinter與偏函式的應用

版本 python3.6 模組 functools,tkinter 在python3.6中,模組名稱是tkinter而不是tkinter,tkmessagebox也由單獨的模組整合進了tkinter.messagebox。借助偏函式鎖定引數的功能可以按類 批量 設定tkinter中的控制項,使語句更...