原文使用的是python2,現修改為python3,全部都實際輸出過,可以運行。 引用自:http://www.cnblogs.com/duyaya/p/8562898.html https://blog.csdn.net/cv_you/article/details/70880405 python ...
原文使用的是python2,現修改為python3,全部都實際輸出過,可以運行。
引用自:http://www.cnblogs.com/duyaya/p/8562898.html
https://blog.csdn.net/cv_you/article/details/70880405
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]View Code
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:'D', 2:'B', 3:'B', 4:'E', 5: 'A'})) # 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) # 返回函數調用的結果,返回值是一個數值View Code
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:24View Code
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,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