Python編程快速上手-讓繁瑣的工作自動化(函數)

Python編程快速上手-讓繁瑣的工作自動化(函數)

在前面已經熟悉了print()/input()/len()這些內建函數。這些學習如果自己定義自己的函數。"函數"就像一個程序內的小程序。先看一個函數的例子:

Python編程快速上手-讓繁瑣的工作自動化(函數)

初識函數

1. def語句和參數

第一行def語句,它定義了一個名為hello()的函數,def語句之後的代碼塊為函數體。這段代碼在函數調用時執行,而不是在函數第一次定義時執行。

如果調用print()和len(),可以傳入一些值在括號之間,在這裡稱為參數,也可以自己定義接收參數的函數。

Python編程快速上手-讓繁瑣的工作自動化(函數)

定義帶參數的函數

2. 返回值和return語句

如果調用len()函數,並傳入'hello'這樣的參數,函數調用就會求值為整數5。函數調用值的結果稱為函數的返回值。我們自己定義函數的時候也可以用return返回值。

Python編程快速上手-讓繁瑣的工作自動化(函數)

函數返回值

3.None值

在Python中有一個值為None,它表示沒有值。None是NoneType數據類型,該數據類型只有一個值,那就None。前面學的布爾型有兩個值True和False。

如果函數定義中沒有返回值,它其實默認是返回None。就像while和for循環在代碼塊的結尾都隱式的以continue結尾。

4.局部和全局作用域

在任何語言中都有這樣一個概念。在函數內賦值的變量稱為局部變量,在所有函數外賦值的變量稱為全局變量。

局部變量不能再全局作用域內使用

局部作用域不能使用其他局部作用域內的

全局變量可以在局部作用域中讀取

名稱相同的局部變量和全局變量

在局部作用域內,名稱相同的局部變量會使全局變量不可見,除非使用global語句

5.global語句

如果需要在函數內修改全局變量,就使用global語句。如果在函數頂部有global eggs這樣的代碼就是告訴python,"在這個函數里,eggs指的是全局變量,所以不要用這個名字創建局部變量。"

4條法則來區一個變量是處於局部變量還是全局變量:

1. 如果變量在全局作用域中使用(即所有函數之外),它總是全局變量

2. 如果在一個函數中,有針對該變量的global語句,它就是全局變量

3. 否則,如果變量用於函數中的賦值語句,它就是局部變量

4. 但是,如果該變量沒有用在賦值語句中,它就是全局變量

Python編程快速上手-讓繁瑣的工作自動化(函數)

局部變量和全局變量

6.異常處理

到目前為止,如果程序遇到錯誤,或"異常",意味著整個程序崩潰。真實的項目程序中不會希望發送程序崩潰,儘管可能也會。相反我們希望能檢測錯誤,並處理它們。

比如下面的程序有一個除0錯誤。

Python編程快速上手-讓繁瑣的工作自動化(函數)

異常處理

可以看到這裡有一個ZeroDivisionError錯誤,有是由於除0導致的。

錯誤是可以有try和except語句來處理的。那些可能會發生錯誤的句子可以被放在try子句中。如果發生錯誤,程序就執行接下來的except子句。重寫上面的函數:

Python編程快速上手-讓繁瑣的工作自動化(函數)

捕獲異常

程序沒有崩潰,得到了相應的錯誤提示信息。

7.一個小程序:猜數字

到目前都是學了一些基礎知識,基本的概念介紹。現在讓我們來綜合所學知識,編寫一個完整的程序。展示一個簡單的猜數字遊戲。運行程序,輸出如下:

Python編程快速上手-讓繁瑣的工作自動化(函數)

猜數字

讓我再看看代碼:

Python編程快速上手-讓繁瑣的工作自動化(函數)

猜數字遊戲代碼

8.小結

函數是將代碼邏輯分組的主要方式。是很好的工具幫你組織代碼。隨著你獲取更多的編程經驗,常常會發現自己在為代碼"消除重複",即去除一些重複或複製代碼。消除重複能夠使程序更短、更易讀、更容易更新。

也學習瞭如果用try/except防止程序崩潰,讓程序面對錯誤時更靈活。

下節學習一個重要的數據類型list。


分享到:


相關文章: