遞迴和lambda表示式,高階函式

2021-09-28 14:41:46 字數 4374 閱讀 8238

3以內的數值之和:

# 3 + 2 + 1

defsum_numbers

(num)

:# 1.如果是1,直接就返回1 --出口

if num ==1:

return

1# 2. 如果不是1,重複執行累加並返回結果

return num + sum_numbers(num-1)

sum_result = sum_numbers(3)

print

(sum_result)

# 6

2. 如果遞迴沒有出口,會報錯:超出最大遞迴深度(深度因電腦所異)

如果乙個函式有乙個返回值,並且只有一句**,可以使用;lambda表示式,對於伺服器來說可以節省空間

又名匿名函式

不適合大型專案

lambda表示式的引數可有可無,函式的引數在lambda表示式中完全適用

lambda表示式能接收任何數量的引數,但只能返回乙個表示式的值!

def

fun1()

:return

100print

(fun1)

# print

(fun1())

# 100

# lanbda表示式

fun2 =

lambda

:200

print

(fun2)

# at 0x00000000021d51e0>

print

(fun2())

# 200

# 計算a+b

defadd

(a, b)

:return a+b

result = add(1,

2)print

(result)

# 3# lambda實現

fun1 =

lambda a, b :a+b

print

(fun1(1,

3))# 4

fn1 =

lambda

:100

print

(fn1())

//100

fn1 =

lambda a: a

print

(fn1(

'hello world!'))

//hello world!

fn1 =

lambda a, b, c=

100: a+b+c

print

(fn1(10,

20))//

130

預設引數寫了就覆蓋,不寫就用預設的值

fn1 = lamdba *args: args

print

(fn1(10,

20,30)

)//(10

,20,30

)

返回值是乙個元組

fn1 =

lambda

**kwargs:kwargs

print

(fn1(name=

'pthon'

, age=20)

)//

返回的是乙個字典

fn1 =

lambda a, b: a if a > b else b

print

(fn1(

1000

,500))

//1000

students =[,

,]# 按name的值公升序排序

students.sort(key=

lambda x: x[

'name'])

print

(students)

# 按name的值降序排序

students.sort(key=

lambda x: x[

'name'

], reverse=

true

)print

(students)

# 按age的值公升序排序

students.sort(key=

lambda x: x[

'age'])

print

(students)

執行結果

把函式作為引數傳入,這樣的函式稱為高階函式。

高階函式就是函式式程式設計的體現。函式式程式設計就是指這種高度抽象的程式設計正規化

abs(num):對數字求絕對值的計算

.round(num):可以完成對數字的四捨五入的計算

可以把內建函式當作引數傳入,abs和round隨意

def

sum_num

(a, b, f)

:return f(a)

+f(b)

result = sum_num(-1

,-2,

abs)

# 傳入函式時,不要加上小括號,那代表執行

print

(result)

#3

**較為簡潔,靈活性更高

函式式程式設計大量使用函式,減少**的重複,因此程式比較短,開發速度較快

map(function, list),將傳入的函式變數function作用到lst變數的每個元素中,並將結果組成新的列表(python)或迭代器(python3)返回;

示例:

# map函式是把傳入的函式作用到變數上

list1 =[1

,2,3

,4,5

]def

fun1

(x):

return x **

2result =

map(fun1, list1)

# 變數型別是map --

print

(result)

# print

(type

(result))#

print

(list

(result)

)# [1, 4, 9, 16, 25]

reduce(func, lst),其中必須要有兩個引數,每次fun計算的結果繼續和序列的下乙個y元素做累積計算。

reduce傳入的引數必須接收兩個引數

import functools 匯入模組

import functools

# 使用reduce函式,需要先導入模組functools,

# 作用是把函式計算的結果與下一次計算的結果相加

list1 =[1

,2,3

,4,5

]def

func

(a, b)

:return a+b

result = functools.

reduce

(func, list1)

print

(result)

# 15

filter(fuc,list)函式用於過濾序列,過濾不符合條件的元素,返回乙個filter物件,若想轉換為列表物件,就用list()l來轉換

# filter函式,用於過濾資料,所以傳入的函式,最好返回條件

# 返回乙個filter型別物件

list1 =[1

,2,3

,4,5

,6,7

,8,9

,10]def

fun(x)

:return x %2==

0result =

filter

(fun, list1)

print

(result)

# print

(list

(result)

)# [2, 4, 6, 8, 10]

Lambda表示式和Lambda表示式樹

原版來自 linq學習筆記之二 lambda表示式和lambda表示式樹 lambda 表示式 lambda expressions 是linq實現的另一特性。lambda表示式的作用就是使用使用函式式語法,將方法實現關聯到委託例項。在使用查詢表示式 query expressions 時,查詢表示...

高階函式 lambda表示式

2.6 map 第乙個引數傳入乙個函式,第二個引數為乙個可迭代物件 li 1 1,3,5,7 def funca x return x x m1 map funca,li 1 print type m1 print m1 2.6 reduce 第乙個引數傳入乙個函式,第二個引數 可以迭代物件 第三個...

lambda表示式 lambda表示式

1.概述 c 11 中的 lambda 表示式用於定義並建立匿名的函式物件,以簡化程式設計工作。lambda 的語法形式如下 函式物件引數 操作符過載函式引數 mutable 或 exception 宣告 返回值型別可以看到,lambda 主要分為五個部分 函式物件引數 操作符過載函式引數 muta...