函式
注意哈,這里的所有的概念的原理,其實和很多的其它編程語言是一樣的,只是語法上不一樣
1.概述
- 所謂函式,就是把 具有獨立功能的代碼塊 組織為一個小模塊,在需要的時候 呼叫
- 函式的使用包含兩個步驟:
- 定義函式 —— 封裝 獨立的功能
- 呼叫函式 —— 享受 封裝 的成果
- 函式的作用,在開發程式時,使用函式可以提高撰寫的效率以及代碼的 重用
2.定義函式
定義函式的格式如下:
def 函式名():
函式封裝的代碼
……
def是英文define的縮寫- 函式名稱 應該能夠表達 函式封裝代碼 的功能,方便后續的呼叫
- 函式名稱 的命名應該 符合 識別符號的命名規則
- 可以由 字母、下劃線 和 數字 組成
- 不能以數字開頭
- 不能與關鍵字重名
- 呼叫函式很簡單的,通過
函式名()即可完成對函式的呼叫 - 注意哈,這個也也需要你注意,縮進的代碼塊
代碼實體
name = "老李"
# 解釋器知道這里定義了一個函式
def say_hello():
print("hello 1")
print("hello 2")
print("hello 3")
print(name)
# 只有在呼叫函式時,之前定義的函式才會被執行
# 函式執行完成之后,會重新回到之前的程式中,繼續執行后續的代碼
say_hello()
print(name)
3. 我們有沒有像js中的預處理呢?
-
能否將 函式呼叫 放在 函式定義 的上方?
- 不能!
- 因為在 使用函式名 呼叫函式之前,必須要保證
Python已經知道函式的存在 - 否則控制臺會提示
NameError: name 'say_hello' is not defined(名稱錯誤:say_hello 這個名字沒有被定義)
4. 在Pycharm中除錯
- F8 Step Over 可以單步執行代碼,會把函式呼叫看作是一行代碼直接執行
- F7 Step Into 可以單步執行代碼,如果是函式,會進入函式內部
5. 函式的檔案注釋
- 在開發中,如果希望給函式添加注釋,應該在 定義函式 的下方,使用 連續的三對引號
- 在 連續的三對引號 之間撰寫對函式的說明文字
- 在 函式呼叫 位置,使用快捷鍵
CTRL + Q可以查看函式的說明資訊
注意:因為 函式體相對比較獨立,函式定義的上方,應該和其他代碼(包括注釋)保留 兩個空行
6. 函式的引數
與js中類似,我們來看一段代碼
def sum_2_num(num1, num2):
result = num1 + num2
print("%d + %d = %d" % (num1, num2, result))
sum_2_num(50, 20)
## num1,num2 是形參,50.20是實參
7. 函式的回傳值
- 在程式開發中,有時候,會希望 一個函式執行結束后,告訴呼叫者一個結果,以便呼叫者針對具體的結果做后續的處理
- 回傳值 是函式 完成作業后,最后 給呼叫者的 一個結果
- 在函式中使用
return關鍵字可以回傳結果 - 呼叫函式一方,可以 使用變數 來 接收 函式的回傳結果
注意:
return表示回傳,后續的代碼都不會被執行
代碼實體:
def sum_2_num(num1, num2):
"""對兩個數字的求和"""
return num1 + num2
# 呼叫函式,并使用 result 變數接收計算結果
result = sum_2_num(10, 20)
print("計算結果是 %d" % result)
8.函式嵌套
所謂的函式嵌嵌套指的是一個函式里面還要一個函式
- 一個函式里面 又呼叫 了 另外一個函式,這就是 函式嵌套呼叫
- 如果函式
test2中,呼叫了另外一個函式test1- 那么執行到呼叫
test1函式時,會先把函式test1中的任務都執行完 - 才會回到
test2中呼叫函式test1的位置,繼續執行后續的代碼
- 那么執行到呼叫
def test1():
print("*" * 50)
print("test 1")
print("*" * 50)
def test2():
print("-" * 50)
print("test 2")
test1()
print("-" * 50)
test2()
我們來看一個更好玩的示例代碼
def print_line(char, times):
print(char * times)
def print_lines(char, times):
row = 0
while row < 5:
print_line(char, times)
row += 1
print_lines("s",10)
9 使用模塊中的函式
模塊是 Python 程式架構的一個核心概念
- 模塊 就好比是 工具包,要想使用這個工具包中的工具,就需要 匯入 import 這個模塊
- 每一個以擴展名
py結尾的Python源代碼檔案都是一個 模塊 - 在模塊中定義的 全域變數 、 函式 都是模塊能夠提供給外界直接使用的工具
9.1 第一個模塊體驗
步驟
- 新建
hm_10_分隔線模塊.py- 復制
hm_09_列印多條分隔線.py中的內容,最后一行print代碼除外 - 增加一個字串變數
- 復制
name = "黑馬程式員"
- 新建
hm_10_體驗模塊.py檔案,并且撰寫以下代碼:
import hm_10_分隔線模塊
hm_10_分隔線模塊.print_line("-", 80)
print(hm_10_分隔線模塊.name)
體驗小結
- 可以 在一個 Python 檔案 中 定義 變數 或者 函式
- 然后在 另外一個檔案中 使用
import匯入這個模塊 - 匯入之后,就可以使用
模塊名.變數/模塊名.函式的方式,使用這個模塊中定義的變數或者函式
模塊可以讓 曾經撰寫過的代碼 方便的被 復用!
9.2 模塊名也是一個識別符號
- 標示符可以由 字母、下劃線 和 數字 組成
- 不能以數字開頭
- 不能與關鍵字重名
注意:如果在給 Python 檔案起名時,以數字開頭 是無法在
PyCharm中通過匯入這個模塊的
9.3 Pyc 檔案(了解)
C是compiled編譯過 的意思
操作步驟
- 瀏覽程式目錄會發現一個
__pycache__的目錄 - 目錄下會有一個
hm_10_分隔線模塊.cpython-35.pyc檔案,cpython-35表示Python解釋器的版本 - 這個
pyc檔案是由 Python 解釋器將 模塊的原始碼 轉換為 位元組碼Python這樣保存 位元組碼 是作為一種啟動 速度的優化
位元組碼
-
Python在解釋源程式時是分成兩個步驟的- 首先處理源代碼,編譯 生成一個二進制 位元組碼
- 再對 位元組碼 進行處理,才會生成 CPU 能夠識別的 機器碼
-
有了模塊的位元組碼檔案之后,下一次運行程式時,如果在 上次保存位元組碼之后 沒有修改過源代碼,Python 將會加載 .pyc 檔案并跳過編譯這個步驟
-
當
Python重編譯時,它會自動檢查源檔案和位元組碼檔案的時間戳 -
如果你又修改了源代碼,下次程式運行時,位元組碼將自動重新創建
提示:有關模塊以及模塊的其他匯入方式,后續課程還會逐漸展開!
模塊是 Python 程式架構的一個核心概念
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/184118.html
標籤:Python
下一篇:Python——一些特殊的變數
