欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

python匿名函數(shù)優(yōu)點(diǎn) python匿名函數(shù)的特點(diǎn)

Python-匿名函數(shù)

在開(kāi)發(fā)當(dāng)中,一次使用的函數(shù)或者是我們不想命名的函數(shù),我們可以寫(xiě)成 匿名函數(shù) 。這篇博客來(lái)分享一下 Python 匿名函數(shù) 。

站在用戶的角度思考問(wèn)題,與客戶深入溝通,找到革吉網(wǎng)站設(shè)計(jì)與革吉網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、空間域名、虛擬主機(jī)、企業(yè)郵箱。業(yè)務(wù)覆蓋革吉地區(qū)。

匿名函數(shù)是通過(guò) lambda 關(guān)鍵字創(chuàng)建,而不是 def 關(guān)鍵字。

Python 匿名函數(shù)lambda是什么?

在Python語(yǔ)言中除了def語(yǔ)句用來(lái)定義函數(shù)之外,還可以使用匿名函數(shù)lambda,它是Python一種生成函數(shù)對(duì)象的表達(dá)式形式。匿名函數(shù)通常是創(chuàng)建了可以被調(diào)用的函數(shù),它返回了函數(shù),而并沒(méi)有將這個(gè)函數(shù)命名。lambda有時(shí)被叫做匿名函數(shù)也就是這個(gè)原因,需要一個(gè)函數(shù),又不想動(dòng)腦筋去想名字,這就是匿名函數(shù)。

#-*-?coding:utf-8?-*-

#__author__?=?""

#?普通python函數(shù)

def?func(a,b,c):

return?a+b+c

print?func(1,2,3)

#?返回值為6

#?lambda匿名函數(shù)

f?=?lambda?a,b,c:a+b+c

print?f(1,2,3)

#?返回結(jié)果為6

#?注意觀察上面的Python示例代碼,f?=?lambda?a,b,c:a+b+c?中的關(guān)鍵字lambda表示匿名函數(shù),

#?冒號(hào):之前的a,b,c表示它們是這個(gè)函數(shù)的參數(shù)。

#?匿名函數(shù)不需要return來(lái)返回值,表達(dá)式本身結(jié)果就是返回值。

python中的匿名列表是什么

python中,匿名列表就是匿名函數(shù),顧名思義,就是沒(méi)有名字的函數(shù)。

它主要用在那些只使用一次的場(chǎng)景中。如果我們的程序中只需要調(diào)用一次某個(gè)簡(jiǎn)單邏輯,把它寫(xiě)成函數(shù)還需要先定義、取函數(shù)名字等一些列操作,這種場(chǎng)景下使用匿名函數(shù)往往能夠讓你的程序更加簡(jiǎn)單。

匿名函數(shù)還有名稱,叫做lambda。匿名函數(shù)格式如下:lambdaarg1,arg2...,argN:expression,它常用格式是lambda關(guān)鍵字+逗號(hào)分隔的參數(shù)+冒號(hào)+表達(dá)式。

Python中的匿名函數(shù)——lambda函數(shù)

在Python中,lambda函數(shù)是一個(gè)簡(jiǎn)單的匿名函數(shù)。該函數(shù)沒(méi)有函數(shù)名,它可以有多個(gè)參數(shù),但函數(shù)只由一個(gè)表達(dá)式構(gòu)成。

lambda函數(shù)具體的格式如下:

lambda 參數(shù) : 表達(dá)式

其中, lambda 是關(guān)鍵字, 參數(shù) 是函數(shù)的參數(shù),可以有0至多個(gè)。冒號(hào)后面是表達(dá)式,也是該函數(shù)中的唯一的表達(dá)式,lambda函數(shù)會(huì)返回該表達(dá)式的返回值。

我們來(lái)看一個(gè)具體的例子。

在上述代碼中,number1, number2是lambda函數(shù)的參數(shù),number1**2+number**2是函數(shù)的表達(dá)式,該函數(shù)返回number1, number2兩個(gè)數(shù)的平方和。

