pythonreduce函數
Ⅰ python高階函數有哪些
1、map
map()函數接受兩個參數,一個是函數,灶枝一個是Iterable,map將傳入的函數依次作用到序列的每一個元素上,並把結果作為新的Iterator返回。
舉例,比如我們有一個函數f(x)=x*2,要把這個函數作用在一個list[1, 2, 3, 4, 5, 6, 7, 8,
9]上,就可以用map()實現。
>>> def f(x):
... return x*2
...
>>> r = map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> list(r)
[2, 4, 6, 8, 10, 12, 14, 16, 18]
所以,map()作為高階函數,事實上它把運算規則抽象了,因此,我們不但可以計算簡單的f(x)=x*2,還可以計算任意復雜的函數,比如把這個list所有的數字轉為字元串:
>>> list(map(str,[1, 2, 3, 4, 5, 6, 7, 8, 9]))
["1", "2", "3", "4", "5", "6", "7", "8", "9"]
2、rece
rece是把一個函數作用在一個序列[x1, x2,
x3……]上,這個函數必須接收兩個參數,rece把結果繼續和序列的下一個元素做累計計算。簡單來說,就是先計算x1和x2的結果,再拿結果與x3計算,依次類推。比如說一個序列求和,就可以氏毀用rece實現。
>>> from functools import rece
>>> def add(x, y):
... return x + y
...
>>> rece(add, [1, 3, 5, 7, 9])
25
也就是說,假設python沒有提供int()函數,你完全可以自己寫一個把字元串轉化為整數的函數,而且只需要幾行代碼。
3、filter
用於過濾序列,和map函數類似,filter也接收一個函數和一個序列,不同於map的是,filter把傳入的函數依次作用於每一個元素,然後根據返回值是True還是False決定保留還是丟棄該元素,例如,在一個list中,刪隱核敏掉偶數,只保留奇數,可以這么寫:
def is_odd(n):
return n % 2 == 1
list(filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15]))
# 結果: [1, 5, 9, 15]
把一個序列中的空字元串刪掉,可以這么寫:
def not_empty(s):
return s and s.strip()
list(filter(not_empty, ["A", "", "B", None, "C", " "]))
# 結果: ["A", "B", "C"]
可見用filter()這個高階函數,關鍵在於正確實現一個篩選函數。
4、sorted
無論冒泡排序還是快速排序,排序的核心是比較兩個元素的大小。如果是數字,我們可以直接比較,但如果是字元串或者兩個dict呢?直接比較數學上的大小是沒有意義的,因此,比較的過程必須通過函數抽象出來,Python內置的sorted()函數就可以對list進行排序:
>>> sorted([36, 5, -12, 9, -21])
[-21, -12, 5, 9, 36]
此外,sorted()函數也是一個高階函數,它還可以接收一個key函數來實現自定義的排序,例如按絕對值大小排序:
>>> sorted([36, 5, -12, 9, -21], key=abs)
[5, 9, -12, -21, 36]
Ⅱ python 高階函數有哪些
1、高階函數
變數可以指向函數,函數的參數可以接收變數,那麼函數可以接收另一個函數作為參數,這種函數稱為高階函數。
(1)把函數作為實參
(2)把函數作為返回值
2、系統的內置高階函數
(1)map函數:接收兩個參數,一個是函數,一個是序列,map將傳入的函數依次作用到序列的每個元素,並且把結果作為新的列表返回
(2)rece函數:把一個函數作用到一個序列上,這個函數必須接收兩個參數,rece把結果和序列的下一個元素做累積計算
(3)filter函數:也接收一個函數和一個序列,和map函數不同的是,filter函數把傳入的函數依次作用於每個元素,然後返回返回值是True的元素
(4)sorted函數:排序函數
把用戶名按照首字母不區分大小寫排序
(5)sorted()函數按照關鍵字排序
關鍵字:商品個數
(6)sorted()函數按照關鍵字排序,用鍵值來查找
(7)lambda匿名函數:有時候傳參數時不需要顯示自定義的函數,直接傳入匿名函數更方便;冒號前面的x,y表示函數參數,匿名函數不需要擔心函數名的沖突,匿名函數也是一個函數對象,可以把匿名函數賦值給一個變數,再利用變數來調用函數,匿名函數也可以作為返回值返回
3、高階函數的應用:
(1)sorted函數:
(2)sorted函數默認是從小到大排序
4、裝飾器
裝飾器就是用來裝飾函數的:想要增加原有函數的功能,但是不希望修改原有函數的定義,在代碼運行期間動態增加功能的方式
(1)此裝飾器的功能:計算函數的運行時間
import functools
@functools.wraps(f) ##保留原有函數的屬性
運行結果:
(2)此裝飾器的功能:用戶登錄認證
運行結果:
(3)此裝飾器的功能:認證用戶的同時,顯示用戶的轉賬金額
import inspect
inspect.getcallargs()將傳的參數封裝為一個字典,字典的key值是形式參數,value值是實參
(4)此裝飾器的功能:確保收到的每個參數都是整數,是整數就求和,否則拋出錯誤
(5)此裝飾器的功能:給裝飾器傳參數,是整數和浮點數就求和
python學習網,大量的免費python視頻教程,歡迎在線學習!
Ⅲ Python統計1到100之和,輸出結果
#方法1
print(5050)
#方法2
print(50*101)
#方法3
print(sum(range(1,101)))
#方法4
s=0
for i in range(1,101):s+=i
print(s)
Ⅳ python三個重要的內置函數(map, filter,rece)-
map函數第一個參數是一個函數function,第二個參數是一個可迭代的對象iterable,他的功能是將可迭代對象iterable裡面的每一項都應用到函數function中,然後返回一個迭代器。
可迭代器裡面有多少個元素則結果就包含多少個元素
filter() 函數用於過濾序列,過濾掉不符合條件的元素,返回由符合條件元素組成的新列表。
該接收兩個參數,第一個為函數,第二個為序列,序列的每個元素作為參數傳遞給函數進行判斷,然後返回 True 或 False,最後將返回 True 的元素放到新列表中。
rece() 函數會對參數序列中元素進行累積。
函數將一個數據集合(鏈表,元組等)中的所有數據進行下列操作:用傳給 rece 中的函數 function(有兩個參數)先對集合中的第 1、2 個元素進行操作,得到的結果再與第三個數據用 function 函數運算,最後得到一個結果。
Ⅳ python:如何將列表中的所有項相乘
#-*-coding:utf-8-*-
#py3
'''
用高級函數rece()
'''
fromfunctoolsimportrece
lis=[1,2,3,4,5]
r=rece(lambdax,y:x*y,lis)#對序列lis中元素逐項相乘lambda用法請自行度娘
print(r)
fromfunctoolsimportrece
defadd(x,y):
returnx+y
rece(add,[1,2,3])
#結果是6