Python函式式程式設計 高階函式

2021-09-16 12:26:14 字數 4474 閱讀 1144

高階函式

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 變數...