上述代碼創(chuàng)建了一個(gè)lambda函數(shù)后將其賦值給變量sum_square, 在print函數(shù)中通過(guò)sum_square來(lái)調(diào)用這個(gè)lambda函數(shù)。

上述的lambda函數(shù)完全可用標(biāo)準(zhǔn)的函數(shù)來(lái)實(shí)現(xiàn),我們可以將上述代碼改寫(xiě)成下面的代碼。

在代碼中,定義了函數(shù)sum_square,該函數(shù)包含兩個(gè)參數(shù),并執(zhí)行一條語(yǔ)句并將該語(yǔ)句的執(zhí)行結(jié)果作為函數(shù)返回值。通過(guò)上述代碼可以幫助我們更直觀地理解lambda函數(shù)。

lambda函數(shù)的可讀性較差,那么為什么要有這樣奇怪的匿名函數(shù)呢?這個(gè)要從lambda的使用場(chǎng)合說(shuō)起。我們來(lái)看下面的代碼。

上述代碼定義了一個(gè)數(shù)值列表,調(diào)用python的內(nèi)置函數(shù)filter來(lái)生成一個(gè)新的迭代器。 filter函數(shù)的第一個(gè)參數(shù)為一個(gè)函數(shù),用于決定過(guò)濾的方法;第二個(gè)參數(shù)為一個(gè)可迭代的對(duì)象如列表、集合等。filter函數(shù)返回一個(gè)新的迭代器, 用于獲得滿足第一個(gè)函數(shù)為真的所有元素。在上述代碼中,我們給filter傳遞的第一個(gè)參數(shù)是一個(gè)匿名函數(shù):lambda number:number%3==0, 該函數(shù)在一個(gè)數(shù)整除3時(shí)為T(mén)rue,否則為False. filter函數(shù)會(huì)創(chuàng)建一個(gè)新的迭代器,通過(guò)調(diào)用上述匿名函數(shù)來(lái)判斷該元素是否滿足條件,得到所有3的倍數(shù)的數(shù)。

當(dāng)然,上述代碼也可以使用正常的函數(shù)方式來(lái)實(shí)現(xiàn),如下所示:

我們可以看到,所有匿名函數(shù)的功能都可以通過(guò)標(biāo)準(zhǔn)函數(shù)來(lái)實(shí)現(xiàn)。匿名函數(shù)常在調(diào)用其它函數(shù)(如filter, map等)時(shí)作為參數(shù)使用。使用匿名函數(shù)可以使代碼更為精簡(jiǎn)。匿名函數(shù)主要用于完成簡(jiǎn)單的任務(wù),如果匿名函數(shù)過(guò)于復(fù)雜,會(huì)導(dǎo)致可讀性較差,調(diào)試起來(lái)也比較困難,因此,強(qiáng)烈不建議使用lambda寫(xiě)天書(shū)般的代碼。總之,要根據(jù)實(shí)際情況決定是否使用匿名函數(shù)。

python 中的匿名函數(shù)

當(dāng)我們?cè)趥魅牒瘮?shù)時(shí),有些時(shí)候,不需要顯式地定義函數(shù),直接傳入匿名函數(shù)更方便。

在Python中,對(duì)匿名函數(shù)提供了有限支持。還是以map()函數(shù)為例,計(jì)算f(x)=x2時(shí),除了定義一個(gè)f(x)的函數(shù)外,還可以直接傳入匿名函數(shù):

map(lambda?x:?x?*?x,?[1,?2,?3,?4,?5,?6,?7,?8,?9])

[1,?4,?9,?16,?25,?36,?49,?64,?81]

通過(guò)對(duì)比可以看出,匿名函數(shù)lambda x: x * x實(shí)際上就是:

def?f(x):

return?x?*?x

關(guān)鍵字lambda表示匿名函數(shù),冒號(hào)前面的x表示函數(shù)參數(shù)。

