欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

Python中的lambda和apply、map的用法

系統(tǒng) 1914 0

1 lambda

lambda原型為:lambda 參數(shù):操作(參數(shù))

lambda函數(shù)也叫匿名函數(shù),即沒有具體名稱的函數(shù),它允許快速定義單行函數(shù),可以用在任何需要函數(shù)的地方。這區(qū)別于def定義的函數(shù)。

lambda與def的區(qū)別:

1)def創(chuàng)建的方法是有名稱的,而lambda沒有。

2)lambda會(huì)返回一個(gè)函數(shù)對(duì)象,但這個(gè)對(duì)象不會(huì)賦給一個(gè)標(biāo)識(shí)符,而def則會(huì)把函數(shù)對(duì)象賦值給一個(gè)變量(函數(shù)名)。

3)lambda只是一個(gè)表達(dá)式,而def則是一個(gè)語句。

4)lambda表達(dá)式” : “后面,只能有一個(gè)表達(dá)式,def則可以有多個(gè)。

5)像if或for或print等語句不能用于lambda中,def可以。

6)lambda一般用來定義簡單的函數(shù),而def可以定義復(fù)雜的函數(shù)。

1.1?舉最簡單的例子

            
              # 單個(gè)參數(shù)的:
g = lambda x: x ** 2
print(g(3))
"""
9
"""

# 多個(gè)參數(shù)的:
g = lambda x, y, z: (x + y) ** z
print(g(1, 2, 2))
"""
9
"""
            
          

1.2 再舉一個(gè)普通的例子

將一個(gè) list 里的每個(gè)元素都平方:

            
              map(lambda x: x * x, [y for y in range(10)])
            
          

這個(gè)寫法要好過

            
              def sq(x):
    return x * x


map(sq, [y for y in range(10)])
            
          

因?yàn)楹笳叨喽x了一個(gè)(污染環(huán)境的)函數(shù),尤其如果這個(gè)函數(shù)只會(huì)使用一次的話。

進(jìn)一步講,匿名函數(shù)本質(zhì)上就是一個(gè)函數(shù),它所抽象出來的東西是一組運(yùn)算。這是什么意思呢?類比

            
              a = [1, 2, 3]
            
          

            
              f = lambda x : x + 1
            
          

我們會(huì)發(fā)現(xiàn),等號(hào)右邊的東西完全可以脫離等號(hào)左邊的東西而存在,等號(hào)左邊的名字只是右邊之實(shí)體的標(biāo)識(shí)符。如果能習(xí)慣 [1, 2, 3] 單獨(dú)存在,那么 lambda x : x + 1 也能單獨(dú)存在其實(shí)也就不難理解了,它的意義就是給「某個(gè)數(shù)加一」這一運(yùn)算本身。

2 map

現(xiàn)在回頭來看 map() 函數(shù),它可以將一個(gè)函數(shù)映射到一個(gè)可枚舉類型上面。沿用上面給出的 a 和 f,可以寫

            
              map(f, a)
            
          

也就是將函數(shù) f 依次套用在 a 的每一個(gè)元素上面,獲得結(jié)果 [2, 3, 4]。現(xiàn)在用 lambda 表達(dá)式來替換 f,就變成:

            
              map(lambda x: x + 1, [1, 2, 3])
            
          

會(huì)不會(huì)覺得現(xiàn)在很一目了然了?尤其是類比

            
              a = [1, 2, 3]
r = []
for each in a:
    r.append(each + 1)
            
          

3 Apply

Python中apply函數(shù)的格式為:

apply(func,*args,**kwargs)

當(dāng)然,func可以是匿名函數(shù)。

用途:當(dāng)一個(gè)函數(shù)的參數(shù)存在于一個(gè)元組或者一個(gè)字典中時(shí),用來間接的調(diào)用這個(gè)函數(shù),并將元組或者字典中的參數(shù)按照順序傳遞給參數(shù)

解析:args是一個(gè)包含按照函數(shù)所需參數(shù)傳遞的位置參數(shù)的一個(gè)元組,簡單來說,假如A函數(shù)的函數(shù)位置為 A(a=1,b=2),那么這個(gè)元組中就必須嚴(yán)格按照這個(gè)參數(shù)的位置順序進(jìn)行傳遞(a=3,b=4),而不能是(b=4,a=3)這樣的順序。kwargs是一個(gè)包含關(guān)鍵字參數(shù)的字典,而其中args如果不傳遞,kwargs需要傳遞,則必須在args的位置留空。

