python—高階函數

什么是內置高階函數
一個函數可以作為參數傳給另外一個函數,或者一個函數的返回值為另外一個函數(若返回值為該函數本身,則為遞歸),滿足其一則為高階函數。
Python中內置了幾個常用的高階函數,比如map( )函數、reduce( )函數、filter( )函數和sorted( )函數。
abs函數:
abs() 函數返回數字的絕對值。

>>> a = -1
>>> print(abs(a))
1
>>> print(abs(-15))
15
>>> f = abs
>>> print(f(-10))
10

函數本身也可以賦值給變量,變量可以指向函數:

def double(x):return 2*x    # 定義一個函數,
f = double   # 將函數賦值給變量
print(f(2))    # 通過變量可以調用函數

map函數
map()函數接收的是兩個參數,一個函數,一個序列(列表),其功能是將傳入的函數依次作用到序列的每個元素,并且把結果作為新的序列返回。
1 . 對于一個序列[-1,3,-4,-5]的每一個元素求絕對值

li1 = [-1,3,-4,-5]
li2 = map(abs,li1)   # 將abs 函數依次作用于序列了li1中的每一個元素,并將處理后的結果返回序列
print(list(li2))運行結果:
[1,3,4,5]

2 . 對于每個元素求階乘

import random
def factoria(x):res = 1for i in range(1,x+1):res = res  * ireturn res
li = [random.randint(2,7) for i in range(10)]
print(list(map(factoria,li)))

reduce函數
reduce():把一個函數作用在一個序列上,這個函數必須接收兩個參數
reduce把結果繼續和序列的下一個元素做累積計算
reduce(f,[x1,x2,x3,x4]) = f(f(f(x1,x2),x3),x4)

python2中:reduce是內置函數
python3中 from functools import reduce

from functools import reduce
#import functools
#functools.reduce()
def multi(x,y):return x*y
print(reduce(multi,range(1,5)))def add(x,y):return x+y
print(reduce(add,range(1,6)))運行結果:
24
15

filter函數

filter過濾函數
和map()類似的,也接收一個函數和一個序列
但是和map()不同的是,filter()把傳入的函數依次作用于
每個元素,然后根據返回值是True或者False決定保留還是丟棄該元素

def isodd(num):if num % 2  == 0:return Trueelse:return Falseprint(list(filter(isodd,range(100))))運行結果:
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 
32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60,
62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 
92, 94, 96, 98]

lambda匿名函數
lambda()匿名函數是指一類無需定義標識符(函數名)的函數或子程序。
lambda 函數可以接收任意多個參數 (包括可選參數) 并且返回單個表達式的值。
匿名函數的關鍵字為 lambda。
冒號前面是形參,冒號后面是返回值。

示例:分別打印元素的累加、平方、范圍內的所有偶數

from functools import reduce
# def add(x,y):
#     return  x+y
# print(reduce(add,range(10)))
print(reduce(lambda x,y:x+y,range(10)))
# def mypow(x):
#     return x**2
print(list(map(lambda x:x**2,range(5))))
# def isood(num):
#     return num%2 ==0
print(list(filter(lambda x:x%2==0,range(100))))運行結果:
45
[0, 1, 4, 9, 16]
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 
32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 
62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 
92, 94, 96, 98]

sorted( )函數
sorted( )函數是用來對可迭代對象排序的,與列表的list( )函數不同,后者是在原位置上進行排序的,排序后原列表的元素順序會發生改變,而前者是將排序后的結構生成到一個新的列表中。

a = [1,3,8,4,9,2,6]
a.sort()
print(a)
b = [9,3,6,8,2,7,4]
c = sorted(b)
print(b)
print(c)運行結果:
[1, 2, 3, 4, 6, 8, 9]        a的原列表元素順序發生改變
[9, 3, 6, 8, 2, 7, 4]        b 列表順序沒有改變
[2, 3, 4, 6, 7, 8, 9]        新生成的列表中存放排序之后的元素

練習:
1 . 將一個字符串轉換成整型 ‘332.31321’

from functools import reducedef str2int(s):def char2int(ch):c = {str(x): x for x in range(10)}return c[ch]def fun(n1, n2):return n1 * 10 + n2return reduce(fun, map(char2int, s))num = str2int('12345')
print(type(num), num)運行結果:
<class 'int'> 12345

2.利用map()函數,把用戶輸入的不規范的英文名字,變為首字母大寫,其他小寫的規范名字

