Python 中的函數參數如何傳遞?
參數傳遞機制

Python 使用的是“按對象引用傳遞”(pass by object reference)的方式。這意味著當你將一個對象作為參數傳遞給函數時,你實際上是在傳遞該對象的引用而不是副本。因此,如果在函數內部修改了可變對象(如列表、字典),這些修改會反映到外部的對象上;而對于不可變對象(如整數、字符串、元組),由于它們不能被修改,所以不會影響原始對象。
參數類型
位置參數(Positional Arguments) 這是最常見的參數傳遞方式,調用函數時按照定義順序傳遞參數。
def greet(name, message):
print(f"Hello {name}, {message}")
greet("Alice", "Good morning!")關鍵字參數(Keyword Arguments) 通過指定參數名來傳遞參數值,這樣可以不按照定義順序傳遞參數。
def greet(name, message):
print(f"Hello {name}, {message}")
greet(message="Good morning!", name="Alice")默認參數(Default Arguments) 定義函數時為參數提供默認值,當調用函數時沒有提供對應的參數值,則使用默認值。
def greet(name, message="Good day!"):
print(f"Hello {name}, {message}")
greet("Bob") # 使用默認消息
greet("Charlie", "How are you?") # 覆蓋默認消息可變數量的參數(*args 和 kwargs)
*args:允許你傳入任意數量的位置參數,這些參數會被收集到一個元組中。
def sum_numbers(*args):
return sum(args)
print(sum_numbers(1, 2, 3)) # 輸出6*kwargs:允許你傳入任意數量的關鍵字參數,這些參數會被收集到一個字典中。
def print_info(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
print_info(name="Alice", age=30)可變對象 vs 不可變對象
對于不可變對象(如整數、字符串、元組),在函數內部對參數的任何改變都不會影響到外部的變量,因為實際上是在操作一個新的對象。
def modify_string(s):
s += " world"
print(s) # 輸出 "hello world"
original = "hello"
modify_string(original)
print(original) # 輸出 "hello"對于可變對象(如列表、字典),在函數內部對參數的改變會影響到外部的變量,因為兩者指向同一個對象。
def append_to_list(lst):
lst.append(4)
my_list = [1, 2, 3]
append_to_list(my_list)
print(my_list) # 輸出 [1, 2, 3, 4]通過理解這些概念,你可以更好地控制函數參數的傳遞方式,并根據需要選擇最合適的參數傳遞策略。無論是簡單的函數調用還是復雜的數據處理邏輯,正確地使用參數傳遞機制都是至關重要的。




























