Python 函數(shù)詳解:從基礎(chǔ)語(yǔ)法到高級(jí)使用技巧
函數(shù)是 Python 編程的核心組成部分,它通過(guò)封裝特定功能實(shí)現(xiàn)代碼復(fù)用,讓程序結(jié)構(gòu)更清晰、邏輯更嚴(yán)謹(jǐn)。本文基于實(shí)例代碼,全面講解 Python 函數(shù)的定義、參數(shù)傳遞、變量作用域及類(lèi)型標(biāo)注等知識(shí)點(diǎn),幫助初學(xué)者快速掌握函數(shù)的使用技巧。
一、函數(shù)的基本概念與作用
函數(shù)本質(zhì)是封裝特定功能的代碼塊,如同一個(gè) "黑匣子"—— 輸入?yún)?shù)后,通過(guò)內(nèi)部邏輯處理,最終輸出結(jié)果。其核心價(jià)值在于:
- 代碼復(fù)用:避免重復(fù)編寫(xiě)相同邏輯
- 模塊化:將復(fù)雜問(wèn)題拆解為多個(gè)獨(dú)立功能
- 可維護(hù)性:?jiǎn)我还δ艿男薷牟挥绊懫渌糠?/li>
"""
函數(shù)作用:
封裝一個(gè)特定的功能,相當(dāng)一個(gè)黑匣子
代碼功能復(fù)用
語(yǔ)法:
def 函數(shù)名(形參列表):
函數(shù)體
[return 返回值]
調(diào)用: res=函數(shù)名(實(shí)參列表)
沒(méi)有返回值,不需要接收,如果接收,返回的是None
return作用:返回結(jié)果,跳出函數(shù)
"""二、函數(shù)的定義與調(diào)用
1. 無(wú)參函數(shù)
沒(méi)有參數(shù)的函數(shù),直接執(zhí)行預(yù)設(shè)邏輯:
# 無(wú)參函數(shù)
def test():
print(123456)
# 調(diào)用
test() # 輸出:123456適用于邏輯固定、無(wú)需外部輸入的場(chǎng)景(如打印固定信息)。
2. 帶參函數(shù)
需要接收外部參數(shù)的函數(shù),靈活性更高。以下是計(jì)算aa到bb累加和的示例:
# 帶參函數(shù):計(jì)算aa到bb的總和
def add(aa, bb):
sum = 0
for i in range(aa, bb + 1):
sum += i
print(sum)
# 調(diào)用函數(shù)
a = int(input('請(qǐng)輸入a:')) # 從用戶輸入獲取參數(shù)
b = int(input('請(qǐng)輸入b:'))
add(a, b) # 實(shí)參a、b傳遞給形參aa、bb- 形參:函數(shù)定義時(shí)的
aa、bb(形式參數(shù),僅在函數(shù)內(nèi)部有效) - 實(shí)參:函數(shù)調(diào)用時(shí)的
a、b(實(shí)際參數(shù),將值傳遞給形參)
3. 帶返回值的函數(shù)
通過(guò)return關(guān)鍵字返回處理結(jié)果,調(diào)用者可接收并進(jìn)一步處理:
# 計(jì)算n的階乘(n!)
def jiecheng(n):
cheng = 1
for i in range(1, n + 1):
cheng *= i
return cheng # 返回計(jì)算結(jié)果
# 調(diào)用并接收返回值
res1 = jiecheng(5) # 5! = 120
res2 = jiecheng(10) # 10! = 3628800
print(res1, res2) # 輸出:120 3628800return的雙重作用:返回結(jié)果 + 立即結(jié)束函數(shù)(其后代碼不再執(zhí)行)- 若函數(shù)無(wú)
return,調(diào)用后返回None
4. 函數(shù)嵌套調(diào)用
函數(shù)內(nèi)部可以調(diào)用其他函數(shù),實(shí)現(xiàn)復(fù)雜邏輯的拆解:
# 計(jì)算1! + 2! + ... + m!的總和
def add_cheng(m):
sum = 0
for i in range(1, m + 1):
sum += jiecheng(i) # 嵌套調(diào)用階乘函數(shù)
print(sum)
# 調(diào)用
add_cheng(5) # 1!+2!+3!+4!+5! = 153
add_cheng(10) # 總和為4037913通過(guò)嵌套調(diào)用,將 "求階乘" 和 "求和" 兩個(gè)功能分離,代碼更易理解和維護(hù)。
三、參數(shù)傳遞機(jī)制:值傳遞與引用傳遞
Python 中參數(shù)傳遞的方式取決于數(shù)據(jù)類(lèi)型,分為兩種:
1. 值傳遞(基本數(shù)據(jù)類(lèi)型)
對(duì)于int、float、str等不可變類(lèi)型,傳遞的是值的副本,函數(shù)內(nèi)部修改不影響外部變量:
def test(n):
n = n + 1 # 內(nèi)部修改參數(shù)
print(n) # 輸出:11
a = 10
test(a)
print(a) # 輸出:10(外部變量未變)2. 引用傳遞(復(fù)雜數(shù)據(jù)類(lèi)型)
對(duì)于list、dict、set等可變類(lèi)型,傳遞的是內(nèi)存地址,函數(shù)內(nèi)部修改會(huì)影響外部變量:
def test2(lst):
lst[1] = 66 # 內(nèi)部修改列表元素
print(lst) # 輸出:[1, 66, 3]
ls = [1, 2, 3]
test2(ls)
print(ls[1]) # 輸出:66(外部列表被修改)總結(jié):不可變類(lèi)型傳遞值,可變類(lèi)型傳遞地址,這是 Python 參數(shù)傳遞的核心特性。
四、變量作用域:全局變量與局部變量
變量的作用域指其可訪問(wèn)的范圍,分為:
1. 局部變量
在函數(shù)內(nèi)部定義的變量,僅在函數(shù)內(nèi)部有效:
def test3():
a = 10 # 局部變量(僅test3內(nèi)可訪問(wèn))
print(a) # 輸出:10
test3()
# print(a) # 報(bào)錯(cuò):NameError(外部無(wú)法訪問(wèn))2. 全局變量
在函數(shù)外部定義的變量,可在所有函數(shù)中訪問(wèn)(但修改需聲明):
b = 11 # 全局變量
m = 18 # 全局變量
def test3():
b = 20 # 定義同名局部變量(覆蓋全局變量)
global m # 聲明使用全局變量m
m += 10 # 修改全局變量
print(a, b, m) # 輸出:10 20 28(a是局部變量,b是局部變量,m是全局變量)
test3()
print(b, m) # 輸出:11 28(全局b未變,全局m已修改- 函數(shù)內(nèi)部可直接使用全局變量,但修改全局變量需用
global聲明 - 若局部變量與全局變量同名,函數(shù)內(nèi)部?jī)?yōu)先使用局部變量
五、函數(shù)類(lèi)型標(biāo)注(Type Hints)
Python 3.5 + 支持類(lèi)型標(biāo)注,通過(guò)注釋指定參數(shù)和返回值的類(lèi)型,增強(qiáng)代碼可讀性和可維護(hù)性:
"""
函數(shù)類(lèi)型標(biāo)注:
基本類(lèi)型: int float str bool bytes
復(fù)雜類(lèi)型: from typing import List,Tuple,Dict,Set,Union,Iterable,Sequence,Any,Callable
"""
from typing import List, Union, Callable, Iterable, Sequence
# 標(biāo)注參數(shù)類(lèi)型
def test(a: int, b: float, c: str, d: bool):
print(a, b, c, d)
test(1, 2.5, 'hello', True) # 符合類(lèi)型標(biāo)注的調(diào)用
# 復(fù)雜類(lèi)型標(biāo)注:List[Union[int, float]]表示列表元素可為int或float
def test2(
a: List[Union[int, float]], # 元素為int或float的列表
tt: Callable, # 可調(diào)用對(duì)象(如函數(shù))
c: Union[int, str], # 可為int或str
d: Iterable, # 可迭代對(duì)象(如列表、range)
e: Sequence # 序列對(duì)象(如列表、元組)
):
tt() # 調(diào)用傳入的函數(shù)
print(a, c, d, e)
def active():
print('函數(shù)作為參數(shù)')
test2([1, 2.5, 3], active, 2, [], range(10)) # 符合類(lèi)型標(biāo)注的調(diào)用
# 標(biāo)注返回值類(lèi)型
def test3(a: int, b: float) -> Union[int, float]:
return a + b
print(test3(1, 2.5)) # 輸出:3.5(符合返回值類(lèi)型)注意:類(lèi)型標(biāo)注僅為提示,Python 解釋器不會(huì)強(qiáng)制檢查(需借助第三方工具如mypy驗(yàn)證)。
六、總結(jié)
函數(shù)是 Python 編程的基礎(chǔ)工具,本文講解的核心知識(shí)點(diǎn)包括:
- 函數(shù)的定義與調(diào)用:無(wú)參、帶參、帶返回值函數(shù)的使用
- 函數(shù)嵌套:通過(guò)調(diào)用其他函數(shù)實(shí)現(xiàn)復(fù)雜邏輯
- 參數(shù)傳遞:不可變類(lèi)型值傳遞,可變類(lèi)型引用傳遞
- 變量作用域:局部變量與全局變量的訪問(wèn)規(guī)則
- 類(lèi)型標(biāo)注:增強(qiáng)代碼可讀性的現(xiàn)代編程技巧
到此這篇關(guān)于Python 函數(shù)詳解:從基礎(chǔ)語(yǔ)法到高級(jí)使用技巧的文章就介紹到這了,更多相關(guān)Python 函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python調(diào)用Matplotlib繪制分布點(diǎn)圖
這篇文章主要為大家詳細(xì)介紹了python調(diào)用Matplotlib繪制分布點(diǎn)圖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-10-10
matplotlib相關(guān)系統(tǒng)目錄獲取方式小結(jié)
這篇文章主要介紹了matplotlib相關(guān)系統(tǒng)目錄獲取方式小結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02
使用pycharm在本地開(kāi)發(fā)并實(shí)時(shí)同步到服務(wù)器
這篇文章主要介紹了使用pycharm在本地開(kāi)發(fā)并實(shí)時(shí)同步到服務(wù)器,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08
python使用pandas實(shí)現(xiàn)篩選功能方式
在數(shù)據(jù)分析的過(guò)程中通常要對(duì)數(shù)據(jù)進(jìn)行清洗與處理,而其中比較重要和常見(jiàn)的操作就有對(duì)數(shù)據(jù)進(jìn)行篩選與查詢,下面這篇文章主要給大家介紹了關(guān)于python使用pandas實(shí)現(xiàn)篩選功能方式的相關(guān)資料,需要的朋友可以參考下2022-06-06
python進(jìn)階教程之動(dòng)態(tài)類(lèi)型詳解
這篇文章主要介紹了python進(jìn)階教程之動(dòng)態(tài)類(lèi)型詳解,動(dòng)態(tài)類(lèi)型是動(dòng)態(tài)語(yǔ)言的特性,本文對(duì)多種動(dòng)態(tài)類(lèi)型應(yīng)用做了講解,需要的朋友可以參考下2014-08-08