def zz(x):return x.capitalize()
name = input('請輸入英文名字:')
print(list(map(zz, name.split())))運行結果:
請輸入英文名字:faker
['Faker']

3.利用map和reduce編寫一個str2float函數,把字符串’123.456’轉換成浮點數123.456

from functools import reduce
def str2float(s):s1 = s.split('.')[0]s2 = s.split('.')[1][::-1]c2n = {str(i):i for i in range(1,10)}def number(x):return c2n[x]def before_c2n(x,y):return x*10+ydef after_c2n(x,y):return x*0.1+yreturn reduce(before_c2n,map(number,s1)) + 0.1*reduce(after_c2n,(map(number,s2)))
print(str2float('345.678'))運行結果:
345.678

4.回數是指從左向右讀和從右向左讀都是一樣的數,例如12321,909。請利用filter()篩選出回數

def huishu(s):s = str(s)return s == s[::-1]
li = [123,23432,121,4567,12421]
print(list(filter(huishu,li)))運行結果:
[23432, 121, 12421]

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/542094.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/542094.shtml
英文地址,請注明出處:http://en.pswp.cn/news/542094.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

功能區不顯示工具條_【新老客戶必知】軟件支持超高清屏顯示器了

隨著計算機硬件的不斷更新換代顯示設備的不斷更新從原來的分辨率640 X 480啥原來分辨這么低呀&#xff1f;還記得DOS嗎&#xff1f;或者Win95,win98嗎當時顯示器分辨率能調到800X 600很好了2000年左右隨著純平顯示器的推出也有了高清顯示器的概念那么一般我們說的高清顯示器分辨…

nginx1.10.2源碼安裝配置參數參考

[rootlocalhost nginx-1.10.2]# ./configure --help--help print this message--prefixPATH set installation prefix #Nginx安裝的根路徑,默認為 /usr/local/nginx。--sbin-pathPATH set nginx binary pathname #指定nginx二進制文件的路徑,默認為PATH/sbin/n…

c ++查找字符串_C ++朋友功能| 查找輸出程序| 套裝1

c 查找字符串Program 1: 程序1&#xff1a; #include <iostream>using namespace std;class Sample {int A, B;friend void fun();};void fun(){Sample S;S.A 10;S.B 20;cout << S.A << " " << S.B << endl;}int main(){fun();retu…

Spring定時器的運用

為什么80%的碼農都做不了架構師&#xff1f;>>> 一、spring4定時器任務配置如下&#xff1a; <bean id"jsapiTask" class"chan.ye.dai.wexin.JsapiTicketTimeTask" /><bean id"jobDetail"class"org.springframework.s…

python—裝飾器

裝飾器概念&#xff1a; 把一個函數當作參數傳遞給一個函數&#xff0c;返回一個替代版的函數 本質上就是一個返回函數的函數 在不改變原函數的基礎上&#xff0c;給函數增加功能 python 中裝飾器做的事情&#xff01;它們封裝一個函數&#xff0c;并且用這樣或者那樣的方式來修…

ad18原理圖器件批量修改_Altium Designer 15原理圖設計基礎

Altium Designer 15成為越來越多電子設計開發工程師EDA電路設計軟件的首選&#xff0c;在學校學習Altium Designer的也越來較多&#xff0c;像單片機開發學習一樣&#xff0c;EDA設計只要學會了&#xff0c;再學其他的設計軟件就容易多了。上一節分享了《Altium Designer 15集成…

c++freopen函數_使用示例的C語言中的freopen()函數

cfreopen函數C語言中的freopen()函數 (freopen() function in C) Prototype: 原型&#xff1a; FILE* freopen(const char *str, const char *mode, FILE *stream);Parameters: 參數&#xff1a; const char *str, const char *mode, FILE *streamReturn type: FILE* 返回類型…

python—文件

1 . 文件的基本操作&#xff1a; 文件讀取三部曲&#xff1a; 打開操作關閉&#xff08;如果不關閉會占用文件描述符&#xff09; 打開文件&#xff1a; f open(/tmp/passwdd,w)操作文件&#xff1a; 1 . 讀操作&#xff1a; f.read()content f.read()print(content) 2 …

基本概念學習(7000)--P2P對等網絡

對等網絡&#xff0c;即對等計算機網絡&#xff0c;是一種在對等者&#xff08;Peer&#xff09;之間分配任務和工作負載的分布式應用架構[1] &#xff0c;是對等計算模型在應用層形成的一種組網或網絡形式。“Peer”在英語里有“對等者、伙伴、對端”的意義。因此&#xff0c;…