匿名函數(shù)有個(gè)限制,就是只能有一個(gè)表達(dá)式,不用寫(xiě)return,返回值就是該表達(dá)式的結(jié)果。

用匿名函數(shù)有個(gè)好處,因?yàn)楹瘮?shù)沒(méi)有名字,不必?fù)?dān)心函數(shù)名沖突。此外,匿名函數(shù)也是一個(gè)函數(shù)對(duì)象,也可以把匿名函數(shù)賦值給一個(gè)變量,再利用變量來(lái)調(diào)用該函數(shù):

f?=?lambda?x:?x?*?x

f

function?lambda?at?0x10453d7d0

f(5)

25

同樣,也可以把匿名函數(shù)作為返回值返回,比如:

def?build(x,?y):

return?lambda:?x?*?x?+?y?*?y

小結(jié)

Python對(duì)匿名函數(shù)的支持有限,只有一些簡(jiǎn)單的情況下可以使用匿名函數(shù)。

希望能幫到你!

Python其實(shí)很簡(jiǎn)單 第十二章 函數(shù)與變量的作用域

在前面已經(jīng)多次提到函數(shù)這個(gè)概念,之所以沒(méi)有解釋什么是函數(shù),是因?yàn)槌绦蛑械暮瘮?shù)和數(shù)學(xué)中的函數(shù)差不多,如input()、range()等都是函數(shù),這些都是Python的標(biāo)準(zhǔn)函數(shù),直接使用就可以了。根據(jù)需要,用戶也可以自定義函數(shù)。

12.1 函數(shù)

函數(shù)的結(jié)構(gòu):

def 函數(shù)名(參數(shù)):

函數(shù)體

return 返回值

例如:數(shù)學(xué)中的函數(shù)f(x)=2x+5在Python中可以定義如下:

def f(x):

y=2*x+5

return(y)

如果x取值為3,可以使用如下語(yǔ)句調(diào)用函數(shù):

f(3)

下面給出完整的程序代碼:

def f(x):

y=2*x+5

return(y)

res=f(3)

print(res)

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

如上例中的x是函數(shù)f(x)的參數(shù),有時(shí)也被稱為形式參數(shù)(簡(jiǎn)稱形參),在函數(shù)被調(diào)用時(shí),x被具體的值3替換y就是函數(shù)的返回值,這個(gè)值3也被稱為實(shí)際參數(shù)(簡(jiǎn)稱實(shí)參)。

上例中的y是函數(shù)f(x)的返回值。并不是所有的函數(shù)都有參數(shù)和返回值。如下面的函數(shù):

def func():

print('此為無(wú)參數(shù)傳遞、無(wú)返回值的函數(shù)')

func()

輸出結(jié)果:此為無(wú)參數(shù)傳遞、無(wú)返回值的函數(shù)

可以看出,該函數(shù)func()無(wú)參數(shù),故調(diào)用時(shí)不用賦給參數(shù)值。

函數(shù)也可以有多個(gè)參數(shù),如f(x,y)=x2+y2,可用Python語(yǔ)言定義如下:

def f(x,y):

z=x**2+y**2

return z

print(f(2,3)) #調(diào)用函數(shù)f(x,y)

輸出結(jié)果:13

也可以通過(guò)直接給參數(shù)列表中的參數(shù)賦值的方法,為參數(shù)添加默認(rèn)值,如果用戶賦予參數(shù)值,則按照用戶賦值執(zhí)行,否則使用默認(rèn)值。例如:

def f(x,y=3):

z=x**2+y**2

return z

若調(diào)用時(shí)參數(shù)列表為(2,1),即x賦值為2,y賦值為1:

print(f(2,1))

輸出結(jié)果為:5

若調(diào)用時(shí)參數(shù)列表為(2),即x賦值為2,y賦值省缺,則y使用默認(rèn)值:

print(f(2))

輸出結(jié)果為:13

回調(diào)函數(shù),又稱函數(shù)回調(diào),是將函數(shù)作為另一函數(shù)的參數(shù)。

例如:

def func(fun,m,n):

fun(m,n)

