1. 程式人生 > 程式設計 >詳解python內建常用高階函式(列出了5個常用的)

詳解python內建常用高階函式(列出了5個常用的)

高階函式是在Python中一個非常有用的功能函式,所謂高階函式就是一個函式可以用來接收另一個函式作為引數,這樣的函式叫做高階函式。

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,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,5,7,12]))
# Out:3360 # 2*4*5*7*12
# reduce()還可以接收第3個可選引數,作為計算的初始值。如果把初始值設為100
print(reduce(prod,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,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,3,1,4]))
# Out:[1,5]
print(sorted({1:'D',2:'B',3:'B',4:'E',5: 'A'}))
# Out:[1,5]

利用key進行倒序排序

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

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

example_list = [5,4]
print(sorted(example_list,reverse=True))
# Out:[7,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,4])
print(f())
# Out:24

5.1、為什麼定義lazy_prod()函式和返回函式cal_prod()?

python支援返回函式的基本語法

def f():
 print('call f()...')
 # 定義函式g:
 def g():
  print('call g()...')
 # 返回函式g:
 return g

只返回函式的作用:

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

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

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

f = calc_sum([1,4])
print(f) # 程式碼並沒有對函式進行執行計算出結果,而是返回函式,所以打印出來的是型別
#Out: <function calc_sum.<locals>.lazy_sum at 0x000001FF43462E18>
print(f())  # 對返回的函式進行呼叫時,才計算出結果
# Out:10

總結

以上所述是小編給大家介紹的python內建常用高階函式(列出了5個常用的),希望對大家有所幫助,也非常感謝大家對我們網站的支援!