本文將從以下幾個方面對Python 參數傳遞做詳細闡述:
一、參數傳遞的基礎概念
Python 學習中,參數傳遞是一個必須掌握的重要概念。簡單來說,參數傳遞是指在函數調用時將實際參數傳遞給形式參數的過程。
# 定義一個簡單的函數,並傳遞參數 def greeting(name): print('Hello, ' + name + '!') greeting('Tom')
在上面的例子中,我們定義了一個函數greeting,它接受一個參數name,並列印出”Hello, name!” 的結果。在函數調用時,我們傳遞了參數Tom,實際參數通過形式參數name傳遞到函數中。
二、Python 中參數傳遞的方式
Python 中存在兩種參數傳遞的方式:傳值和傳引用。在 Python 中,對象分為可變對象和不可變對象,可變對象包含列表、字典等,不可變對象包含數字、字元串等。
1、傳值
在 Python 中,傳值就是將實際參數的值傳遞給形式參數的過程。對於不可變的數據類型,如數字、字元串、元組等,參數傳遞的方式是傳值。這也就是說,在函數內對形參所做的修改,不會影響到函數外部的實參。
# 傳遞字元串作為參數的示例 def change_string(str): str = 'Changed String' print('函數內值: ', str) string = 'Hello, world!' change_string(string) print('函數外值: ', string)
在上面的代碼中,我們定義一個函數change_string,它接受一個字元串類型的參數str,並在函數內部對str變數賦值。當我們調用函數change_string函數時,函數內部的str被賦值為’Changed String’。但是,函數外部的string仍然保留著原先的值’Hello, world!’,這說明傳遞的是參數的值,形參的修改並不會影響到實參。
2、傳引用
在 Python 中,傳引用就是將實際參數的引用傳遞給形式參數的過程。對於可變的數據類型,如列表、字典等,參數傳遞的方式是傳引用。這就意味著如果在函數內修改了形參,實參也會受到影響。
# 傳遞列表作為參數的示例 def change_list(mylist): mylist.append([1,2,3,4]) print('函數內值: ', mylist) list = [10,20,30] change_list(list) print('函數外值: ', list)
在上面的代碼中,我們定義一個函數change_list,它接受一個列表類型的參數mylist,並在函數內部對mylist執行了append操作。當我們調用函數change_list函數時,函數內部的mylist向原始列表中添加了一個包含4個數字的新列表。但是,函數外部的list也被修改了,它現在包含了4個元素:[10,20,30,[1,2,3,4]],這說明傳遞的是變數的引用,形參的修改會影響實參。
三、默認參數
在 Python 中,函數可以接受默認值作為參數,這些默認值可以是必需的或可選的。定義默認值後,函數參數可以在調用時不用傳遞任何值。
# 帶有默認值的函數示例 def print_info(name, age=35): print('Name: ', name) print('Age: ', age) print_info('Tom') print_info('Jerry', 40)
在上面的代碼中,我們定義了一個函數print_info,它包含兩個參數:name和age。age參數具有默認值35,這意味著可以省略age參數的傳遞。在函數的第一次調用中,只傳遞了一個參數name,沒有傳遞age參數,這時函數會使用默認值35。在第二次調用時,傳遞了兩個參數,分別是name和age,這時函數使用傳遞的參數。
四、可變參數
在 Python 中,函數可以接受任意數量的參數,這些參數可以是位置參數、默認參數或關鍵字參數。使用可變參數,可以傳遞不同數量的參數,這對於編寫靈活的函數非常有用。
1、位置參數
位置參數就是指不帶任何額外符號或名稱的參數。在函數中,可以使用*args來接受任意數量的位置參數。
# 使用位置參數的示例 def print_args(*args): print('傳入的參數: ', args) print_args('a','b','c')
在上面的代碼中,我們定義了一個函數print_args,它使用*args以實現接受任意數量的位置參數。當我們調用函數print_args時,*args收集傳入的所有參數並將其列印出來。
2、關鍵字參數
關鍵字參數就是指使用關鍵字傳遞的參數。關鍵字參數允許在函數調用時指定函數參數的名稱,這會使代碼更具可讀性。在函數中,可以使用**kwargs來接受任意數量的關鍵字參數。
# 使用關鍵字參數的示例 def print_kwargs(**kwargs): print('傳入的關鍵字參數: ', kwargs) print_kwargs(a=1, b=2, c=3)
在上面的代碼中,我們定義了一個函數print_kwargs,它使用**kwargs以實現接受任意數量的關鍵字參數。當我們調用函數print_kwargs時,**kwargs收集傳入的所有關鍵字參數並將其列印出來。
3、混合參數
在函數中也可以混合使用位置參數、關鍵字參數和默認參數,但是位置參數必須在關鍵字參數的前面。
# 混合使用參數的示例 def print_people_info(name, age=35, *friends, **kwargs): print('Name: ', name) print('Age: ', age) print('Friends: ', friends) print('Other: ', kwargs) print_people_info('Tom', 25, 'Bob', 'John', location='New York', job='Engineer')
在上面的代碼中,我們定義了一個函數print_people_info,它包含一個位置參數name、一個默認參數age、一個可變參數friends以及一個關鍵字參數**kwargs。當我們調用函數print_people_info時,前兩個參數是位置參數,後兩個參數分別是可變參數和關鍵字參數。可變參數會收集傳入的位置參數,而關鍵字參數會收集傳入的所有關鍵字參數。
原創文章,作者:YYAPB,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/374248.html