1.高階函數:

特點:函數的形參位置必須接受一個函數對象

分類學習:

1).map(fn,lsd1,[lsd2...]):

參數一:fn --> 函數對象

參數二:lsd1 --> 序列對象(字符串、列表、range...)

功能:

將fn函數作用於lsd1中的每一個元素上,

將每次執行的結果存入到一個map對象中返回;

【注意】得到的這個map對象是一個迭代器對象

需求:lt = ['1','2','3','4','5'] --> [1,2,3,4,5]

map(int,lt):執行過程如下:

1).lt --> 取出第一個元素:'1'當做實際參數傳遞給int函數的形參位置 --> int('1')

將轉換以後的結果:1保留到map對象的第一個元素位置

2).lt --> 取出第二個元素:'2'當做實際參數傳遞給int函數的形參位置 --> int('2')

將轉換以後的結果:2保留到map對象的第二個元素位置

以此類推...

直到map函數執行完了,整個map對象才真正成型了...

import collections'''高階函數之:map(fn,lsd1,[lsd2,...])參數一:fn --> 函數對象參數二:lsd1 --> 序列對象(字符串、列表、range...)功能:將fn函數作用於lsd1中的每一個元素上,將每次執行的結果存入到一個map對象中返回;【注意】得到的這個map對象是一個迭代器對象'''#需求:lt = ['1','2','3','4','5'] --> [1,2,3,4,5]lt = ['1','2','3','4','5']#代碼實現一:使用老技術來實現lt1 = []for i in lt: num = int(i) lt1.append(num)#由於列表對象是非惰性序列,可以直接打印看到內容print(lt1)#代碼實現二:使用新技術解決#步驟一:定義一個函數 功能:將str數據 --> int數據def chr2Int(chr): # return {'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9}[chr] return int(chr)mo = map(chr2Int,lt)'''map類型的對象在打印過程中不能直接看到其中的元素值,所以map對象是一個惰性序列對象'''print(mo,type(mo))print(isinstance(mo,collections.Iterator))print(next(mo))'''將map對象(惰性的)轉換爲list對象(非惰性的)'''print(list(mo))#代碼實現三:終極版(一步到位)print(list(map(chr2Int,lt)))print(list(map(int,lt)))'''代碼:map(int,lt):執行過程如下:1).lt --> 取出第一個元素:'1'當做實際參數傳遞給int函數的形參位置 --> int('1') 將轉換以後的結果:1保留到map對象的第一個元素位置2).lt --> 取出第二個元素:'2'當做實際參數傳遞給int函數的形參位置 --> int('2') 將轉換以後的結果:2保留到map對象的第二個元素位置 以此類推...直到map函數執行完了,整個map對象才真正成型了... '''#需求1:lt = [1,2,3,4,5] --> 效果:['1','2','3','4','5']#需求2:lt = [1,2,3,4,5] --> 效果:[1,4,9,16,25]lt = [1,2,3,4,5]#自定義函數:將int --> strdef int2Str(i): return str(i)print(list(map(int2Str,lt)))print(list(map(str,lt)))print(list(map(lambda x: str(x),lt)))#自定義函數:實現開方操作def kaifang(num): return num ** 2print(list(map(kaifang,lt)))print(list(map(lambda x: x ** 2,lt)))
python六十課——高階函數之map

python六十課——高階函數之map

python六十課——高階函數之map

python六十課——高階函數之map

查看原文 >>
相關文章