python 匿名函數lambda(20)

在python開發中常規的函數在調用以前都須要先聲明,而python還有一種匿名函數,有速寫函數的功能而且匿名函數不須要聲明也沒有函數名字,徹底不須要擔憂函數名衝突,具體的妙用還須要從實戰練習中多多積累經驗。python

寫代碼

一.匿名函數語法:


1git

lambda a,b,c:expressiongithub

匿名函數有如下幾個特色:express

1.匿名函數有關鍵字 lambda 修飾;微信

2.匿名函數冒號 : 以前的是函數的參數,匿名函數能夠是無參匿名函數,也能夠是帶參匿名函數;ide

3.匿名函數冒號 : 以後是表達式,匿名函數不須要寫 return,表達式的結果就是返回值;函數

1spa

23d

3code

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:不積跬步無以致千里,不積小流無以成江海,程序人生的精彩須要堅持不懈地積累!

"""

 

#不帶參數的普通函數

def sing_dog():

    return True

#不帶參數的匿名函數

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

print(sing_dog())

print(f0())

 

print("***"*20)

 

#帶參數的普通函數

def sub(a,b):

    return a - b

def add(a,b):

    return a + b

 

#帶參數的匿名函數

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))

輸出結果:

1

2

3

4

5

6

7

True

True

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

2

6

2

6

首先,匿名函數和普通函數對比之下,明顯能感受到匿名函數的使用能讓代碼更加簡潔,固然匿名函數使用場景適用於比較簡單的需求,對於複雜的計算,匿名函數是沒法完成的;

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

複製粘貼

二.匿名函數調用:

1.匿名函數常規使用

假若有這樣一個需求:傳入一個字符串,對字符串根據空格拆分,並以字符串的形式返回拆分後的結果,示例代碼以下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

str1 = "laowang is sing_dog "

 

#普通函數

def get_str(str1):

    # 1.將字符串拆分爲列表

    list1 = str1.split(" ")

    # 2.將列表轉爲字符串並返回字符串

    return "".join(list1)

 

    # 將1/2兩步合併爲一步完成

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

 

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

print("調用普通函數獲取字符串拆分結果:",get_str(str1))

 

#匿名函數

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

print("調用匿名函數獲取字符串拆分結果:",f0(str1))

輸出結果:

1

2

3

打印原始字符串: laowang is sing_dog

調用普通函數獲取字符串拆分結果: laowangissing_dog

調用匿名函數獲取字符串拆分結果: laowangissing_dog

若是對字符串轉換不太熟悉的童鞋請參考:字符串/列表/元組/字典之間的相互轉換

 

2.匿名函數使用不定長參數


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

# 匿名函數:經過條件表達式,返回最大值

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

print(f0(5,10))

 

# 匿名函數:求三個參數的乘積

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

print(f1(1,2,3))

 

# 缺省的匿名函數

f2 = lambda x,y=2: x+y #使用了默認值

print(f2(10)) #第二個參數爲缺省參數,使用默認值2

 

# 不定長參數的匿名函數

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

print(f3('hello',False))

 

# 不定長參數的匿名函數

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

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

輸出結果:

1

2

3

4

5

10

6

12

('hello', False)

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

若是對python不定長參數*argc,**kargcs 不太熟悉的話,能夠在看一遍這篇文章:python函數不定長參數 *argc,**kargcs

 

3.匿名函數做爲參數使用

其實匿名函數做爲函數參數傳參和普通函數傳參沒什麼區別,示例代碼以下:

1

2

3

4

5

6

7

8

9

10

def function1(a,b,):

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

 

# 1.定義匿名函數

f0 = lambda b:b*10

# 2.匿名函數做爲參數,調用普通函數

function1(100,f0(5))

 

# 上面兩行代碼合併爲一行

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

 

能用就行

三.重點總結:

1.匿名函數能夠是無參匿名函數也能夠是有參匿名函數;

2.匿名函數不只能夠直接看成函數調用,還能直接做爲函數中的參數直接使用;

 

 

猜你喜歡:

1.python函數聲明和調用

2.python字典推導式

3.python列表推導式

4.python函數不定長參數 *argc,**kargcs

 

轉載請註明猿說Python » python匿名函數

相關文章
相關標籤/搜索