Python日常筆記(13) - Lambda-遞歸

遞歸

遞歸就是自己調用自己
必須要有跳出出口

案例

# 3+2+1=6
def sum_func(num):
   if num == 1:
       return 1
   return num + sum_func(num - 1)

print(sum_func(3))

Lambda

lambda表達式的參數可有可無,函數的參數在lambada表達式中完全適用
Lambda表達式可以接受任何數量的參數但只能返回一個表達式的值
Lambda表達式也叫做匿名函數
實例

# 通函數
def fun():
   return 100
print(fun())
# lambda函數
fun1 = lambda: 100
print(fun1)
print(fun1())

Lambda實現2個數相加

# 普通函數實現
def func1(a, b):
   return a + b
num1 = func1(1, 2)
print(num1)
# lambda實現
num2 = lambda a, b: a + b
print(num2(1, 2))


Lambda 各個參數實例

# lambda一個參數
fun1 = lambda a: a
print(fun1("我是python"))
# lambda默認參數
fun2 = lambda a, b=10: a + b
print(fun2(10))
# lambda可變參數 *args
fun3 = lambda *args: args
print(fun3(1, 20, 30))
# lambda可變參數**kwargs
fun4 = lambda **kwargs: kwargs
print(fun4(name="zhangsan", age=18))

Lambda對字典排序

# lambda對字典排序
dicts = [
   {"name": "zhangsan", "age": 16},
   {"name": "lisi", "age": 18},
   {"name": "wangwu", "age": 8},
   {"name": "zhaoliu", "age": 23}
]
# name升序
dicts.sort(key=lambda x: x["name"])
print(dicts)
# name降序
dicts.sort(key=lambda x: x["name"], reverse=True)
print(dicts)
#age升序
dicts.sort(key=lambda x: x["age"])
print(dicts)
#age降序
dicts.sort(key=lambda x: x["age"], reverse=True)
print(dicts)

高階函數abs/round函數

# 高階函數abs函數
print(abs(-10))
# 高階函數round()四捨五入
print(round(1.2))
print(round(1.9))


使用map(func,lst)計算一個序列中的各個數字的2次方

list1 = [1, 2, 3, 4]
def func(num):
   return num ** 2
reslut = map(func, list1)
print(reslut)
print(list(reslut))


reduce(func,lst):必須要有2個參數,每次func計算的結果繼續和序列的下一個元素做累計計算

注意:reduce()傳入的參數func必須接受2個參數


#reduce(func,lst):必須要有2個參數,每次func計算的結果繼續和序列的下一個元素做累計計算
#注意:reduce()傳入的參數func必須接受2個參數
import functools
list1 = [1, 2, 3, 4]
def func(x,y):
   return x + y
result = functools.reduce(func,list1)
print(result)


filter():主要用於過濾序列,過濾掉不符合條件的元素,返回一個對象,如果要轉換列表,可以使用list()轉換

# filter():主要用於過濾序列,過濾掉不符合條件的元素,返回一個對象,如果要轉換列表,可以使用list()轉換
list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
def func(x):

   return x % 2 == 0
result = filter(func,list1)
print(list(result))


將上續的高階函數全部使用拉姆達表達式簡化實現

# 使用map(func,lst)計算一個序列中的各個數字的2次方
list1 = [1, 2, 3, 4]
reslut = map(lambda num : num ** 2, list1)
print(reslut)
print(list(reslut))

# reduce(func,lst):必須要有2個參數,每次func計算的結果繼續和序列的下一個元素做累計計算
# 注意:reduce()傳入的參數func必須接受2個參數
import functools

list1 = [1, 2, 3, 4]
result = functools.reduce(lambda x, y: x + y, list1)
print(result)

# filter():主要用於過濾序列,過濾掉不符合條件的元素,返回一個對象,如果要轉換列表,可以使用list()轉換
list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
result = filter(lambda x: x % 2 == 0, list1)
print(list(result))

作者:阿超
原創公衆號:『Python日常筆記』,專注於 Python爬蟲等技術棧和有益的程序人生,會將一些平時的日常筆記都慢慢整理起來,也期待你的關注和阿超一起學習,公衆號回覆【csdn】優質資源。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章