如何在 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!