函數(shù)是 Python 中封裝代碼邏輯的基本單元,它將實(shí)現(xiàn)特定功能的代碼塊命名并打包,以便在程序中重復(fù)調(diào)用,從而減少代碼冗余、提高可讀性和可維護(hù)性。無論是簡(jiǎn)單的數(shù)學(xué)計(jì)算還是復(fù)雜的業(yè)務(wù)邏輯,都可以通過函數(shù)實(shí)現(xiàn)模塊化管理。Python 的函數(shù)定義靈活,支持多種參數(shù)類型,能適應(yīng)不同的調(diào)用場(chǎng)景。掌握函數(shù)的定義方法和參數(shù)類型,是編寫結(jié)構(gòu)化 Python 代碼的核心技能。
一、Python 函數(shù)的定義方法
Python 函數(shù)通過def關(guān)鍵字定義,基本語法格式為:
def 函數(shù)名(參數(shù)列表): """函數(shù)文檔字符串(可選,用于說明函數(shù)功能)""" # 函數(shù)體(實(shí)現(xiàn)功能的代碼塊,需縮進(jìn)) return 返回值(可選)
(一)函數(shù)定義的基本要素
函數(shù)名:遵循標(biāo)識(shí)符命名規(guī)則(字母、數(shù)字、下劃線組成,不能以數(shù)字開頭),建議使用小寫字母和下劃線(蛇形命名法),做到 “見名知意”(如calculate_sum、get_user_info)。
參數(shù)列表:函數(shù)接收的輸入數(shù)據(jù),可包含零個(gè)或多個(gè)參數(shù),多個(gè)參數(shù)用逗號(hào)分隔。
函數(shù)體:實(shí)現(xiàn)函數(shù)功能的代碼,需通過縮進(jìn)(通常 4 個(gè)空格)與其他代碼區(qū)分。
返回值:通過return語句將結(jié)果返回給調(diào)用者,若省略return,函數(shù)默認(rèn)返回None。
(二)函數(shù)定義示例
無參數(shù)、無返回值的函數(shù)
def print_welcome(): """打印歡迎信息""" print("歡迎使用本程序!")# 調(diào)用函數(shù)print_welcome() # 輸出:歡迎使用本程序!
有參數(shù)、有返回值的函數(shù)
def add(a, b): """計(jì)算兩個(gè)數(shù)的和并返回""" result = a + b return result# 調(diào)用函數(shù)并接收返回值sum_result = add(3, 5)print(sum_result) # 輸出:8
包含文檔字符串的函數(shù)
文檔字符串(docstring)用于說明函數(shù)功能,可通過help()函數(shù)查看:
def multiply(x, y): """ 計(jì)算兩個(gè)數(shù)的乘積 參數(shù): x: 第一個(gè)乘數(shù) y: 第二個(gè)乘數(shù) 返回: 乘積結(jié)果 """ return x * yhelp(multiply) # 顯示函數(shù)文檔
二、Python 函數(shù)的參數(shù)類型
Python 函數(shù)的參數(shù)類型豐富,可根據(jù)傳遞和接收方式分為以下幾類,靈活滿足不同的調(diào)用需求。
(一)位置參數(shù)(必選參數(shù))
位置參數(shù)是最基本的參數(shù)類型,必須按照定義時(shí)的順序傳遞,且數(shù)量與定義一致,否則會(huì)報(bào)錯(cuò)。
示例:
def greet(name, age): print(f"你好,我叫{name},今年{age}歲")# 按位置傳遞參數(shù)greet("Alice", 20) # 輸出:你好,我叫Alice,今年20歲greet(20, "Alice") # 邏輯錯(cuò)誤(參數(shù)順序顛倒),輸出:你好,我叫20,今年Alice歲
(二)關(guān)鍵字參數(shù)
調(diào)用函數(shù)時(shí),通過 “參數(shù)名 = 值” 的形式指定參數(shù),可忽略參數(shù)順序,提高代碼可讀性。
示例:
# 用關(guān)鍵字參數(shù)調(diào)用greet函數(shù)greet(age=20, name="Alice") # 輸出:你好,我叫Alice,今年20歲(順序無關(guān))
關(guān)鍵字參數(shù)常與位置參數(shù)結(jié)合使用,但位置參數(shù)必須放在關(guān)鍵字參數(shù)之前:
greet("Bob", age=22) # 正確:位置參數(shù)在前,關(guān)鍵字參數(shù)在后# greet(name="Bob", 22) # 錯(cuò)誤:關(guān)鍵字參數(shù)不能在位置參數(shù)之前
(三)默認(rèn)參數(shù)
定義函數(shù)時(shí),為參數(shù)指定默認(rèn)值(參數(shù)名=默認(rèn)值),調(diào)用時(shí)可省略該參數(shù)(使用默認(rèn)值)。
示例:
def power(base, exponent=2): """計(jì)算base的exponent次方,默認(rèn)平方""" return base ** exponentprint(power(3)) # 省略exponent,使用默認(rèn)值2:3^2=9print(power(3, 3)) # 指定exponent為3:3^3=27
注意:默認(rèn)參數(shù)必須放在位置參數(shù)之后,否則會(huì)導(dǎo)致語法錯(cuò)誤。
(四)可變參數(shù)(*args)
當(dāng)參數(shù)數(shù)量不確定時(shí),可在參數(shù)名前加*定義可變參數(shù),接收任意數(shù)量的位置參數(shù),返回一個(gè)元組。
示例:
def calculate_sum(*args): """計(jì)算任意數(shù)量數(shù)字的和""" total = 0 for num in args: total += num return totalprint(calculate_sum(1, 2, 3)) # 3個(gè)參數(shù):6print(calculate_sum(10, 20, 30, 40)) # 4個(gè)參數(shù):100print(calculate_sum()) # 0個(gè)參數(shù):0
調(diào)用時(shí),也可將列表或元組拆分為可變參數(shù)傳遞(在變量前加*):
nums = [1, 2, 3, 4]print(calculate_sum(*nums)) # 等價(jià)于calculate_sum(1,2,3,4),輸出10
(五)關(guān)鍵字可變參數(shù)(**kwargs)
在參數(shù)名前加**定義關(guān)鍵字可變參數(shù),接收任意數(shù)量的關(guān)鍵字參數(shù),返回一個(gè)字典(鍵為參數(shù)名,值為參數(shù)值)。
示例:
def print_info(**kwargs): """打印任意關(guān)鍵字參數(shù)信息""" for key, value in kwargs.items(): print(f"{key}: {value}")print_info(name="Alice", age=20, gender="female")# 輸出:# name: Alice# age: 20# gender: female
調(diào)用時(shí),可將字典拆分為關(guān)鍵字可變參數(shù)傳遞(在變量前加**):
user_info = {"name": "Bob", "age": 22}print_info(** user_info) # 等價(jià)于print_info(name="Bob", age=22)
三、參數(shù)類型的組合使用
實(shí)際開發(fā)中,多種參數(shù)類型可組合使用,但需遵循固定順序:位置參數(shù) → 默認(rèn)參數(shù) → 可變參數(shù)(*args) → 關(guān)鍵字可變參數(shù)(**kwargs)。
示例:綜合參數(shù)類型的函數(shù)
def func(a, b, c=0, *args, **kwargs): print(f"位置參數(shù):a={a}, b=") print(f"默認(rèn)參數(shù):c={c}") print(f"可變參數(shù):args={args}") print(f"關(guān)鍵字可變參數(shù):kwargs={kwargs}")# 調(diào)用函數(shù)func(1, 2, 3, 4, 5, x=6, y=7)# 輸出:# 位置參數(shù):a=1, b=2# 默認(rèn)參數(shù):c=3# 可變參數(shù):args=(4, 5)# 關(guān)鍵字可變參數(shù):kwargs={'x': 6, 'y': 7}
四、函數(shù)使用的注意事項(xiàng)
-** 作用域 :函數(shù)內(nèi)部定義的變量為局部變量,僅在函數(shù)內(nèi)有效;函數(shù)外部定義的全局變量需用global聲明才能在函數(shù)內(nèi)修改。
函數(shù)嵌套 :函數(shù)內(nèi)部可定義另一個(gè)函數(shù)(嵌套函數(shù)),內(nèi)部函數(shù)可訪問外部函數(shù)的變量(閉包特性)。
避免過多參數(shù) **:函數(shù)參數(shù)過多(如超過 5 個(gè))會(huì)降低可讀性,可通過字典或類封裝參數(shù)。
Python 函數(shù)的定義簡(jiǎn)潔靈活,通過不同類型的參數(shù)可滿足多樣化的調(diào)用需求:位置參數(shù)保證基本輸入,關(guān)鍵字參數(shù)提升可讀性,默認(rèn)參數(shù)簡(jiǎn)化常用場(chǎng)景,可變參數(shù)適應(yīng)不確定輸入。掌握這些參數(shù)類型的使用規(guī)則,能讓函數(shù)更通用、更易用,是編寫高質(zhì)量 Python 代碼的關(guān)鍵。合理封裝函數(shù),既能減少重復(fù)代碼,又能讓程序結(jié)構(gòu)更清晰,為后續(xù)維護(hù)和擴(kuò)展提供便利。