函數(shù)的定義和使用
函數(shù)的理解與定義
? ? 1)理解
????????函數(shù)是一段具有特定功能的、可重用的語句組;是一種功能的抽象,表達特定功能
????????兩個作用:降低編程難度 和 代碼復(fù)用
? ? 2)定義
????????def <函數(shù)名>(<一個或多個參數(shù)>):
????????????<函數(shù)體>
????????????return <返回值>
函數(shù)的使用及調(diào)用過程
? ? 1)調(diào)用時要給出實際參數(shù)
? ? 2)實際參數(shù)替換定義中的參數(shù)
? ? 3)函數(shù)調(diào)用后得到返回值
函數(shù)的參數(shù)傳遞
? ? 1)n的階乘:?n!=1×2×3×...×n
? ? 2)函數(shù)可以有參數(shù),也可以沒有,但必須保留括號
? ? 3)可以為某些參數(shù)提供默認值,構(gòu)成可選參數(shù),可選參數(shù)放在必選參數(shù)后面
????????def fact(n, m=1)
? ? 4)函數(shù)定義時可以設(shè)計可變數(shù)量參數(shù),既不確定參數(shù)總數(shù)量
????????def <函數(shù)名>(<參數(shù)>, *b)
????????????<函數(shù)體>
????????????return <返回值>
? ? 5)函數(shù)調(diào)用時,參數(shù)可以按照位置或名稱方式傳遞
函數(shù)的返回值
? ? 1)return保留字用來返回傳遞返回值
? ? 2)函數(shù)可以有返回值,也可以沒有,可以有return,也可以沒有
? ? 3)return可以傳遞0個返回值,也可以傳遞多個返回值
? ? 4)用元組方式返回多個值
局部變量和全局變量
? ? 1)程序:全局變量,函數(shù):局部變量
? ? 2)規(guī)則1:局部變量和全局變量是不同變量
????????局部變量是函數(shù)內(nèi)部的占位符,與全部變量可能重名但不同
????????函數(shù)運算結(jié)束后,局部變量被釋放
????????可以使用global保留字在函數(shù)內(nèi)部使用全局變量
????????在函數(shù)中g(shù)lobal s :聲明此處s是全局變量s
? ? 3)規(guī)則2:局部變量為組合數(shù)據(jù)類型且未創(chuàng)建,等同于全局變量
????????如果一個組合數(shù)據(jù)類型,在函數(shù)中被真實創(chuàng)建了,那就是這個函數(shù)的局部變量
lambda函數(shù)
? ? 1)lambda函數(shù)是一種匿名函數(shù),即沒有名字的函數(shù)
? ? 2)使用lambda保留字定義,函數(shù)名是返回結(jié)果
? ? 3)lambda函數(shù)用于定義簡單的,能夠在一行內(nèi)表示的函數(shù)
????????<函數(shù)名> = lambda <參數(shù)>: <表達式>
????????f = lambda x, y : x+y
? ? 4)lambda函數(shù)主要用作一些特定函數(shù)或方法的參數(shù)
實例七:七段數(shù)碼管繪制
用python繪制帶有七段數(shù)碼管風格的時間
? ? 1)基本思路
? ? ? ? a)繪制單個數(shù)字對應(yīng)的數(shù)碼管
????????????七段數(shù)碼管由7個基本線條組成
????????????七段數(shù)碼管可以有固定向右的順序
? ? ? ? b)獲得一串數(shù)字,分別繪制對應(yīng)的數(shù)碼管
????????????不同數(shù)字顯示不同的線條
? ? ? ? c)獲得當前系統(tǒng)時間,繪制對應(yīng)的數(shù)碼管
????????????使用time庫獲得時間
????????????增加年月日標志
????????????年月日顏色不同
舉一反三
????模塊化思維:確定模塊接口,封裝功能
????規(guī)則化思維:抽象過程為規(guī)則,計算機自動執(zhí)行
????化繁為簡:將大功能變?yōu)樾」δ芙M合,分而治之
應(yīng)用問題擴展
????繪制帶小數(shù)點的七段數(shù)碼管
????帶刷新時間的倒計時效果
七段數(shù)碼管

