闭包、装饰器与递归_月隐学python第12课
目錄
?
1. 閉包
2 裝飾器(重點,難點)
2.1 裝飾器寫法
2.2使?@語法糖將裝飾器應?到指定函數上,簡化使?
2.3 帶有不定?參數的裝飾器
2.4 多個裝飾器作?在?個函數上(不重要)
3.遞歸函數(不是重點)
3.1 嵌套調?
3.2 遞歸調?
3.3 遞歸調?過程
3.4 遞歸適?條件
作業
用裝飾器補充:將信息保存到文件?
1. 閉包
我們可以在?個函數中再定義?個函數,在函數內部定義的函數稱之為內部函數,內部函數只能在函數內使?,不會污染外部空間。定義內部函數的函數稱之為外部函數,這樣的定義構成函數的嵌套
- 內部函數只能在外部函數?調?,外界?法直接調?內部函數
在?個外部函數中定義了?個內部函數,內部函數?引?了外部函數的變量,并且外部函數的返回值是內函數的引?。這樣內部函數和其執?所需的環境變量就構成了?個閉包。
?般情況下,如果?個函數結束,函數的內部所有東?都會釋放掉,局部變量都會消失。但是閉包是?種特殊情況,如果外函數在結束的時候發現有??的局部變量將來會在內部函數中?到,就把這個局部變量綁定給了內部函數,然后??再結束。
在閉包中?法直接修改外部變量x的值
在python3中可以通過nonlocal關鍵字聲明?下x,表示這個變量不是局部變量,需要向上?層變量空間找這個變量。
2 裝飾器(重點,難點)
軟件開發中有?條?常重要的規則就是:對修改封閉,對擴展開放。 對于?個現有的函數,如果想要增強此函數的功能,但是不允許修改此函數源代碼的時候,使?裝飾器來解決這個問題
- 本質:就是?個閉包,還是?個返回函數的?階函數
- 好處:就是在不?修改原函數代碼的前提下給函數增加新的功能
2.1 裝飾器寫法
2.2使?@語法糖將裝飾器應?到指定函數上,簡化使?
2.3 帶有不定?參數的裝飾器
同?個裝飾器可以應?于多個函數
2.4 多個裝飾器作?在?個函數上(不重要)
3.遞歸函數(不是重點)
3.1 嵌套調?
在函數A中可以調?函數B,在函數B中可以調?函數C,這種調??式稱為函數的嵌套調?。
3.2 遞歸調?
?個函數直接或間接的調???則稱為遞歸調?。
3.3 遞歸調?過程
遞歸調?可分解為兩個過程,正向遞歸調?和逆向遞歸返回。
3.4 遞歸適?條件
如果?個問題規模縮減后,求解?式和原來?樣,?規模問題解決后導致問題的最終解決,則可適?遞歸
- 形式是遞歸的 階乘和斐波那契數列
- 結構是遞歸的 列表遍歷
- 解法是遞歸的 漢諾塔
?
遞歸的寫法:
- ?個遞歸程序必須包含兩部分:
? ? ?1) 遞歸終?條件
? ? ?2) 遞歸調???
作業
1.有五個學?坐在?起,問第五個?多少歲?答?第四個?2歲,第四個?說它?第三個??2歲, ,...第?個?說他10歲。請寫?個遞歸函數計算第5個學?多少歲(遞歸實現)
2.某班期末考試科?為數學和計算機,有最多不超過30?參加考試。學?的信息包括學號、姓名。考試后要求:
(1)計算每個學?的總分和平均分;
(2)按總分成績由?到低排出成績的名次;
(3)打印出名次表,表格內包括學?姓名、學號、各科分數、總分和平均分;
(4)任意輸??個學號,能夠查找出該學?在班級中的排名及其考試分數
編寫要求:
(1) 要對?戶輸?進?驗證,如果輸?的不是0-4顯示錯誤,然后繼續輸?
(2) 要能夠連續不斷的進?選擇
(3) 每?項功能都要封裝函數完成,函數單獨放到?個模塊中
(4) 菜單及其?戶選擇的處理放到主模塊中。
(5) 學?數據保存到?件
用裝飾器補充:將信息保存到文件
總結
以上是生活随笔為你收集整理的闭包、装饰器与递归_月隐学python第12课的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 函数进阶_月隐学python第11课
- 下一篇: websocket python爬虫_p