初學 Python(十二)——高階函式

Coffee_zq發表於2016-11-13

初學 Python(十二)——高階函式

 

  初學 Python,主要整理一些學習到的知識點,這次是高階函式。

#-*- coding:utf-8 -*-  
  
  
''''' 
話說高階函式: 
能用函式作為引數的函式 
稱為高階函式 
'''  
#函式作參  
def f(x):  
    return x*x  
  
#map函式為內建函式,意思為將第二個引數的list作用到f函式中  
#最後的結果為一個list  
print map(f,[1,2,3,4,5])  
#reduce函式為內建函式,意思將第二引數的序列作用到add函式值  
#將結果做累加計算,最後的結果為一個數  
def add(x,y):  
    return x+y  
print reduce(add,[1,2,3,4,5,6])  
#給出一個整數的每個位置上的數,得到該整數  
  
def fn(x,y):  
    return x*10+y  
print reduce(fn,[1,2,3,4,5])  
  
#字串轉int  
  
print reduce(fn,map(int,'12345'))  
  
def str2int(s):  
    def fn(x,y):  
        return x*10+y  
    return reduce(fn,map(int,s))  
  
  
print str2int('123456')  
''''' 
上面函式的呼叫步驟是: 
1.得到reduce(fn,map(int,'123456')) 
2.得到reduce(fn,[1,2,3,4,5,6]) 
3.得到reduce(x*10+y,[1,2,3,4,5,6]) 
4.得到123456 
'''  
def str2int2(s):  
    return reduce(lambda x,y:x*10+y,map(int,s))  
print str2int2('1234567')  
  
  
#排序  
print sorted('313568')  
print sorted((1,8,4,2,5))  
print sorted([9,8,7,6,5,4,3])  
print sorted(['name','Age','Sex','address'])  
#sorted也是一個高階函式,所以它也可以傳函式來改變排序的演算法  
#倒序  
def inverted_order(x,y):  
    if x>y:  
        return -1  
    elif x<y:  
        return 1  
    else:  
        return 0  
print sorted((1,8,4,2,5),inverted_order)  
  
#改變字串排序演算法  
#上面字串排序是根據ascii碼來判斷大小  
#由於大寫字母都比小寫字母的ascii碼小,  
#但是一般我們都是按照字母表的順序排列  
#下面來變換一下演算法,忽略大小寫  
  
def alphabet(s1,s2):  
    l1 = s1.lower()  
    l2 = s2.lower()  
    if l1 < l2:  
        return -1  
    elif l2 < l1:  
        return 1  
    else:  
        return 0  
  
print sorted(['name','Age','Sex','address'],alphabet)  
  
''''' 
函式作為返回值 
其實剛才在將字串轉int時就涉及到了 
這種將函式作為返回值的形式 
'''  
  
def sum(*args):  
    sum = 0  
    for n in args:  
        sum+=n  
    return sum  
print sum(1,2,3,4,5)  
  
#改裝成返回函式的形式  
  
def sum_pack(*args):  
    def sum():  
        sum1 = 0  
        for n in args:  
            sum1+=n  
        return sum1  
    return sum  
  
g = sum_pack(1,2,3,4,5)  
print g  
#<function sum at 0x0134C0F0>  
#g輸出為函式,想列印結果要呼叫函式  
print g()  
  
  
''''' 
閉包的定義: 
字函式自動獲取父函式的變數和引數 
進入我的地盤就是我的 
而且每一次呼叫返回的函式 
都不是同一個物件 
'''  
  
g1 = sum_pack(1,2,3,4,5)  
g2 = sum_pack(1,2,3,4,5)  
print g1==g2

 

相關文章