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