如何在 Python 函式中按引用傳遞引數?


在 Python 中,你無法像在其他程式語言(如 C++)中那樣按引用傳遞引數。但是,有一種方法可以使用可變資料型別(如列表和字典)在 Python 中模擬按引用傳遞的行為。

在 Python 中,引數是透過賦值傳遞的,這意味著函式定義中的引數名稱成為傳遞給引數的物件的引用。因此,Python 中沒有直接的方法來按引用傳遞引數。

但是,您可以透過將可變物件(如列表或字典)傳遞給函式並在函式內部修改它來實現類似的效果。

以下是一些演示此功能的程式碼示例

示例

在這個例子中,我們定義了一個名為 add_to_list 的函式,它接受兩個引數 lst 和 num。我們將 my_list 傳遞給函式作為 lst,並將整數 4 作為 num 傳遞。在函式內部,我們將 num 的值追加到 lst 的末尾,並且由於列表是可變資料型別,因此這會修改原始列表。因此,當我們在函式外部列印 my_list 時,我們可以看到它已被修改為 [1, 2, 3, 4]。

def add_to_list(lst, num):
    lst.append(num)
my_list = [1, 2, 3]
add_to_list(my_list, 4)
print(my_list)

輸出

[1, 2, 3, 4]

示例

在這個例子中,我們定義了一個名為 modify_dict 的函式,它接受三個引數 dct、key 和 value。我們將 my_dict 傳遞給函式作為 dct,將字串 'b' 作為 key 傳遞,並將整數 4 作為 value 傳遞。在函式內部,我們將字典 dct 中鍵 key 的值修改為 value。由於字典也是可變資料型別,因此這會修改原始字典。因此,當我們在函式外部列印 my_dict 時,我們可以看到它已被修改為 {'a': 1, 'b': 4, 'c': 3}。

def modify_dict(dct, key, value):
    dct[key] = value
my_dict = {'a': 1, 'b': 2, 'c': 3}
modify_dict(my_dict, 'b', 4)
print(my_dict) 

輸出

{'a': 1, 'b': 4, 'c': 3}

示例

在這個例子中,我們定義了一個名為 increment_list() 的函式,它接受一個列表作為引數,並使用 for 迴圈將列表的每個元素加 1。然後我們建立一個名為 numbers 的列表,其值為 [1, 2, 3],使用 numbers 作為引數呼叫 increment_list() 函式,並列印修改後的 numbers 列表。

def increment_list(lst):
    for i in range(len(lst)):
        lst[i] += 1

numbers = [1, 2, 3]
increment_list(numbers)
print(numbers)  

輸出

[2, 3, 4]

示例

在這個例子中,我們定義了一個名為 add_to_dict() 的函式,它接受一個字典、一個鍵和一個值作為引數,並將鍵值對新增到字典中。然後我們建立一個名為 scores 的字典,其值為 {"Alice": 80, "Bob": 90},使用 scores、"Charlie" 和 95 作為引數呼叫 add_to_dict() 函式,並列印修改後的 scores 字典。

def add_to_dict(dictionary, key, value):
    dictionary[key] = value

scores = {"Alice": 80, "Bob": 90}
add_to_dict(scores, "Charlie", 95)
print(scores)  # Output: {"Alice": 80, "Bob": 90, "Charlie": 95}

輸出

{'Alice': 80, 'Bob': 90, 'Charlie': 95}

示例

在這個例子中,我們定義了一個名為 replace_string() 的函式,它接受一個字串和一個新字串作為引數,並將新字串分配給儲存原始字串的變數。然後我們建立一個名為 message 的字串,其值為 "Hello, world!",使用 message 和 "Goodbye, world!" 作為引數呼叫 replace_string() 函式,並列印原始 message 字串。請注意,message 變數不會被函式修改,因為字串在 Python 中是不可變的。

def replace_string(string, new_string):
    string = new_string
message = "Hello, world!"
replace_string(message, "Goodbye, world!")
print(message)  # Output: "Hello, world!"

輸出

Hello, world!

更新於: 2023年8月10日

706 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告