目錄
高階函數
map( )函數
reduce( )函數
?【練習】字符串轉為整數的函數實現
python的reduce的用法,filter( )函數
?【應用】產生素數的函數實現
sorted( )函數
補充筆記
高階函數
Higher-order function,即高階函數。
map filter reduce。事實上,變量是可以指向函數的。>>>abs(-2)2>>>f?=?abs????????????????????????#f變量指向函數abs()>>>f(-2)2
而函數名也是變量。>>>abs?=?1>>>abs(-1)????????????????????????#TypeError:?'int'?object?is?not?callable,此時abs不再是函數,而是整數1注:由于abs函數實際上是定義在import builtins模塊中的,所以要讓修改abs變量的指向在其它模塊也生效,要用import builtins; builtins.abs = 10。
既然變量可以指向函數,那么函數也可以傳入函數和返回函數,這種函數就叫高階函數。
map( )函數
map( )是一種高階函數,它接收兩個參數,第一個是函數,第二個是Iterable,即可迭代對象。map( )將函數依次作用于Iterable的每個元素,并將結果以Iterator,迭代器的形式返回。這種方式類似構造出了數學中的映射過程。由于Iterator是惰性序列,可以用list( ) 將其轉化為list輸出。>>>list(map(str,[1,2,3,4,5,6]))??????????????????#str()可以將整數轉化為字符串['1',?'2',?'3',?'4',?'5',?'6']
我們還能用列表生成器得到同樣的結果,但要用到for語句:>>>b?=?[str(x)?for?x?in?[1,2,3,4,5,6]]
python predict函數、['1',?'2',?'3',?'4',?'5',?'6']
reduce( )函數
reduce( )函數同樣接收一個函數和一個Iterable兩個參數,不同的是所傳入的函數必須要接收兩個參數,而reduce是把函數作用的結果繼續與序列中下一個元素做累計計算。reduce(f,?[x1,?x2,?x3,?x4])?=?f(f(f(x1,?x2),?x3),?x4)
這個有什么用呢,舉個簡單的例子,可以把序列轉化為相應的整數顯示。>>>from?functools?import?reduce??????????????????#加入內置函數reduce>>>def?fn(x,?y):
...???return(x?*?10?+?y)
...>>>reduce(fn,?[1,?2,?3,?4,?5])12345
python中reduce()函數的用法,【練習】字符串轉為整數的函數實現from?functools?import?reduce
d={'0':?0,?'1':?1,?'2':?2,?'3':?3,?'4':?4,?'5':?5,?'6':?6,?'7':?7,?'8':?8,?'9':?9}def?str2int(s):
def?char2num(s):??????????????????????????#將字符串的每個字符轉化為對應的整數,并組成序列
return?d[s]????def?fn(x,?y):?????????????????????????????#將一個序列轉化為對應的整數
return?x?*?10?+?y
return?reduce(fn,map(char2num,s))
python reduce函數、輸出結果如下>>>str2int('0110234')110234
filter( )函數
filter,即過濾的意思,filter( )函數的作用是過濾序列。與上面兩個函數一樣,接收一個函數與一個序列,而在函數作用于序列的元素之后,根據返回值True或False來保留或移除該元素。如寫一個保留奇數的函數:>>>def?odd(n):
...????return?n?%?2?==?1...>>>list(filter(odd,[1,?2,?3,?4,?5,?6,?7,?8]))
[1,?3,?5,?7]
需要注意的是,filter( )函數返回的也是Iterator,惰性序列,需要用list( )來轉化才能直接顯示計算結果。
reduce python?【應用】產生素數的函數實現
(以下代碼轉自廖雪芳的官方網站)def?_odd_iter():?????????????????????????????#定義一個初始值為3,且不存在偶數的初始序列生成器
n?=?1
while?True:
n?=?n?+?2
yield?ndef?_not_divesible(n):???????????????????????#定義篩選函數,不是n的倍數則返回True
python filter函數、return?lambda?x?:?x?%?n?>?0def?primes():????????????????????????????????#定義一個初始值為2,
yield?2
it?=?_odd_iter()?????????????????????????#it為序列n的生成器,初始序列
while?True:
n?=?next(it)?????????????????????????#返回序列n的第一個值
yield?n
python mapreduce。it?=?filter(_not_divesible(n),?it)???#過濾序列中為n的倍數的值for?n?in?primes():???????????????????????????#for循環取值
if?n?<?100:??????????????????????????????#打印100以為的素數
print(n)????else:????????break
sorted( )函數
sort,分類、排序的意思。在Python總sorted( )函數可以將list排序。>>>sorted([5,?9,?-55,?90,?1])
[-55,?1,?5,?9,?90]
sort( )函數還能接收一個key函數來自定義排序,也就是先把傳入的函數作用于list,根據結果進行排序,把傳入的初始序列按照結果的順序進行排序。如接收一個abs( )函數>>>sorted([5,?9,?-55,?90,?1],?key?=?abs)
[1,?5,?9,?-55,?90]
還能加入第三個參數reverse=True,進行反向排序>>>sorted([5,?9,?-55,?90,?1],?key?=?abs,?reverse?=?True)
[90,?-55,?9,?5,?1]
補充筆記
補充幾個函數的用法,s.index('x')返回字符串中字符'x'的索引值;s.strip( )函數去除字符串首尾的空格或其他指定字符;s[::-1]把字符串s從尾到頭順序重新排列。
作者:三貝_
鏈接:https://www.jianshu.com/p/09d4284f33e1
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态