面向過程:根據業務邏輯從上到下寫壘代碼
函數式:将某功能代碼封裝到函數中,日後便無需重複編寫,僅調用函數即可
函數作用是你的程式有良好的擴充性、複用性。
同樣的功能要是用3次以上的話就建議使用函數。
标注:不能死記,
函數可以了解為一個一個的功能塊,你把一個大的功能拆分成一塊一塊的,用某項功能的時候就去調用某個功能塊即可!
函數可以了解為:樂高積木,給你一塊一塊的,你可以用這些積木塊組成你想要的任何,功能!
函數可以調用函數!主函數的作用就是把函數進行串聯、調用!函數本身是不能自己執行的如果你不調用就永不執行!
一、背景
在學習函數之前,一直遵循:面向過程程式設計,即:根據業務邏輯從上到下實作功能,其往往用一長段代碼來實作指定功能,開發過程中最常見的操作就是粘貼複制,也就是将之前實作的代碼塊複制到現需功能處,如下
上面的代碼是就面向過程的程式設計,但是如果報警多了的話成百的代碼需要添加如何操作呢?複制粘貼那會死人的!在看下下面的代碼:
第二次必然比第一次的重用性和可讀性要好,其實這就是函數式程式設計和面向過程程式設計的差別:
面向過程:更具需求一行一行壘代碼!邏輯亂、并切代碼重複、不易修改重用性差!
面向對象:對函數進行分類和封裝,讓開發“更快更好更強...”
二、函數式程式設計
函數式程式設計最重要的是增強代碼的重用性和可讀性:
函數的定義主要有如下要點:
def:表示函數的關鍵字
函數名:函數的名稱,日後根據函數名調用函數
函數體:函數中進行一系列的邏輯計算,如:發送郵件、計算出 [11,22,38,888,2]中的最大數等...
參數:為函數體提供資料
傳回值:當函數執行完畢後,可以給調用者傳回資料。
1、傳回值
函數是一個功能塊,該功能到底執行成功與否,需要通過傳回值來告知調用者。
2、參數
為什麼要有參數?看下下面的例子:
如果不定義參數,用函數的話:(每個有相同功能的都寫個函數,說好的代碼簡化呢?
使用函數:(代碼明顯少了很多,把重複的内用改為參數調用!)
函數的有三中不同的參數:
普通參數
預設參數
動态參數
普通參數:
但是普通參數有個問題!你在定義參數的時候定義了幾個參數,你在調用的時候必須給他幾個參數否則就報錯!
預設參數:
在你沒有給他指定參數的時候他就會使用預設的參數!
動态參數:
動态參數顧名思義就是可以動态的去擴充函數參數的數量!
例子:1 (多個單個變量,整合成元組)
例子:2(整合為字典變量)
例子:3(整合了*args,**args)
擴充:發郵件執行個體
import
smtplib
内置函數:(就是python把各個子產品中常用的一些方法給拿出來友善使用)
常用的記住之後,要知道怎麼去查:
看下面的例子:
在看下面的例子:
總結:函數的作用域就是在函數裡定義的變量不能被外面使用!但是外部全局定義的全局變量在函數内是可以使用的。
舉個例子來說:你在房子裡可以看到屋内的東西和房子歪的東西,但是你在房子外面就隻能看到房子外的東西不能看到房子内的東西!
原因防止在函數調用的時候防止變量沖突!
問題:我在外面定義的全局變量在函數内可以改他嗎? #看下面的例子:
但我就是想在函數裡改變全局變量是否可以呢?可以!
return 一般寫在函數的末尾,一般你想看函數的執行結果!然後判斷後面的程式。看下面的例子
操作檔案時,一般需要經曆如下步驟:
打開檔案
操作檔案
一、打開檔案
打開檔案時,需要指定檔案路徑和以何等方式打開檔案,打開後,即可擷取該檔案句柄,日後通過此檔案句柄對該檔案操作。
打開檔案的模式有:
r,隻讀模式(預設)。
w,隻寫模式。【不可讀;不存在則建立;存在則删除内容;】
a,追加模式。【可讀; 不存在則建立;存在則隻追加内容;】
"+" 表示可以同時讀寫某個檔案
r+,可讀寫檔案。【可讀;可寫;可追加】
w+,無意義
a+,同a
"u"表示在讀取時,可以将 \r \n \r\n自動轉換成 \n (與 r 或 r+ 模式同使用)
ru
r+u
"b"表示處理二進制檔案(如:ftp發送上傳iso鏡像檔案,linux可忽略,windows處理二進制檔案時需标注)
rb
wb
ab
二、操作
三、with方法
為了避免打開檔案後忘記關閉,可以通過管理上下文,即:(建議使用此方法打開檔案)
如此方式,當with代碼塊執行完畢時,内部會自動關閉并釋放檔案資源。
在python 2.7 後,with又支援同時對多個檔案的上下文進行管理,即:
例子:比如要修改nginx.conf 檔案然後還的復原怎麼做?