apply的返回值就是函數(shù)func函數(shù)的返回值。

3.1 舉例

            
              from past.builtins import apply


def function(a, b):
    print(a, b)


apply(function, 'good', 'better')
apply(function, 2, 3 + 6)
apply(function, ('good',), {'b': 'better'})
            
          

運(yùn)行結(jié)果:

            
              good better
2 9
('good',) {'b': 'better'}
            
          

3.2 下面的例子是DataFrame中apply的用法

            
              #函數(shù)應(yīng)用和映射
import numpy as np
import pandas as pd
df=pd.DataFrame(np.random.randn(4,3),columns=list('bde'),index=['utah','ohio','texas','oregon'])
print(df)
"""
               b         d         e
utah   -0.667969  1.974801  0.738890
ohio   -0.896774 -0.790914  0.474183
texas   0.043476  0.890176 -0.662676
oregon  0.701109 -2.238288 -0.154442
"""
 
#將函數(shù)應(yīng)用到由各列或行形成的一維數(shù)組上。DataFrame的apply方法可以實(shí)現(xiàn)此功能
f=lambda x:x.max()-x.min()
#默認(rèn)情況下會(huì)以列為單位,分別對(duì)列應(yīng)用函數(shù)
t1=df.apply(f)
print(t1)
t2=df.apply(f,axis=1)
print(t2)
 
"""
b    1.597883
d    4.213089
e    1.401566
dtype: float64
utah      2.642770
ohio      1.370957
texas     1.552852
oregon    2.939397
dtype: float64
"""
 
#除標(biāo)量外,傳遞給apply的函數(shù)還可以返回由多個(gè)值組成的Series
def f(x):
    return pd.Series([x.min(),x.max()],index=['min','max'])
t3=df.apply(f)
#從運(yùn)行的結(jié)果可以看出,按列調(diào)用的順序,調(diào)用函數(shù)運(yùn)行的結(jié)果在右邊依次追加
print(t3)
 
"""
            b         d         e
min -0.896774 -2.238288 -0.662676
max  0.701109  1.974801  0.738890
"""
 
#元素級(jí)的python函數(shù),將函數(shù)應(yīng)用到每一個(gè)元素
#將DataFrame中的各個(gè)浮點(diǎn)值保留兩位小數(shù)
f=lambda x: '%.2f'%x
t3=df.applymap(f)
print(t3)
"""
            b      d      e
utah    -0.67   1.97   0.74
ohio    -0.90  -0.79   0.47
texas    0.04   0.89  -0.66
oregon   0.70  -2.24  -0.15
"""
 
#注意,之所以這里用map,是因?yàn)镾eries有一個(gè)元素級(jí)函數(shù)的map方法。而dataframe只有applymap。
t4=df['e'].map(f)
print(t4)
 
"""
utah     0.74
ohio     0.47
texas   -0.66
oregon  -0.15
"""
            
          

更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 欧美一区二区三区在线看 | 国产喷水 | 欧美三级不卡 | 大香伊人久久精品一区二区 | 欧美日日操 | 天天射天 | 97超精品视频在线观看 | 色欲AV色情国产又爽又色 | 爱爱视频在线观看 | 国产精品一区二区三 | 一级做a爰片性色毛片视频图片 | 天天拍天天干天天操 | 日本不卡一区二区三区在线观看 | 五月天播播网 | 国产三级在线视频播放线 | 久久九九综合 | 爱爱视频在线观看 | 免费在线观看的毛片 | 国产亚洲精品看片在线观看 | 日韩大片免费在线观看 | 欧美中文在线视频 | 精品综合| 欧美成人精品一区二区男人看 | 天天干天天操天天射 | 国产秋霞 | 妇女毛片 | 亚洲综人网 | 午夜视频在线 | 一级欧美毛片成人 | 欧美乱视频 | 国产精品极品美女在线观看免费 | 亚洲国产婷婷香蕉久久久久久99 | 日韩在线视频观看 | 国产片侵犯亲女视频播放 | 无码国产精品成人午夜视频 | 九九精品视频一区二区三区 | 亚洲一区日韩 | 三级av免费 | 久久成人一区 | 我不卡在线观看 | 成人在线播放视频 |