map内置函数分析所得到的思路
map:會(huì)根據(jù)提供的函數(shù)對(duì)指定序列做映射。
map(func, *iterables) --> map objectMake an iterator that computes the function using arguments fromeach of the iterables. Stops when the shortest iterable is exhausted."""根據(jù)提示,map有一個(gè)函數(shù)名參數(shù)還有個(gè)動(dòng)態(tài)參數(shù),意思是將可迭代的對(duì)象打散然后把每一個(gè)元素傳入函數(shù)名作為參數(shù)運(yùn)行讓后將函數(shù)返回值作為新的值映射傳入的參數(shù)。
現(xiàn)在有一個(gè)列表
l1 = [1,2,3,4,5,6],現(xiàn)在需要生成[1, 4, 9, 16, 25, 36]這樣的列表,也就是每個(gè)元素平方:首先l1肯定是個(gè)可迭代的對(duì)象所有我們可以先構(gòu)思成這樣:map(函數(shù)名,l1) l1會(huì)將每個(gè)元素傳入函數(shù)作為參數(shù)。所以我們這樣定義這個(gè)函數(shù):
def func(x):return x**2#這樣l1每遍歷一個(gè)元素函數(shù)func都會(huì)返回這個(gè)元素的平方
#所以就寫(xiě)成了這樣:
g = map(func,l1)
print(list(g)) #[1, 4, 9, 16, 25, 36]
接下來(lái)我們分析下map原理
在沒(méi)接觸map前,你會(huì)寫(xiě)出下面代碼:
def func(x):l1 = []for i in x:i = i**2l1.append(i)return l1#我們定義了以上函數(shù),當(dāng)你輸入一個(gè)列表時(shí)會(huì)返回一個(gè)新列表每個(gè)元素是之前的平方
g=func([1,2,3,4,5)
print(g)#[1,4,8,16,25]
這樣確實(shí)實(shí)現(xiàn)了功能,但是如果我現(xiàn)在改變條件說(shuō)新列表是原來(lái)每個(gè)元素的3次方,你又改成了這樣:
def func(x):l1 = []for i in x:i = i**3l1.append(i)return l1大家發(fā)現(xiàn)了沒(méi),其實(shí)我改的要求就是 i = i**3這行代碼,其實(shí)我們可以把這變的條件作為函數(shù),寫(xiě)成i = foo(i),而fun1這個(gè)函數(shù)為我定義函數(shù)的參數(shù)傳進(jìn)去,這樣我就只需改參數(shù)就能實(shí)現(xiàn)多個(gè)功能:
def func(foo,x):l1 = []
for i in x:
i = foo(i)
l1.append(i)
return l1
def foo(x):return x**2
print(func(foo,[1,2,3,4]))
大家會(huì)說(shuō)你不是還是要定義另一個(gè)函數(shù)傳進(jìn)去,這時(shí)匿名函數(shù)出來(lái)了
def func(foo,x):l1 = []for i in x:i = foo(i)l1.append(i)return l1 print(func(lambda x:x**2,[1,2,3,4])) print(func(lambda x:x**3,[1,2,3,4]))#這樣是不是無(wú)論你要我對(duì)元列表加減乘除平方或者替換我都只需要改變我傳入的函數(shù)名參數(shù)就行了
?
轉(zhuǎn)載于:https://www.cnblogs.com/Kingfan1993/p/9519348.html
總結(jié)
以上是生活随笔為你收集整理的map内置函数分析所得到的思路的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 如何修改Vue打包后文件的接口地址配置
- 下一篇: Linear_algebra_02_行列