從入門到精通詳解Python函數(shù)參數(shù)全攻略
在編程的世界里,函數(shù)(Function)就像是一個(gè)精密加工的工廠:你投入原材料(輸入),經(jīng)過內(nèi)部的機(jī)器運(yùn)轉(zhuǎn)(處理),最后產(chǎn)出成品(輸出)。
而在 Python 中,參數(shù)(Arguments/Parameters) 就是這些原材料。掌握了參數(shù)的使用,你就掌握了控制函數(shù)行為的鑰匙,能夠編寫出更靈活、更強(qiáng)大且易于維護(hù)的代碼。
本文將帶你系統(tǒng)地拆解 Python 函數(shù)參數(shù)的奧秘,從最基礎(chǔ)的用法到進(jìn)階技巧,助你徹底攻克這一知識(shí)點(diǎn)。
1. 前置知識(shí) (Prerequisites)
在開始之前,請(qǐng)確保你已經(jīng)具備以下基礎(chǔ):
- 已安裝 Python 環(huán)境(推薦 Python 3.6+)。
- 了解如何定義一個(gè)最簡單的函數(shù)(使用
def關(guān)鍵字)。 - 理解變量的基本賦值概念。
2. 核心概念:形參與實(shí)參
在深入具體用法前,我們需要厘清兩個(gè)經(jīng)常混用的術(shù)語:
- 形參 (Parameters):在定義函數(shù)時(shí)括號(hào)內(nèi)的變量名。它們是占位符。
- 實(shí)參 (Arguments):在調(diào)用函數(shù)時(shí)實(shí)際傳入的值。它們是真實(shí)的數(shù)據(jù)。
def greet(name): # name 是形參
print(f"Hello, {name}!")
greet("Alice") # "Alice" 是實(shí)參
3. Python 參數(shù)詳解 (Step-by-Step Guide)
Python 提供了多種傳遞參數(shù)的方式,使得函數(shù)調(diào)用極其靈活。我們將由淺入深一一講解。
3.1 位置參數(shù) (Positional Arguments)
這是最常見、最基礎(chǔ)的參數(shù)形式。Python 按照參數(shù)在括號(hào)中出現(xiàn)的順序,將實(shí)參一一對(duì)應(yīng)賦值給形參。
規(guī)則:數(shù)量必須一致,順序必須正確。
def describe_pet(animal_type, pet_name):
"""顯示寵物的信息"""
print(f"我有一只{animal_type}。")
print(f"它的名字叫{pet_name}。")
# 正確調(diào)用:順序?qū)?yīng)
describe_pet('倉鼠', '哈利')
# 輸出:
# 我有一只倉鼠。
# 它的名字叫哈利。
# 錯(cuò)誤調(diào)用:順序顛倒會(huì)導(dǎo)致邏輯錯(cuò)誤
describe_pet('哈利', '倉鼠')
# 輸出: 我有一只哈利... (邏輯不通)
3.2 關(guān)鍵字參數(shù) (Keyword Arguments)
為了避免記不住參數(shù)順序帶來的麻煩,我們可以使用“鍵=值”的格式直接指定參數(shù)。
規(guī)則:一旦指定了參數(shù)名,順序就不重要了。
# 使用關(guān)鍵字參數(shù)調(diào)用,順序可以打亂 describe_pet(pet_name='哈利', animal_type='倉鼠')
3.3 默認(rèn)參數(shù) (Default Arguments)
有些參數(shù)在大部分情況下都是同一個(gè)值。我們可以為這些參數(shù)設(shè)定一個(gè)默認(rèn)值。如果調(diào)用時(shí)沒有傳入該參數(shù),Python 就會(huì)使用默認(rèn)值。
規(guī)則:必選參數(shù)(無默認(rèn)值)必須放在默認(rèn)參數(shù)之前。
def connect_database(host, port=3306):
"""模擬數(shù)據(jù)庫連接"""
print(f"正在連接到 {host}:{port} ...")
# 情況1:只傳必選參數(shù),使用默認(rèn)端口
connect_database("192.168.1.1")
# 輸出: 正在連接到 192.168.1.1:3306 ...
# 情況2:傳入新值,覆蓋默認(rèn)端口
connect_database("192.168.1.1", 5432)
# 輸出: 正在連接到 192.168.1.1:5432 ...
3.4 可變參數(shù) (Variable-length Arguments)
有時(shí)候,我們無法預(yù)知用戶會(huì)傳入多少個(gè)參數(shù)(例如:計(jì)算任意個(gè)數(shù)字的和)。Python 提供了兩種強(qiáng)大的機(jī)制。
*args:接收任意數(shù)量的位置參數(shù)
Python 會(huì)將多余的位置參數(shù)打包成一個(gè) 元組 (Tuple)。通常命名為 args,但前面的星號(hào) * 才是關(guān)鍵。
def make_pizza(size, *toppings):
"""概述要制作的比薩"""
print(f"\n準(zhǔn)備制作一個(gè) {size} 寸的比薩,配料如下:")
for topping in toppings:
print(f"- {topping}")
# 可以傳入任意數(shù)量的配料
make_pizza(12, '蘑菇', '青椒', '雙倍芝士')
**kwargs:接收任意數(shù)量的關(guān)鍵字參數(shù)
Python 會(huì)將多余的關(guān)鍵字參數(shù)打包成一個(gè) 字典 (Dictionary)。通常命名為 kwargs,前面的雙星號(hào) ** 是關(guān)鍵。
def build_profile(first, last, **user_info):
"""創(chuàng)建一個(gè)字典,其中包含我們知道的有關(guān)用戶的一切"""
user_info['first_name'] = first
user_info['last_name'] = last
return user_info
user_profile = build_profile('Albert', 'Einstein',
location='Princeton',
field='Physics')
print(user_profile)
# 輸出: {'location': 'Princeton', 'field': 'Physics', 'first_name': 'Albert', 'last_name': 'Einstein'}
4. 常見陷阱與最佳實(shí)踐 (Common Pitfalls)
即使是經(jīng)驗(yàn)豐富的開發(fā)者,有時(shí)也會(huì)在參數(shù)問題上栽跟頭。以下是新手必須注意的“雷區(qū)”。
陷阱 1:使用可變對(duì)象作為默認(rèn)參數(shù) (最經(jīng)典的坑)
永遠(yuǎn)不要使用列表、字典等可變對(duì)象作為默認(rèn)參數(shù)值。
錯(cuò)誤示范:
def add_item(item, list_param=[]):
list_param.append(item)
return list_param
print(add_item('A')) # 期望: ['A'] -> 實(shí)際: ['A']
print(add_item('B')) # 期望: ['B'] -> 實(shí)際: ['A', 'B'] <-- 竟然保留了上次的結(jié)果!
原因:Python 函數(shù)的默認(rèn)參數(shù)在函數(shù)定義時(shí)只計(jì)算一次,而不是每次調(diào)用時(shí)重新計(jì)算。所有調(diào)用都共享同一個(gè)列表對(duì)象。
正確做法: 使用 None 作為默認(rèn)值,在函數(shù)內(nèi)部進(jìn)行判斷。
def add_item(item, list_param=None):
if list_param is None:
list_param = []
list_param.append(item)
return list_param
陷阱 2:參數(shù)定義的順序
如果你在一個(gè)函數(shù)中混合使用了以上所有類型的參數(shù),必須嚴(yán)格遵守以下順序,否則會(huì)報(bào)錯(cuò):
- 位置參數(shù) (常規(guī)參數(shù))
- 默認(rèn)參數(shù)
*args(可變位置參數(shù))**kwargs(可變關(guān)鍵字參數(shù))
注:在 Python 3 中,*args 和默認(rèn)參數(shù)的位置有時(shí)可以互換(形成命名關(guān)鍵字參數(shù)),但對(duì)于初學(xué)者,建議死記上述順序以避免混淆。
5. 總結(jié)與資源 (Conclusion & Resources)
核心知識(shí)點(diǎn)回顧
- 位置參數(shù):按順序入座,最死板但最常用。
- 關(guān)鍵字參數(shù):指名道姓,清晰易讀。
- 默認(rèn)參數(shù):提供備選方案,簡化調(diào)用。
*args:打包多余的位置參數(shù)為元組。**kwargs:打包多余的關(guān)鍵字參數(shù)為字典。- 切記:默認(rèn)參數(shù)不要用空列表
[]!
下一步做什么?
掌握了函數(shù)的參數(shù),你就具備了編寫通用代碼庫的能力。建議嘗試編寫一個(gè)簡單的命令行工具(CLI),利用 *args 和 **kwargs 來處理用戶輸入的各種復(fù)雜指令。
到此這篇關(guān)于從入門到精通詳解Python函數(shù)參數(shù)全攻略的文章就介紹到這了,更多相關(guān)Python函數(shù)參數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python對(duì)FTP交互封裝的實(shí)現(xiàn)
本文主要介紹了Python對(duì)FTP交互封裝的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06
Python實(shí)現(xiàn)手繪圖效果實(shí)例分享
在本篇文章里小編給大家整理了關(guān)于Python實(shí)現(xiàn)手繪圖效果,有需要的朋友們可以學(xué)習(xí)下。2020-07-07
Python 通過requests實(shí)現(xiàn)騰訊新聞抓取爬蟲的方法
今天小編就為大家分享一篇Python 通過requests實(shí)現(xiàn)騰訊新聞抓取爬蟲的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-02-02
詳解python requests中的post請(qǐng)求的參數(shù)問題
這篇文章主要介紹了詳解python requests中的post請(qǐng)求的參數(shù)問題,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03
Python函數(shù)裝飾器實(shí)現(xiàn)方法詳解
這篇文章主要介紹了Python函數(shù)裝飾器實(shí)現(xiàn)方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了Python函數(shù)裝飾器的概念、功能、用法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2018-12-12
使用Fabric自動(dòng)化部署Django項(xiàng)目的實(shí)現(xiàn)
這篇文章主要介紹了使用Fabric自動(dòng)化部署Django項(xiàng)目的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09
在Tensorflow中查看權(quán)重的實(shí)現(xiàn)
今天小編就為大家分享一篇在Tensorflow中查看權(quán)重的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-01-01
Python使用中文正則表達(dá)式匹配指定中文字符串的方法示例
這篇文章主要介紹了Python使用中文正則表達(dá)式匹配指定中文字符串的方法,結(jié)合實(shí)例形式分析了Python正則匹配及字符編碼相關(guān)操作技巧,需要的朋友可以參考下2017-01-01