代碼復(fù)用與函數(shù)遞歸
代碼復(fù)用與模塊化設(shè)計
? ? 1)把代碼當成資源進行抽象
????????代碼資源化:程序代碼是一種用來表達計算的“資源”
????????代碼抽象化:使用函數(shù)等方法對代碼賦予更高級別的定義
????????代碼復(fù)用:同一代碼在需要時可以被重復(fù)使用
????2)函數(shù)和對象 是代碼復(fù)用的兩種主要形式
???????函數(shù):將代碼命名在代碼層面建立了初步抽象
????????對象:屬性和方法,在函數(shù)之上,進一步進行抽象
? ? 3)分而治之
????????通過函數(shù)或?qū)ο蠓庋b將程序劃分為模塊及模塊間的表達
????????具體包括:主程序、子程序和子程序之間的關(guān)系
? ? 4)模塊設(shè)計的兩個基本概念
????????緊耦合:兩個部分的交流很多,無法獨立存在
????????松耦合:兩個部分的交流很少,可以獨立存在
????????模塊內(nèi)部緊耦合,模塊之間松耦合
函數(shù)遞歸的理解
? ? 1)調(diào)用函數(shù)自身的方式就是遞歸
? ? 2)兩個關(guān)鍵
????????鏈條:計算過程中存在遞歸鏈條
????????基例:存在一個或多個不需再次遞歸的基例
? ? 3)遞歸的定義
????????類似數(shù)學(xué)歸納法
????????????證明當n取第一個值n0時命題成立
????????????假設(shè)當nk時命題成立,證明當n=nk+1時命題成立
函數(shù)遞歸的調(diào)用過程
????遞歸的實現(xiàn)
????????函數(shù)+分支語句
????????????遞歸本身是一個函數(shù),需要函數(shù)定義方式描述
????????????函數(shù)內(nèi)部,采用分支語句對輸入?yún)?shù)進行判斷
????????????基例和鏈條,分別編寫對應(yīng)代碼
函數(shù)遞歸實例解析
? ? 1)字符串反轉(zhuǎn)
????????????s[::-1]?#從最開始到最后采用-1的步長輸出
????????????用遞歸方法

? ? 2)斐波那契數(shù)列
????????F(n)
????????????1 , n=1
????????????1 , n=2
????????????F(n-1) + F(n-2) , otherwise

? ? 3)漢諾塔問題
????????輸出兩個參數(shù)
????????????給定數(shù)量的圓盤從最左側(cè)搬到最右測需要多少步驟
????????????該怎么搬運
????????進一步抽象,三個柱子A,BC
????????????初始狀態(tài),所有盤子都在A,最終目的搬到C

模塊4:PyInstaller庫的使用
概述:將.py源代碼轉(zhuǎn)換成無需源代碼的可執(zhí)行文件
? ? 1)是一個第三方庫
? ? 2)可以使用pip工具安裝
????????(cmd命令行)pip install pyinstaller
? ? 3)簡單使用
????????(cmd命令行)pyinstaller -F <文件名.py>
常用參數(shù)
????-h:查看幫助
????--clean:清理打包過程中的臨時文件
????-D,--onedir:默認值,生成dist文件夾
????-F, --onefile:在dist文件夾只生成獨立的打包文件
????-i <圖標文件名.icon> :指定打包程序使用的圖標文件
實例8:科赫雪花小包裹
分形幾何:是一種迭代的幾何圖形,廣泛存在于自然界中。
????科赫曲線,也叫雪花曲線
科赫雪花繪制
? ? 1)用Python繪制科赫曲線
????????去3/1長,繪制成60度凸起
????????不停重復(fù)上一步的過程,形成科赫曲線
? ? 2)繪制n階科赫曲線線段
????????遞歸思想:函數(shù)+分支
????????遞歸鏈條:線段的組合
????????遞歸基例:初識線段
科赫雪花的繪制

打包科赫雪花小程序
????pyinstaller
舉一反三
????修改分形幾何的繪制階數(shù)
????修改科赫曲線的基本定義及旋轉(zhuǎn)角度
????修改繪制科赫雪花的基本框架圖形
分型幾何千千萬萬
????康托爾集、謝爾賓斯基三角形、門格海綿
????龍形曲線、空間填充曲線、科赫曲線
