函數基礎
目標
- 函數的快速體驗
- 函數的基本使用
- 函數的參數
- 函數的返回值
- 函數的嵌套調用
- 在模塊中定義函數
01. 函數的快速體驗
- 所謂 函數 ,就是把 具有獨立功能的代碼塊 組織為一個小模塊,在需要的時候 調用
-
函數的使用包含兩個步驟:
1.定義函數 —— 封裝 獨立的功能
2.調用函數 —— 享受 封裝 的成果 - 函數的作用 ,在開發程序時,使用函數可以提高編寫的效率以及代碼的 重用
02. 函數基本使用
2.1 函數的定義
定義函數的格式如下:
def 函數名():
函數封裝的代碼
……
- def 是英文 define 的縮寫
- 函數名稱 應該能夠表達 函數封裝代碼 的功能,方便后續的調用
-
函數名稱
的命名應該
符合 標識符的命名規則
- 可以由 字母、下劃線 和 數字 組成
- 不能以數字開頭
- 不能與關鍵字重名
2.2 函數調用
調用函數很簡單的,通過 函數名() 即可完成對函數的調用
2.3 第一個函數演練
需求
- 1.編寫一個打招呼 say_hello 的函數,封裝三行打招呼的代碼
- 2.在函數下方調用打招呼的代碼
name = "hello"
# 解釋器知道這里定義了一個函數
def say_hello():
print("hello 1")
print("hello 2")
print("hello 3")
print(name)
# 只有在調用函數時,之前定義的函數才會被執行
# 函數執行完成之后,會重新回到之前的程序中,繼續執行后續的代碼
say_hello()
print(name)
- 定義好函數之后,只表示這個函數封裝了一段代碼而已
- 如果不主動調用函數,函數是不會主動執行的
思考
-
能否將 函數調用 放在 函數定義 的上方?
- 不能!
- 因為在 使用函數名 調用函數之前,必須要保證 Python 已經知道函數的存在
- 否則控制臺會提示 NameError: name 'say_hello' is not defined (名稱錯誤:say_hello 這個名字沒有被定義)
2.4 PyCharm 的調試工具
- F8 Step Over 可以單步執行代碼,會把函數調用看作是一行代碼直接執行
- F7 Step Into 可以單步執行代碼,如果是函數,會進入函數內部
2.5 函數的文檔注釋
- 在開發中,如果希望給函數添加注釋,應該在 定義函數 的下方,使用 連續的三對引號
- 在 連續的三對引號 之間編寫對函數的說明文字
-
在
函數調用
位置,使用快捷鍵 CTRL + Q 可以查看函數的說明信息
注意:因為 函數體相對比較獨立 ,函數定義的上方應該和其他代碼(包括注釋)保留 兩個空行
03. 函數的參數
演練需求
- 開發一個 sum_2_num 的函數
-
函數能夠實現 兩個數字的求和 功能
演練代碼如下:
def sum_2_num():
num1 = 10
num2 = 20
result = num1 + num2
print("%d + %d = %d" % (num1, num2, result))
sum_2_num()
思考一下存在什么問題
函數只能處理 **固定數值** 的相加
如何解決?
- 如果能夠把需要計算的數字,在調用函數時,傳遞到函數內部就好了!
3.1 函數參數的使用
- 在函數名的后面的小括號內部填寫 參數
- 多個參數之間使用 , 分隔
def sum_2_num(num1, num2):
result = num1 + num2
print("%d + %d = %d" % (num1, num2, result))
sum_2_num(50, 20)
3.2 參數的作用
- 函數 ,把 具有獨立功能的代碼塊 組織為一個小模塊,在需要的時候 調用
-
函數的參數
,增加函數的
通用性
,針對
相同的數據處理邏輯
,能夠
適應更多的數據
- 在函數 內部,把參數當做 變量 使用,進行需要的數據處理
- 函數調用時,按照函數定義的 參數順序 ,把 希望在函數內部處理的數據,通過參數 傳遞
3.3 形參和實參
- 形參:定義 函數時,小括號中的參數,是用來接收參數用的,在函數內部 作為變量使用
- 實參:調用 函數時,小括號中的參數,是用來把數據傳遞到 函 數內部 用的
04. 函數的返回值
- 在程序開發中,有時候,會希望 一個函數執行結束后,告訴調用者一個結果 ,以便調用者針對具體的結果做后續的處理
- 返回值 是函數 完成工作 后, 最后 給調用者的 一個結果
- 在函數中使用 return 關鍵字可以返回結果
-
調用函數一方,可以
使用變量
來
接收
函數的返回結果
注意: return 表示返回,后續的代碼都不會被執行
def sum_2_num(num1, num2):
"""對兩個數字的求和"""
return num1 + num2
# 調用函數,并使用 result 變量接收計算結果
result = sum_2_num(10, 20)
print("計算結果是 %d" % result)
05. 函數的嵌套調用
- 一個函數里面 又調用 了 另外一個函數 ,這就是 函數嵌套調用
-
如果函數 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()
06. 使用模塊中的函數
模塊是 Python 程序架構的一個核心概念
- 模塊 就好比是 工具包 ,要想使用這個工具包中的工具,就需要 導入 import 這個模塊
- 每一個以擴展名 py 結尾的 Python 源代碼文件都是一個 模塊
- 在模塊中定義的 全局變量 、 函數 都是模塊能夠提供給外界直接使用的工具
6.1 使用模塊
- 可以 在一個 Python 文件 中 定義 變量 或者 函數
- 然后在 另外一個文件中 使用 import 導入這個模塊
-
導入之后,就可以使用 模塊名.變量 / 模塊名.函數 的方式,使用這個模塊中定義的變量或者函數
模塊 可以讓 曾經編寫過的代碼 方便的被 復用!
6.2 模塊名也是一個標識符
- 標示符可以由 字母、下劃線 和 數字 組成
- 不能以數字開頭
- 不能與關鍵字重名
注意:如果在給 Python 文件起名時, 以數字開頭 是無法在 PyCharm 中通過導入這個模塊的
6.3 Pyc 文件(了解)
C 是 compiled 編譯過 的意思
操作步驟
- 瀏覽程序目錄會發現一個 pycache 的目錄
- 目錄下會有一個 file_name.cpython-XX.pyc 文件, cpython-XX 表示Python 解釋器的版本
-
這個 pyc 文件是由 Python 解釋器將
模塊的源碼
轉換為
字節碼
Python 這樣保存 字節碼 是作為一種啟動 速度的優化
字節碼
-
Python 在解釋源程序時是分成兩個步驟的
首先處理源代碼, 編譯 生成一個二進制 字節碼
再對 字節碼 進行處理,才會生成 CPU 能夠識別的 機器碼 - 有了模塊的字節碼文件之后,下一次運行程序時,如果在 上次保存字節碼之后 沒有修改過源代碼,Python 將會加載 .pyc 文件并跳過編譯這個步驟
-
當 Python 重編譯時,它會自動檢查源文件和字節碼文件的時間戳
如果你又修改了源代碼,下次程序運行時,字節碼將自動重新創建
模塊是 Python 程序架構的一個核心概念
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
