首頁  >  文章  >  後端開發  >  python中5個常用的內建高階函數的介紹(附程式碼)

python中5個常用的內建高階函數的介紹(附程式碼)

不言
不言轉載
2019-04-12 11:29:574024瀏覽

這篇文章帶給大家的內容是關於python中5個常用的內建高階函數的介紹(附程式碼),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

python內建常用高階函數:

一、函數式程式設計

函數本身可以賦值為變量,賦值後變數為函數;

允許將函數本身作為參數傳入另一個函數;

允許傳回一個函數。

1、map()函數

是Python 內建的高階函數,它接收一個函數f 和一個list,

並且透過把函數f 依序作用在list 的每個元素上,得到一個新的list 並回傳

def add(x):
    return x+x

print(map(add,[1, 2, 3]))
# Out:<map object at 0x00000239E833DE48>
print(list(map(add,[1, 2, 3])))
# Out:[2, 4, 6]

2、reduce()函數

reduce()函數也是Python內建的一個高階函數。

reduce()函數接收的參數和map()類似,一個函數f,一個list,但行為和map()不同,reduce()傳入的函數f必須接收兩個參數,

reduce()對list的每個元素重複呼叫函數f,並傳回最終結果值。

在Python3 中,reduce() 函數已經被從全域名字空間裡移除了,它現在被放置在functools 模組裡,如果想要使用它,

則需要透過引入functools 模組來呼叫reduce() 函數:

from functools import reduce


def prod(x, y):
    return x*y


print(reduce(prod, [2, 4, 5, 7, 12]))
# Out:3360  # 2*4*5*7*12
# reduce()还可以接收第3个可选参数,作为计算的初始值。如果把初始值设为100
print(reduce(prod, [2, 4, 5, 7, 12], 100))
# Out:336000    # 2*4*5*7*12*100

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(list(filter(is_sqr, range(1, 101))))
# Out:[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

4、

sorted() 函數

#對所有可迭代的物件進行排序運算。

sort 與 sorted 區別:

sort 是應用在 list 上的方法,sorted 可以對所有可迭代的物件進行排序操作。

list 的 sort 方法傳回的是對已經存在的清單進行操作,而內建函數 sorted 方法傳回的是一個新的 list,而不是在原來的基礎上進行的操作。

sorted(iterable, key=None, reverse=False)

iterable -- 可迭代物件。

key -- 主要是用來進行比較的元素,只有一個參數,具體的函數的參數就是取自於可迭代物件中,指定可迭代物件中的一個元素來進行排序。

reverse -- 排序規則,reverse = True 降序 , reverse = False 升序(預設)。

返回重新排序的清單

print(sorted([5, 2, 3, 1, 4]))
# Out:[1, 2, 3, 4, 5]
print(sorted({1:&#39;D&#39;, 2:&#39;B&#39;, 3:&#39;B&#39;, 4:&#39;E&#39;, 5: &#39;A&#39;}))
# Out:[1, 2, 3, 4, 5]


利用key進行倒序排序

example_list = [5, 0, 6, 1, 2, 7, 3, 4]
result_list = sorted(example_list, key=lambda x: x*-1)
print(result_list)

要進行反向排序,也可以透過傳入第三個參數reverse=True:

example_list = [5, 0, 6, 1, 2, 7, 3, 4]
print(sorted(example_list, reverse=True))
# Out:[7, 6, 5, 4, 3, 2, 1, 0]

5、Python的函數不但可以回傳int、str、list、dict等資料型別,還可以回傳函數!

請注意區分回傳函數與傳回值:

def my_abs():
    return abs  # 返回函数,返回函数可以把一些计算延迟

def my_abs2(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())
# Out:24

5.1、為什麼定義lazy_prod()函數與傳回函數cal_prod()?

python支援傳回函數的基本語法

def f():
    print(&#39;call f()...&#39;)
    # 定义函数g:
    def g():
        print(&#39;call g()...&#39;)
    # 返回函数g:
    return g

只回傳函數的作用:


回傳函數可以把一些計算延遲執行。例如,如果定義一個普通的求和函數:

def calc_sum(lst):
    return sum(lst)
print(calc_sum([1,2,3,4]))
# Out:10

def calc_sum(lst):
    def lazy_sum():
        return sum(lst)
    return lazy_sum

f = calc_sum([1, 2, 3, 4])
print(f)    # 代码并没有对函数进行执行计算出结果,而是返回函数,所以打印出来的是类型
#Out: <function calc_sum.<locals>.lazy_sum at 0x000001FF43462E18>
print(f())      # 对返回的函数进行调用时,才计算出结果
# Out:10

以上是python中5個常用的內建高階函數的介紹(附程式碼)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:segmentfault.com。如有侵權,請聯絡admin@php.cn刪除