在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 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 |
若是對字符串轉換不太熟悉的童鞋請參考:字符串/列表/元組/字典之間的相互轉換
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
其實匿名函數做爲函數參數傳參和普通函數傳參沒什麼區別,示例代碼以下:
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.匿名函數不只能夠直接看成函數調用,還能直接做爲函數中的參數直接使用;
4.python函數不定長參數 *argc,**kargcs
轉載請註明:猿說Python » python匿名函數