在前面的學習中,其實我們已經接觸到了一些函數,比如:
type() 函數能返回數據的類型
len() 函數能返回數據的長度
print() 函數能在控制台將內容輸出出來
range() 函數能生成整數數列
這些函數都是python的內置函數,我們可以直接調用,后面我們將會接觸到更多的python的內置函數。通過觀察,我們不難發現,函數有以下兩個特點:
- 可以具體完成某個功能
- 可以重復使用
一、python中函數的定義
除了python 內置函數外,我們還可以根據需求自定義函數,函數的定義有以下規則:
- 使用關鍵字def 來向python發出信號,標識你要定義一個函數;
- def 后跟具體的函數名稱,注意,自定義函數的名稱最好不要跟內置函數名稱發生沖突;
- 函數名稱后跟一對圓括號,圓括號內存放調用該函數時需要傳入的參數;
- 在函數體內,我們可以使用 一對 三引號 來定義文檔字符串,這就相當於是給函數加了一段注釋,說明該函數的具體作用;
- 函數一般以return 結束,用來返回值方便調用,如果沒有return語句,則默認返回None;
- 函數遇到return就會終止,即return后面的代碼將不會被執行。
1、函數的語法:

舉一個比較簡單的例子:

2、函數的調用

二、函數中的參數
1、形式參數和實際參數
- 形式參數:函數定義時候的參數
- 實際參數:函數調用時候的參數
2、函數的位置參數
- 位置參數:形式參數和實際參數要一一按照順序對應,不多不少,位置一樣。

關於函數的參數傳遞,我們需要注意如下幾點:
- 調用函數傳遞的參數個數一定要和函數定義的參數個數一致,否則會報錯;
- 注意函數體里面參數的類型,要輸入正確的參數類型,否則會報錯。
3、函數的默認參數
- 在函數定義的時候,給形式參數一個默認值,即為默認參數;
- 在函數定義時,如果有默認值,在調用時如果傳入了實際參數,那么默認參數不會生效,如果沒有傳入實際參數,默認參數會生效。

4、位置參數與默認參數
一個函數有的時候不僅有位置參數,還會有默認參數,如果這兩種參數同時存在的時候,就一定要把默認參數放在位置參數的后面,否則會報錯!!

5、關鍵字參數
- 作用:是相對於位置參數講的,可以提高函數調用時候的可讀性,更加容易理解實際參數的意義;
- 關鍵字的名字===形式參數;
- 關鍵字參數區別位置參數,可以不按照順序進行調用,可以交換順序;
- 關鍵字參數也要放到位置參數的后面。

6、不定長參數
不定長參數包括位置不定長參數和關鍵字不定長參數:
- *args:位置不定長參數;
- *kwargs:關鍵字不定長參數
(1)位置不定長參數:*args
- *args:在函數內部的表現形式:names是一個元組
- *args:可以接收從函數調用的時候多余的位置參數
- *args:加在其他位置參數的后面

(2)關鍵字不定長參數:*kwargs
上面我們講了不定長位置參數,這一節我們來掌握下帶有關鍵字的不定長參數。它與普通的不定長參數的區別就是帶有關鍵字,且必須指定關鍵字,否則識別不了。

三、局部變量和全局變量
1、定義
- 局部變量是在函數內部聲明的變量,只能在該函數調用它,如果試圖在超出范圍的地方調用,程序就會報錯;
- 全局變量是在整個整個py文件中定義的變量,全局范圍內都可以訪問。
2、局部變量和全局變量需要注意的幾個點
- 全局作用域能獲取局部變量嗎??? 不能!!!
- 全局作用域能修改局部變量嗎??不能!!!
- 局部作用域能獲取全局變量嗎??能!!!
- 局部變量能修改全局變量嗎??不能!!!
3、局部作用域修改全局變量的方法
- global 關鍵字是聲明全局變量的關鍵字

返回的結果是:27
