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

