遞迴是解決問題的一種方式,它的整體思想,是將乙個大問題分解為乙個個的小問題,直到問題無法分解時,在去解決問題遞迴式函式有2個條件
基線條件 問題可以被分解為最小問題,當滿足基線條件時,遞迴就不執行了
遞迴條件 可以將問題繼續分解的條件
判斷是否為回文字元(回文字元如123454321,從前讀和從後讀是一樣的)
deffun
(s):
iflen
(s)<2:
return
true
elif s[0]
!= s[-1
]:return
false
return fun(s[1:
-1])
print
(fun(
'12345678987654321'))
輸出:true
總結:遞迴函式是一種思想,是將複雜的問題簡單化的方法,就像將一顆洋蔥一層層剝開,得到需要的答案。把函式作為引數傳入,或者將函式作為返回值返回,這樣的函式稱為高階函式,高階函式是函式式程式設計的體現。函式式程式設計就是指這種高度抽象的程式設計正規化。
def
fun2
(i):
if i %2==
0:return
true
deffun
(fn)
: list1 =
for i in
range(21
):if fn(i)
:return list1
print
(fun(fun2)
)輸出:[0,
2,4,
6,8,
10,12,
14,16,
18,20]
在python中,不通過def來宣告函式名字,而是通過lambda關鍵字來定義的函式稱為匿名函式。
lambda函式能接收任何數量(可以是0個)的引數,但只能返回乙個表示式的值,lambda函式是乙個函式物件,直接賦值給乙個變數,這個變數就成了乙個函式物件。
語法:lambda 引數:表示式
def
add(a,b)
:print
(a+b)
add(1,
2)輸出:3
x =lambda a,b:a+b
print
(x(1,2
))輸出:3
總結:上述兩個函式的作用是一樣的,但匿名函式更加簡單,更好與其他函式配合使用,且不用取名
閉包的好處行成閉包的條件
#定義乙個外部函式
deffunc_out
(num1)
:#定義乙個外部函式
deffunc_inner
(num2)
:#內部函式使用了外部函式的變數num1
result = num1 + num2
print
('結果是'
,result)
#外部函式返回了內部,這裡返回的內部函式就是閉包
return func_inner
#建立閉包例項
f = func_out(1)
#執行閉包f(2
)# 這裡等價於func_out(1)(2) => func_inner(2)
輸出;3
我們可以直接通過修改函式中的**來完成需求,但是會產生以下一些問題也就是說在不改變函式中的**,以及呼叫方式下,對程式進行功能擴充套件,這就是裝飾器
#新增乙個登陸驗證的功能
defdecorator
(func)
:def
inner()
:#在內部函式裡面對已有函式進行裝飾
print
('已新增登陸驗證'
) func(
)return inner
defcomment()
:print()
#呼叫裝飾器對已有函式進行封裝
comment = decorator(comment)
#不改變呼叫方式
comment(
)輸出:已新增登陸驗證
#新增乙個登陸驗證的功能
defdecorator
(func)
:#如果閉包函式的引數有且只有乙個並且是函式型別,那麼這個函式被稱為閉包函式
definner()
:#在內部函式裡面對已有函式進行裝飾
print
('已新增登陸驗證'
) func(
)return inner
#裝飾器的語法糖寫法:@裝飾器名稱,裝飾器的語法糖寫法就是在裝飾以後函式的時候寫法更加簡單
@decorator # 這裡就等價於comment = decorator(comment) 裝飾器語法糖對該**進行了封裝
defcomment()
:print()
#不改變呼叫方式
comment(
)
猴子吃桃問題(遞迴):
猴子第一天摘下若干個桃子,當即吃了一半,還不癮,又多吃了乙個。第二天早上又將剩下的桃子吃掉一半,又多吃了乙個。以後每天早上都吃了前一天剩的一半零乙個。到第10天早上想再吃時,見只剩下乙個桃子了,求第一天共摘了多少桃子?
def
fun(n)
:if n ==1:
return
1else
:return
(fun(n-1)
+1)*
2print
(fun(10)
)
第十節 蜂鳴器
第十節 蜂鳴器 蜂鳴器是一種常用的報警裝置,常用的蜂鳴器有無源和有源兩種型別,無源蜂鳴器需要用一定頻率的方波驅動,從而發出不同頻率的聲音。而有源蜂鳴器只需要通電就會發出固定頻率的聲音,mt254xboard開發板上的蜂鳴器用的是無源蜂鳴器,因此我們需要用一定頻率的方波來驅動。硬體驅動方面,我們這裡使...
Python第十節 傳參
一.變數和變數名 首先說明變數名和變數的一點差異 例如 var 1,2,3 var google 呼叫變數var的時候,既可以得到的是list型別,也可以是字串型別。why?事實上需要分開看 1,2,3 是list型別資料,google 是字串型別的資料。但是變數a是沒有型別之分的,他就是乙個物件的...
第十節 標識列
又稱為自增長列 含義 可以不用手動的插入值,系統提供預設的序列值 特點 不一定與主鍵搭配,但要求是乙個key 乙個表至多乙個標識列 標識列的型別只能是數值型 標識列可以通過 set auto increment 3 設定步長,可以通過手動插入值,設定起始值一 建立表時設定標識列 create tab...