溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

python 匿名函數(shù)lambda(20)

發(fā)布時間:2020-06-22 14:17:24 來源:網(wǎng)絡(luò) 閱讀:300 作者:qq5d6f345f0205e 欄目:編程語言

在python開發(fā)中常規(guī)的函數(shù)在調(diào)用之前都需要先聲明,而python還有一種匿名函數(shù),有速寫函數(shù)的功能并且匿名函數(shù)不需要聲明也沒有函數(shù)名字,完全不需要擔(dān)心函數(shù)名沖突,具體的妙用還需要從實戰(zhàn)練習(xí)中多多積累經(jīng)驗。

python 匿名函數(shù)lambda(20)

一.匿名函數(shù)語法:


1

lambda a,b,c:expression

匿名函數(shù)有以下幾個特點:

1.匿名函數(shù)有關(guān)鍵字?lambda?修飾;

2.匿名函數(shù)冒號?:?之前的是函數(shù)的參數(shù),匿名函數(shù)可以是無參匿名函數(shù),也可以是帶參匿名函數(shù);

3.匿名函數(shù)冒號?:?之后是表達(dá)式,匿名函數(shù)不需要寫?return,表達(dá)式的結(jié)果就是返回值;

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

# !usr/bin/env python

# -*- coding:utf-8 _*-

"""

@Author:何以解憂

@Blog(個人博客地址): shuopython.com

@WeChat Official Account(微信公眾號):猿說python

@Github:www.github.com

@File:python_lambda.py

@Time:2019/10/5 17:48

?

@Motto:不積跬步無以至千里,不積小流無以成江海,程序人生的精彩需要堅持不懈地積累!

"""

?

#不帶參數(shù)的普通函數(shù)

def sing_dog():

????return True

#不帶參數(shù)的匿名函數(shù)

f0 = lambda :True # 無參的匿名函數(shù),在匿名函數(shù)的冒號前面無需寫參數(shù)

print(sing_dog())

print(f0())

?

print("***"*20)

?

#帶參數(shù)的普通函數(shù)

def sub(a,b):

????return a - b

def add(a,b):

????return a + b

?

#帶參數(shù)的匿名函數(shù)

f1 = lambda a,b:a-b

f2 = lambda a,b:a+b

?

print(sub(4,2))

print(add(4,2))

print(f1(4,2))

print(f2(4,2))

輸出結(jié)果:

1

2

3

4

5

6

7

True

True

************************************************************

2

6

2

6

首先,匿名函數(shù)和普通函數(shù)對比之下,明顯能感覺到匿名函數(shù)的使用能讓代碼更加簡潔,當(dāng)然匿名函數(shù)使用場景適用于比較簡單的需求,對于復(fù)雜的計算,匿名函數(shù)是無法完成的;

其次,無參的匿名函數(shù),在匿名函數(shù)的冒號前面無需寫參數(shù);

python 匿名函數(shù)lambda(20)

二.匿名函數(shù)調(diào)用:

1.匿名函數(shù)常規(guī)使用

假如有這樣一個需求:傳入一個字符串,對字符串根據(jù)空格拆分,并以字符串的形式返回拆分后的結(jié)果,示例代碼如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

str1 = "laowang is sing_dog "

?

#普通函數(shù)

def get_str(str1):

????# 1.將字符串拆分為列表

????list1 = str1.split(" ")

????# 2.將列表轉(zhuǎn)為字符串并返回字符串

????return "".join(list1)

?

????# 將1/2兩步合并為一步完成

????# return "".join(str1.split(" "))

?

print("打印原始字符串:",str1)

print("調(diào)用普通函數(shù)獲取字符串拆分結(jié)果:",get_str(str1))

?

#匿名函數(shù)

f0 = lambda a:"".join(a.split(" "))

print("調(diào)用匿名函數(shù)獲取字符串拆分結(jié)果:",f0(str1))

輸出結(jié)果:

1

2

3

打印原始字符串: laowang is sing_dog

調(diào)用普通函數(shù)獲取字符串拆分結(jié)果: laowangissing_dog

調(diào)用匿名函數(shù)獲取字符串拆分結(jié)果: laowangissing_dog

如果對字符串轉(zhuǎn)換不太熟悉的童鞋請參考:字符串/列表/元組/字典之間的相互轉(zhuǎn)換

?

2.匿名函數(shù)使用不定長參數(shù)


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

# 匿名函數(shù):通過條件表達(dá)式,返回最大值

f0 = lambda x,y: x if x> y else y

print(f0(5,10))

?

# 匿名函數(shù):求三個參數(shù)的乘積

f1 = lambda x,y,z: x*y*z

print(f1(1,2,3))

?

# 缺省的匿名函數(shù)

f2 = lambda x,y=2: x+y #使用了默認(rèn)值

print(f2(10)) #第二個參數(shù)為缺省參數(shù),使用默認(rèn)值2

?

# 不定長參數(shù)的匿名函數(shù)

f3 = lambda *z:z #*z返回的是一個元祖

print(f3('hello',False))

?

# 不定長參數(shù)的匿名函數(shù)

f4 = lambda **Arg: Arg #arg返回的是一個字典

print(f4(a=1,b=2,k="hello"))

輸出結(jié)果:

1

2

3

4

5

10

6

12

('hello', False)

{'a': 1, 'b': 2, 'k': 'hello'}

如果對python不定長參數(shù)*argc,**kargcs 不太熟悉的話,可以在看一遍這篇文章:python函數(shù)不定長參數(shù) *argc,**kargcs

?

3.匿名函數(shù)作為參數(shù)使用

其實匿名函數(shù)作為函數(shù)參數(shù)傳參和普通函數(shù)傳參沒什么區(qū)別,示例代碼如下:

1

2

3

4

5

6

7

8

9

10

def function1(a,b,):

????return a if a>b else b #返回最大值

?

# 1.定義匿名函數(shù)

f0 = lambda b:b*10

# 2.匿名函數(shù)作為參數(shù),調(diào)用普通函數(shù)

function1(100,f0(5))

?

# 上面兩行代碼合并為一行

function1(100 , (lambda b:b*10)(5))

?

python 匿名函數(shù)lambda(20)

三.重點總結(jié):

1.匿名函數(shù)可以是無參匿名函數(shù)也可以是有參匿名函數(shù);

2.匿名函數(shù)不僅可以直接當(dāng)作函數(shù)調(diào)用,還能直接作為函數(shù)中的參數(shù)直接使用;

?

?

猜你喜歡:

1.python函數(shù)聲明和調(diào)用

2.python字典推導(dǎo)式

3.python列表推導(dǎo)式

4.python函數(shù)不定長參數(shù) *argc,**kargcs

?

轉(zhuǎn)載請注明:猿說Python???python匿名函數(shù)

?



向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI