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

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