PYTHON專題:5-函數(shù)和代碼復(fù)用

函數(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ù)碼管


七段數(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的步長輸出

????????????用遞歸方法

字符串反轉(zhuǎn)

? ? 2)斐波那契數(shù)列

????????F(n)

????????????1 , n=1

????????????1 , n=2

????????????F(n-1) + F(n-2) , otherwise

斐波那契數(shù)列

? ? 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)角度

????修改繪制科赫雪花的基本框架圖形

分型幾何千千萬萬

????康托爾集、謝爾賓斯基三角形、門格海綿

????龍形曲線、空間填充曲線、科赫曲線




Cindy 你們愛嗎
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容