def f_add(m,n):

print('m+n=',m+n)

def f_mult(m,n):

print('m*n=',m*n)

func(f_add,2,3)

func(f_mult,2,3)

輸出結(jié)果:

m+n= 5

m*n= 6

在f_add(m,n)和f_mult(m,n)被定義前,func(fun,m,n)中的fun(m,n)就已經(jīng)調(diào)用了這兩個(gè)函數(shù),即“先調(diào)用后定義”,這也是回調(diào)函數(shù)的特點(diǎn)。

如果無(wú)法預(yù)知參數(shù)的個(gè)數(shù),可以在參數(shù)前面加上*號(hào),這種參數(shù)實(shí)際上對(duì)應(yīng)元組類型。譬如,參會(huì)的人數(shù)事先不能確定,只能根據(jù)與會(huì)人員名單輸入:

def func(*names):

print('今天與會(huì)人員有:')

for name in names:

print(name)

func('張小兵','陳曉梅','李大海','王長(zhǎng)江')

運(yùn)行后,輸出結(jié)果為:

今天與會(huì)人員有:

張小兵

陳曉梅

李大海

王長(zhǎng)江

參數(shù)為字典類型,需要在參數(shù)前面加上**號(hào)。

def func(**kwargs):

for i in kwargs:

print(i,kwargs[i])

func(a='a1',b='b1',c='c1')

輸出結(jié)果為:

a a1

b b1

c c1

一個(gè)有趣的實(shí)例:

def func(x,y,z,*args,**kwargs):

print(x,y,z)

print(args)

print(kwargs)

func('a','b','c','Python','is easy',py='python',j='java',ph='php')

輸出結(jié)果:

a b c # 前三個(gè)實(shí)參賦給前三個(gè)形參

('Python', 'is easy') # *args接收元組數(shù)據(jù)

{'py': 'python', 'j': 'java', 'ph': 'php'} # **kwargs接收字典數(shù)據(jù)

12.2 變量的作用域

變量的作用域即變量的有效范圍,可分為全局變量和局部變量。

局部變量

在函數(shù)中定義的變量就是局部變量,局部變量的作用域僅限于函數(shù)內(nèi)部使用。

全局變量

在主程序中定義的變量就是全局變量,但在函數(shù)中用關(guān)鍵字global修飾的變量也可以當(dāng)做全局變量來(lái)使用。

全局變量的作用域是整個(gè)程序,也就是說(shuō),全局變量可以在整個(gè)程序中可以訪問(wèn)。

下面通過(guò)實(shí)例去討論:

程序1:

a=1 # a為全局變量

def a_add():

print('a的初值:',a) # 在函數(shù)中讀取a的值

a_add() # 調(diào)用函數(shù)a_add()

a+=1 # 主程序語(yǔ)句,a增加1

print('a現(xiàn)在的值是:',a) # 主程序語(yǔ)句,讀取a的值

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

a的初值: 1

a現(xiàn)在的值是: 2

這個(gè)結(jié)果和我們想象的一樣,全局變量a既可以在主程序中讀取,也可以在子程序(函數(shù))中讀取。

程序2:

a=1

def a_add():

a+=1

print('a的初值:',a)

a_add()

print('a現(xiàn)在的值是:',a)

運(yùn)行程序1時(shí)出現(xiàn)如下錯(cuò)誤提示:

UnboundLocalError: local variable 'a' referenced before assignment

意思是:局部變量'a'在賦值之前被引用。

從語(yǔ)法上來(lái)講,該程序沒(méi)有錯(cuò)誤。首先定義了一個(gè)全局變量a并賦值為1,又定義了一個(gè)函數(shù)a_add(),函數(shù)內(nèi)的語(yǔ)句a+=1就是出錯(cuò)的根源,雖然我們的初衷是想讓全局變量a的值增加1,但從錯(cuò)誤提示看,這個(gè)語(yǔ)句中的a并不是全局變量,而是局部變量。看來(lái),在函數(shù)中讀取全局變量的值是沒(méi)有問(wèn)題的(在程序1中已經(jīng)得到了驗(yàn)證),但要在函數(shù)中改變?nèi)肿兞康闹凳遣恍械模ㄔ诔绦?的錯(cuò)誤提示a+=1中的a 是局部變量,而非全局變量)。

