溫馨提示×

溫馨提示×

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

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

python 匿名函數lambda(20)

發布時間:2020-06-22 14:17:24 來源:網絡 閱讀:314 作者:qq5d6f345f0205e 欄目:編程語言

在python開發中常規的函數在調用之前都需要先聲明,而python還有一種匿名函數,有速寫函數的功能并且匿名函數不需要聲明也沒有函數名字,完全不需要擔心函數名沖突,具體的妙用還需要從實戰練習中多多積累經驗。

python 匿名函數lambda(20)

一.匿名函數語法:


1

lambda a,b,c:expression

匿名函數有以下幾個特點:

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

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

3.匿名函數冒號?:?之后是表達式,匿名函數不需要寫?return,表達式的結果就是返回值;

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

"""

?

#不帶參數的普通函數

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

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

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

python 匿名函數lambda(20)

二.匿名函數調用:

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

?

python 匿名函數lambda(20)

三.重點總結:

1.匿名函數可以是無參匿名函數也可以是有參匿名函數;

2.匿名函數不僅可以直接當作函數調用,還能直接作為函數中的參數直接使用;

?

?

猜你喜歡:

1.python函數聲明和調用

2.python字典推導式

3.python列表推導式

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

?

轉載請注明:猿說Python???python匿名函數

?



向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女