高階函式1.實參是乙個函式名
2.函式的返回值是乙個函式
#函式本身也可以賦值給變數,變數也可以指向函式
f =abs
print
(f(-10)
)#傳遞的引數包括函式名
deffun
(x,y,f)
:return f(x)
,f(y)
print
(fun(-10
,23,abs
)
map()函式接收兩個引數,乙個是函式,乙個是序列
map將傳入的函式依次作用到序列的每個元素,並把結果作為新的序列返回
import random
#對於序列[-1,3,-5,-4]的每個元素求絕對值
# print(list(map(abs,[-1,3,-5,-4])))
#對於序列的每個元素求階乘(10個元素,都在2~7之間的隨機數)
deffactoric
(x):
res =
1for i in
range(1
,x+1):
res *= i
return res
li =
[random.randint(2,
7)for i in
range(10
)]print
(li)
print
(list
(map
(factoric,li)
))
map函式的練習:
#使用者接收一串數字,『1 3 5 7 8』,將字串中所有的數字轉化為整型
#並且以列表的格式輸出
s ='1 3 5 7 8'
# print(s.split())
print
(list
(map
(int
,s.split())
))
reduce:把乙個函式作用在乙個序列上,這個函式必須接收兩個引數
reduce把結果繼續和序列的下乙個元素做累積計算
如:reduce(f,[x1,x2,x3,x4,x5] = f(f(f(x1,x2),x3),x4)
from functools import
reduce
defmulti
(x,y)
:return x * y
print
(reduce
(multi,
range(1
,5))
)def
add(x,y)
:return x + y
print
(reduce
(add,[1
,2,3
,4,5
]))
filter過濾函式
和map()類似,也接收乙個函式和乙個序列
但fileter()把傳入的函式依次作用於每個元素,然後根據返回值
是true漢時false來決定保留還是丟棄該元素
#100以內的偶數
defisodd
(num)
:if num %2==
0:return
true
else
:return
false
print
(list
(filter
(isodd,
range
(100))
))
li =[2
,1,3
,4]li.sort(reverse=
true
)print
(li)
a =sorted
(li,reverse=
true
)print
(a)
sorted函式:練習1:
"""
# (2018-攜程-春招題)題目需求:
給定乙個整型陣列, 將陣列中所有的0移動到末尾, 非0項保持不變;
在原始陣列上進行移動操作, 勿建立新的陣列;
# 輸入:
第一行是陣列長度, 後續每一行是陣列的一條記錄;40
70
2# 輸出:
調整後陣列的內容;47
20
0"""
n =''.join(
input()
.split(
' ')
) li=
[int
(i)for i in n]
defmove_zeros
(item)
:if item ==0:
return
2else
:return
1print
(sorted
(li,key=move_zeros)
)
sorted函式:練習2:
info =
#按照商品數量進行排序
defsorted_by_count
(x):
return x[1]
#按照商品**進行排序
defsorted_by_price
(x):
return x[2]
#先按照商品數量由小到大排序,如果商品數量一樣
#則按照商品**由小到大排序
defsorted_by_count_price
(x):
return x[1]
,x[2
]print
(sorted
(info,key=sorted_by_count)
)print
(sorted
(info,key=sorted_by_price)
)print
(sorted
(info,key=sorted_by_count_price)
)
from functools import
reduce
""" 匿名函式的關鍵字為lambda : 冒號前面是形參,冒號後面是返回值
"""deffun
(*args,
**kwargs)
:return args,kwargs
print
(fun([1
,2,3
,4,5
]))print
(lambda
*args,
**kwargs:
(args,kwargs)
)def
add(x,y)
:return x + y
add(1,
2)print
(reduce
(lambda x, y: x + y,[1
,2,3
,4,5
]))def
mypow
(x):
return x **
2print
(list
(map
(lambda x:x**2,
range(5
))))
#找出1——100之間的偶數
print
(list
(filter
(lambda x:x%2==
0,range
(100))
))# nums =[0
,7,0
,1,2
,1,5
,1,7
,8,0
,67,1
,3,4
]print
(sorted
(nums,key=
lambda x:
1if x ==
0else0)
)**公司內推碼的產生:**
import random
import string
code_str = string.ascii_letters + string.digits
# print(code_str)
defgen_code
(len=4
):return
''.join(random.sample(code_str,
len)
)print
([gen_code(
len=6)
for i in
range
(1000)]
)print
(random.sample(code_str,2)
)
Python 函式式程式設計 高階函式
functional programming,函式式程式設計。python對函式式程式設計提供部分支援。對於純函式程式設計,對任一函式,只要輸入是確定的,輸出就是確定的,可稱之為無 我們知道函式的計算結果可以賦值給變數,例如x abs 5 同理,變數也可以指向函式,例如f abs。如果乙個變數指向了...
python函式式程式設計 高階函式 偏函式
三大特性 immutable data不可變資料 first class functions函式像變數一樣使用 尾遞迴優化 每次遞迴都重用stack 好處 parallelization並行 lazy evaluation惰性求值 determinism 確定性 函式式程式設計 map reduce...
Python 函式式程式設計 01 高階函式
函式式程式設計是一種抽象程式很高的程式設計正規化,純粹的函式式程式語言編寫的函式沒有變數,因此,任意乙個函式,只要輸入是確定的,輸出就是確定的,這種純函式稱之為沒有 而允許使用變數的程式語言,由於函式內部的變數狀態不確定,同樣的輸入,可能得到的輸出不同,因此,這種函式是有 的。2.1 特性 1 變數...