Python基礎第十節 函式下

2021-10-22 23:15:17 字數 3040 閱讀 3862

遞迴是解決問題的一種方式,它的整體思想,是將乙個大問題分解為乙個個的小問題,直到問題無法分解時,在去解決問題

遞迴式函式有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...