怎樣解決這個(gè)問(wèn)題?

程序3:

a=1

def a_add(x):

x+=1

return x

print('a的初值:',a)

a=a_add(a)

print('a現(xiàn)在的值是:',a)

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

a的初值: 1

a現(xiàn)在的值是: 2

結(jié)果的確是正確的,但在函數(shù)a_add(x)中沒(méi)有調(diào)用變量a(沒(méi)有出現(xiàn)變量a)。

程序4:

a=1

def a_add(a):

a+=1

return a

print('a的初值:',a)

a=a_add(a)

print('a現(xiàn)在的值是:',a)

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

a的初值: 1

a現(xiàn)在的值是: 2

對(duì)比程序4和程序3不難發(fā)現(xiàn),其實(shí)程序4只是簡(jiǎn)單的把函數(shù)的參數(shù)x變成了a,這個(gè)a的實(shí)質(zhì)和程序3中的x還是一樣的。這進(jìn)一步證實(shí),函數(shù)中的a是局部變量,與主程序的全局變量a有著本質(zhì)的區(qū)別。

程序5:

a=1

def a_add():

global a

a+=1

print('a的初值:',a)

a_add()

print('a現(xiàn)在的值是:',a)

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

a的初值: 1

a現(xiàn)在的值是: 2

程序5和程序2相比較,僅僅是在函數(shù)中添加了一個(gè)定義“global a”,此時(shí)的局部變量a就可以當(dāng)做全局變量使用,由于它和全局變量a同名,自然也就不用區(qū)分a究竟是全局變量還是局部變量了,在主程序和該函數(shù)內(nèi)都可以訪問(wèn)、修改變量a的值了。

雖然使用global可使變量使用起來(lái)非常方便,但也容易引起混淆,故在使用過(guò)程中還是謹(jǐn)慎為好。

12.3 函數(shù)的遞歸與嵌套

遞歸,就是函數(shù)調(diào)用它自身。遞歸必須設(shè)置停止條件,否則函數(shù)將無(wú)法終止,形成死循環(huán)。

以計(jì)算階乘為例:

def func(n):

if n==1:

return 1

else:

return n*func(n-1) #func( )調(diào)用func( )

print(func(5))

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

嵌套,指在函數(shù)中調(diào)用另外的函數(shù)。這是程序中常見(jiàn)的一種結(jié)構(gòu),在此不再贅述。

匿名函數(shù)

Python中可以在參數(shù)前加上關(guān)鍵字lambda定義一個(gè)匿名函數(shù),這樣的函數(shù)一般都屬于“一次性”的。

例如:

程序1:這是一個(gè)常規(guī)的函數(shù)定義和調(diào)用。

def f_add(x,y):

return x+y

print(f_add(2,3))

輸出結(jié)果:5

程序2:使用lambda定義匿名函數(shù)。

f_add=lambda x,y:x+y

print(f_add(2,3))

輸出結(jié)果:5

從上面的代碼可以看出,使用lambda僅僅減少了一行代碼。f_add=lambda x,y:x+y中的f_add不是變量名,而是函數(shù)名。程序1和程序2的print( )語(yǔ)句中的參數(shù)都是一樣的——調(diào)用函數(shù)f_add( )。所以,匿名函數(shù)并沒(méi)有太多的優(yōu)點(diǎn)。

文章標(biāo)題:python匿名函數(shù)優(yōu)點(diǎn) python匿名函數(shù)的特點(diǎn)
網(wǎng)站路徑:http://www.chinadenli.net/article28/hippcp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作標(biāo)簽優(yōu)化網(wǎng)站改版企業(yè)建站做網(wǎng)站商城網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁(yè)設(shè)計(jì)