c語言for循環++_C ++程序使用循環查找數字的冪

c語言for循環Here, we are going to calculate the value of Nth power of a number without using pow function. 在這里&#xff0c;我們將不使用pow函數來計算數字的N 次冪的值 。 The idea is using loop. We will be multiplying a number (initially with value 1) by t…

廈門one_理想ONE真是“500萬內最好的車”?

提起羅永浩&#xff0c;不少人還停留在“砸冰箱、造手機”等早期事件。隨著網絡直播的興起&#xff0c;羅永浩轉戰直播帶貨行業&#xff0c;但老羅畢竟是老羅&#xff0c;雷人語錄一點沒比以前少。前一段時間&#xff0c;羅永浩在微博中稱&#xff1a;“理想ONE是你能在這個價位…

Data Collection

眾所周知&#xff0c;計算機領域論文是要以實驗為基礎的&#xff0c;而實驗的原料就是數據。不管是在圖像&#xff0c;文字或者語音領域&#xff0c;開源的數據都十分寶貴和重要。這里主要收集各領域的一些常用的公開數據集。 計算機視覺&#xff1a; 【ImageNet】 【Caltech P…

python—os模塊、時間模塊

os模塊 作用&#xff1a;os模塊是python標準庫中的一個用于訪問操作系統功能的模塊&#xff0c; os模塊提供了其他操作系統接口&#xff0c;可以實現跨平臺訪問。 使用&#xff1a; 1 . 返回操作系統類型 &#xff1a;os.name 值為&#xff1a;posix 是linux操作系統 值為&…

kotlin鍵值對數組_Kotlin程序檢查數組是否包含給定值

kotlin鍵值對數組Given an array and an element, we have to check whether array contains the given element or not. 給定一個數組和一個元素&#xff0c;我們必須檢查數組是否包含給定的元素。 Example: 例&#xff1a; Input:arr [34, 56, 7, 8, 21, 0, -6]element to…

enter sleep mode黑屏怎么解決_【linux】 不要再暴力關機了,講講我最近遇到的問題和完美解決方案...

歡迎關注我的個人公眾號&#xff1a;AI蝸牛車前言結束了每天的緊張的工作&#xff0c;這兩天真的有些肝。這兩天打打字&#xff0c;突然感覺手指頭疼起來了&#xff0c;想意識到成天打了十多個小時的鍵盤&#xff0c; 手指頭都疲勞了 之后這兩天基本上除了基本的吃睡&#xff…

重復T次的LIS的dp Codeforces Round #323 (Div. 2) D

http://codeforces.com/contest/583/problem/D 原題&#xff1a;You are given an array of positive integers a1,?a2,?...,?an??T of length n??T. We know that for any i?>?n it is true that ai??ai?-?n. Find the length of the longest non-decreasing …

微擎pc 導入前綴_段覆蓋前綴| 8086微處理器

微擎pc 導入前綴As we already know that the effective address is calculated by appending the segment registers value and adding up the value of the respective offset. But what if we want to choose some other offset than the assigned one. 眾所周知&#xff0…

python—面向對象

面向過程 面向對象&#xff1a; 面向過程&#xff1a;—側重于怎么做&#xff1f; 1.把完成某一個需求的 所有步驟 從頭到尾 逐步實現 2.根據開發要求&#xff0c;將某些功能獨立的代碼封裝成一個又一個函數 3.最后完成的代碼&#xff0c;就是順序的調用不同的函數 特點&#…

5中bug vue_蘋果官網出BUG!這些都只要一兩百元

近日&#xff0c;有網友在網上反饋稱&#xff0c;他發現蘋果官網商城出現了BUG&#xff01;眾多上千元的產品&#xff0c;BUG價只需一兩百元。比如Shure MOTIV MV88 Digital立體聲電容式麥克風配件。正常售價1288元&#xff0c;而BUG后的價格是235元。UBTECH Jimu Astrobot Cos…

常用壓縮,解壓與打包

常用壓縮格式&#xff1a; .zip .zg .bz2 .tar.gz .tar.bz2.zip格式壓縮zip 壓縮文件名 源文件#壓縮文件注&#xff1a;壓縮文件名寫.zip后綴是為了標記該文件的壓縮類型&#xff0c;方便管理。注&#xff1a;在壓縮時有壓縮格式轉換&#xff0c;所以當源文件很小時&#xff0c…