python-內置常用高階函數


 

一、函數式編程

  • 函數本身可以賦值給變量,賦值后變量為函數;
  • 允許將函數本身作為參數傳入另一個函數;
  • 允許返回一個函數。

1、map()是 Python 內置的高階函數,它接收一個函數 f 和一個 list,並通過把函數 f 依次作用在 list 的每個元素上,得到一個新的 list 並返回

def add(x):
    return x+x

print map(add,[1,2,3])

 

 

2、reduce()函數也是Python內置的一個高階函數。reduce()函數接收的參數和 map()類似,一個函數 f,一個list,但行為和 map()不同,reduce()傳入的函數 f 必須接收兩個參數,reduce()對list的每個元素反復調用函數f,並返回最終結果值。

1 def prod(x, y):
2     return x*y
3 
4 print reduce(prod, [2, 4, 5, 7, 12])

reduce()還可以接收第3個可選參數,作為計算的初始值。如果把初始值設為100,計算:

reduce(f, [1, 3, 5, 7, 9], 100)

結果將變為125,因為第一輪計算是:

計算初始值和第一個元素:f(100, 1),結果為101。

 

3、filter()函數是 Python 內置的另一個有用的高階函數,filter()函數接收一個函數 f 和一個list,這個函數 f 的作用是對每個元素進行判斷,返回 True或 False,filter()根據判斷結果自動過濾掉不符合條件的元素,返回由符合條件元素組成的新list。

import math

def is_sqr(x):
    return math.sqrt(x)==int(math.sqrt(x))

print filter(is_sqr, range(1, 101))

 

4、 sorted()也是一個高階函數,它可以接收一個比較函數來實現自定義排序,比較函數的定義是,傳入兩個待比較的元素 x, y,如果 x 應該排在 y 的前面,返回 -1,如果 x 應該排在 y 的后面,返回 1。如果 x 和 y 相等,返回 0。

def reversed_cmp(x, y):
    if x > y:
        return -1
    if x < y:
        return 1
    return 0

sorted([36, 5, 12, 9, 21], reversed_cmp)

sorted()也可以對字符串進行排序,字符串默認按照ASCII大小來比較。

def cmp_ignore_case(s1, s2):
    s1=s1.lower()
    s2=s2.lower()
    if s1>s2:
        return 1
    if s1<s2:
        return -1
    return 0

print sorted(['bob', 'about', 'Zoo', 'Credit'], cmp_ignore_case)

 5、Python的函數不但可以返回int、str、list、dict等數據類型,還可以返回函數!

請注意區分返回函數和返回值:

def myabs():
    return abs   # 返回函數,返回函數可以把一些計算延遲。
def myabs2(x):
    return abs(x)   # 返回函數調用的結果,返回值是一個數值
def calc_prod(lst):
    def lazy_prod():
        prod=1
        for i in lst:
            prod=prod*i
        return prod
    return lazy_prod
f = calc_prod([1, 2, 3, 4])
print f()

 



 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM