程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

【Python】Lambda表達式

編輯:Python

博文作者 wangzirui32
喜歡的可以 點贊 收藏 關注哦~~
我的第163篇原創作品
本文首發於CSDN,未經許可禁止轉載


hello,大家好,我是wangzirui32,今天我們來學習Python中Lambda表達式,開始學習吧!

1. 什麼是Lambda

Lambda在Python編程中使用的頻率非常高,這種表達式其實是Python中的一類特殊的定義函數的形式,使用它可以定義一個匿名函數。當你需要一個簡單功能的函數,Lambda能滿足大部分需求。

2. Lambda語法

Lambda語法格式如下:

lambda 參數1, 參數2, ...., 參數n: 執行語句

示例代碼:

# 計算x的三次方
f = lambda x: x**3
print(f(3))

輸出:

27

注意,lambda語句中,冒號(:)後執行一個表達式,不需要用return返回結果,你可以使用if語句:

# 判斷是否為偶數 是偶數返回True 否則返回False
f = lambda x: True if x % 2 == 0 else False
print(f(10))
print(f(11))

輸出:

True
False

也可以指定多個參數:

# 求x y z的平均值
f = lambda x, y, z: (x+y+z)/3
print(f(11, 45, 14))

輸出:

23.33333333333

3. Lambda高階用法

3.1 排序

現有如下列表:

students = [{
"name": "John", "age": 10, "score": 87},
{
"name": "Sally", "age": 9, "score": 100},
{
"name": "James", "age": 13, "score": 95}]

需求:將列表中的學生信息分別按年齡和分數進行排序。
我們可以使用lambda表達式和排序函數達成需求,代碼:

students = [{
"name": "John", "age": 10, "score": 87},
{
"name": "Sally", "age": 18, "score": 100},
{
"name": "James", "age": 13, "score": 95}]
# 這裡的lambda返回學生的年齡作為排序依據
students.sort(key=lambda student: student['age'])
print("按年齡排序:", students)
# 這裡的lambda返回學生的分數作為排序依據
students.sort(key=lambda student: student['score'], reverse=True)
print("按分數排序:", students)

輸出結果:

按年齡排序: [{
'name': 'John', 'age': 10, 'score': 87}, ......]
按分數排序: [{
'name': 'Sally', 'age': 18, 'score': 100}, ......]

3.2 序列映射

現有如下列表:

numbers = [1, 2, 3, 4, 5, 6, 7]

需求:將列表內的所有數字元素全部執行一次立方操作。
我們可以結合map函數達成需求,代碼:

numbers = [1, 2, 3, 4, 5, 6, 7]
# 這裡的lamdba返回x的立方
new_numbers = list(map(lambda x: x**3, numbers))
print(new_numbers)

輸出:

[1, 8, 27, 64, 125, 216, 343]

map函數可以用來映射序列,調用參數如下:

map(映射函數, 序列列表)

映射過程類似於:

numbers1234567映射new_numbers182764125216343

3.3 過濾元素

現有如下列表:

numbers = [11, 4, 5, 14, 10, 32, 50, 19, 20]

需求:過濾出列表中10以上的偶數
我們可以使用filter內置函數,代碼:

numbers = [11, 4, 5, 14, 10, 32, 50, 19, 20]
new_numbers = list(filter(lambda x: x % 2 == 0 and x >= 10, numbers))
print(new_numbers)

輸出:

[14, 10, 32, 50, 20]

在這個lambda表達式內,我們限定了條件x % 2 == 0 and x >= 10,如果2個條件都滿足,表達式結果為True,否則為False
整個過程類似於:

numbers1145141032501920是否符合條件FalseFalseFalseTrueTrueTrueTrueFalseTruenew_numbersNoneNoneNone14103250None20

3.4 指定相鄰元素的結合條件

現有如下列表:

students = ["John", "Jack", "James", "Malfoy", "Sally"]

需求:將每兩個學生姓名之間添上","連接並輸出。
我們可以使用reduce函數,代碼:

from functools import reduce
students = ["John", "Jack", "James", "Malfoy", "Sally"]
print(reduce(lambda a, b: "{} , {}".format(a, b), students))

輸出:

John , Jack , James , Malfoy , Sally

3.5 函數裝飾器

當一個函數返回lambda匿名函數時,這就類似於Python中的函數裝飾器了,示例代碼:

def welcome_text(text):
return lambda username: "Welcome {}!\n{}".format(username, text)
welcome_user = welcome_text("這裡是wangzirui32的編程課堂!")
print(welcome_user("Malfoy"))

輸出:

Welcome Malfoy!
這裡是wangzirui32的編程課堂!

好了,今天的課程就到這裡,我是wangzirui32,喜歡的可以點個收藏和關注,我們下次再見!


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved