您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“Python函數參數實例分析”,內容詳細,步驟清晰,細節處理妥當,希望這篇“Python函數參數實例分析”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
# 1.位置參數:調用函數時,傳入的值需要按照位置順序傳入 # 實例:求x的n次方 def xPowN(x,n): # 傳入的值按照x,n的位置順序傳入 s = 1 while n > 0: n = n - 1 s = s * x return s print("2的5次方的值為:",xPowN(2,5)) print("5的2次方的值為:",xPowN(5,2)) # 結果輸出: # 2的5次方的值為: 32 # 5的2次方的值為: 25
# 2.默認參數 # 實例:求x的n次方 def xPowN(x,n = 2): s = 1 while n > 0: n = n - 1 s = s * x return s print("2的5次方的值為:",xPowN(2,5)) # 當n有新的值傳入,則使用新值計算,如果沒有,則默認 print("5的2次方的值為:",xPowN(5)) # n的值默認為2 print("---------------------------") print("---------------------------") # 設置默認參數的注意事項: # 1.必選參數在前,默認參數在后; # 2.當函數有多個參數時,把變化大的參數放在前面,變化小的參數放在后面; # 變化小的參數可以作為默認參數; # 3.使用默認參數可以降低調用函數的難度; # 4.定義默認參數時,默認參數必須指向不變對象,如果是可變對象,則出現問題,如:list # 實例:學生信息登記 def studentInfo(name,gender,age,city = "Shenzhen"): print("學生的名字為:",name) print("學生的性別為:",gender) print("學生的年齡為:",age) print("學生來自的城市為:",city) print("同學1的信息如下:") print("-----------------------------") studentInfo("Willard","男",18) # 使用默認參數Shenzhen print("*****************************") print("同學2的信息如下:") print("-----------------------------") studentInfo("ChenJD","女",18,"Maoming") # 傳入新的參數Maoming替換Shenzhen
# 結果輸出:
2的5次方的值為: 32
5的2次方的值為: 25
---------------------------
---------------------------
同學1的信息如下:
-----------------------------
學生的名字為: Willard
學生的性別為: 男
學生的年齡為: 18
學生來自的城市為: Shenzhen
*****************************
同學2的信息如下:
-----------------------------
學生的名字為: ChenJD
學生的性別為: 女
學生的年齡為: 18
學生來自的城市為: Maoming
# 3.可變參數:傳入的參數個數是可變的,可以是0、1、2到任意個 # 傳統方式傳入參數時,可以以list或tuple傳入 # 實例(傳統方式): def sumOfN(intNumbers): sum = 0 for n in intNumbers: sum = sum + n return sum print("前100項累加和為:",sumOfN(range(101))) print("前50項累加和為:",sumOfN(range(51))) print("任意項累加和為:",sumOfN([1,2,5,6,7,8,9,10])) print("任意項累加和為:",sumOfN((1,2,3,4,5,7,8,9,12))) print("---------------------------------------------------------") # 可變參數:在參數前添加*號 def sumOfN(*intNumbers): sum = 0 for n in intNumbers: sum = sum + n return sum print("任意項累加和為:",sumOfN(1,2,3,4,6,7,8,9)) print("任意項累加和為:",sumOfN(1,2,4)) print("任意項累加和為:",sumOfN(3,4,5,6,7)) print("---------------------------------------------------------") # 把list或tuple作為可變參數傳入 def sumOfN(*intNumbers): sum = 0 for n in intNumbers: sum = sum + n return sum # 已經有list,*nums表示把nums的所有元素作為可變參數傳入 nums = [1,2,3,5] print("傳入一個list:",sumOfN(*nums))
# 結果輸出:
前100項累加和為: 5050
前50項累加和為: 1275
任意項累加和為: 48
任意項累加和為: 51
---------------------------------------------------------
任意項累加和為: 40
任意項累加和為: 7
任意項累加和為: 25
---------------------------------------------------------
傳入一個list: 11
# 4.關鍵字參數 # 可變參數允許傳入任意個參數,這些可變參數在函數調用時自動組裝為一個tuple; # 關鍵字參數允許傳入任意個含參數名的參數,這些關鍵字參數在函數內部自動組裝為一個dict; def personInfo(name,age,**kw): print("name:",name,"age:",age,"other:",kw) print("Willard個人信息:") personInfo("Willard",18) print("------------------------------------------------------------------") print("Willard更詳細的個人信息:") personInfo("Willard",18,gender = "男",job = "Enginner") print("------------------------------------------------------------------") print("ChenJD個人信息:") personInfo("ChenJD",18,gender = "女") print("------------------------------------------------------------------") # 關鍵字參數:可以擴展函數的功能 # Eg:用戶注冊功能,用戶名和年齡是必填信息,其他信息均為可選 # 可以先組裝出dict,然后把dict轉換為關鍵字參數傳入 extraInfo = {"gender":"Man","city":"Shenzhen","job":"Engineer"} print("hackerLuo個人信息如下:") personInfo("hackerLuo",18,gender = extraInfo["gender"],job = extraInfo["job"]) print("------------------------------------------------------------------") # 使用簡化寫法 print("簡化寫法傳入hackerLuo個人信息:") personInfo("hackerLuo",18,**extraInfo)
# 結果輸出:
Willard個人信息:
name: Willard age: 18 other: {}
------------------------------------------------------------------
Willard更詳細的個人信息:
name: Willard age: 18 other: {'gender': '男', 'job': 'Enginner'}
------------------------------------------------------------------
ChenJD個人信息:
name: ChenJD age: 18 other: {'gender': '女'}
------------------------------------------------------------------
hackerLuo個人信息如下:
name: hackerLuo age: 18 other: {'gender': 'Man', 'job': 'Engineer'}
------------------------------------------------------------------
簡化寫法傳入hackerLuo個人信息:
name: hackerLuo age: 18 other: {'gender': 'Man', 'city': 'Shenzhen', 'job': 'Engineer'}
# 5.命名關鍵字參數 # 函數調用者可以傳入任意不受限制的關鍵字參數; # 傳入了哪些參數,需要在函數內通過kw檢查; def personInfo(name,age,**kw): if "city" in kw: pass if "job" in kw: pass print("name:",name,"age:",age,"other:",kw) # 如果要限制關鍵字參數的名字,可以用命名關鍵字參數 # 只接收gender,job作為關鍵字參數 # 命名關鍵字參數需要*作為分隔符,*后面的參數視為命名關鍵字參數 # 命名關鍵字參數必須傳入參數名 def personInfo(name,age,*,gender,job): print(name,age,gender,job) # 調用方式: print("命名關鍵字參數調用!") personInfo("Willard",18,gender = "男",job = "Engineer") print("------------------------------------------------------------------") # 如果函數定義中已經有一個可變參數,則后面跟著命名關鍵字參數不需要*分隔符 def personInfo(name,age,*args,gender,job): print(name,age,args,gender,job) # 命名關鍵字參數的缺省值 def personInfo(name,age,*,gender,job = "Engineer"): print(name,age,gender,job) print("命名關鍵字參數有缺省值!") personInfo("Willard",18,gender = "男")
# 結果輸出:
命名關鍵字參數調用!
Willard 18 男 Engineer
------------------------------------------------------------------
命名關鍵字參數有缺省值!
Willard 18 男 Engineer
# 6.參數組合 # 常用參數:必選參數、默認參數、可變參數、關鍵字參數、命名關鍵字參數 # 參數定義順序:必選參數、默認參數、可變參數、命名關鍵字參數、關鍵字參數 def egFunc1(name,age,gender = "男",*args,**kw): print("name:",name,"age:",age,"gender:",gender,"args:",args,"kw:",kw) def egFunc2(name,gender = "男",*,job,**kw): print("name:",name,"gender:",gender,"job:",job,"kw:",kw) # 調用 print("egFunc1傳入name和age參數:") egFunc1("Willard",18) print("------------------------------------------------------------------") print("egFunc1傳入name,age,gender參數:") egFunc1("ChenJD",18,"女") print("------------------------------------------------------------------") print("egFunc1傳入name,age,gender,args參數:") egFunc1("hackerLuo",18,"男",170,60) print("------------------------------------------------------------------") print("egFunc1傳入name,age,gender,args,kw參數:") egFunc1("Willard",18,"男",170,60,job = "Engineer") print("------------------------------------------------------------------") print("egFunc2傳入name,gender,job,kw參數:") egFunc2("Willard",job = "Engineer",ext = None) print("------------------------------------------------------------------") print("egFunc1通過tuple和dict傳入參數:") args = ("Willard",18,"男",170,60) kw = {"job":"Engineer"} egFunc1(*args,**kw) # Tips: # 1.默認參數一定要用不可變對象,如果是可變對象,程序運行時出現邏輯錯誤; # 2.*args是可變參數,args接收的是一個tuple; # 3.**kw是關鍵字參數,kw接收的是一個dict; # 4.可變參數可以直接傳入:func(1,2,3,4),也可以先組裝list或tuple, # 通過*args傳入:func(*(1,2,3,4)); # 5.關鍵字參數可以直接傳入:func(a = 1,b = 2),也可以先組裝dict, # 通過**kw傳入:func(**{"a":1,"b":2}); # 6.命名關鍵字參數在沒有可變參數的情況下需要寫分隔符*
# 結果輸出:
egFunc1傳入name和age參數:
name: Willard age: 18 gender: 男 args: () kw: {}
------------------------------------------------------------------
egFunc1傳入name,age,gender參數:
name: ChenJD age: 18 gender: 女 args: () kw: {}
------------------------------------------------------------------
egFunc1傳入name,age,gender,args參數:
name: hackerLuo age: 18 gender: 男 args: (170, 60) kw: {}
------------------------------------------------------------------
egFunc1傳入name,age,gender,args,kw參數:
name: Willard age: 18 gender: 男 args: (170, 60) kw: {'job': 'Engineer'}
------------------------------------------------------------------
egFunc2傳入name,gender,job,kw參數:
name: Willard gender: 男 job: Engineer kw: {'ext': None}
------------------------------------------------------------------
egFunc1通過tuple和dict傳入參數:
name: Willard age: 18 gender: 男 args: (170, 60) kw: {'job': 'Engineer'}
# 在函數內部,可以調用其他函數,亦可以調用函數本身,則為遞歸函數 # 計算階乘:n!=1×2×3...×n def fact(n): if n == 1: return 1 return n * fact(n - 1) print("5的階乘為:",fact(5)) print("100的階乘為:",fact(50)) # print("10000的階乘為:",fact(10000)) # print("10000的階乘為:",fact(10000)) # 棧溢出 # 在計算機中,函數調用是通過棧數據結構實現,每進入一個函數調用, # 棧會加一層棧幀,當函數返回,棧減少一層棧幀,遞歸調用次數過多,會導致棧溢出; # 讀者嘗試fact(1000),fact(10000),可能fact(1000)就已經棧溢出, # 筆者測試fact(1000)還是可以正常輸出的,fact(10000)棧溢出
# 結果輸出:
5的階乘為: 120
100的階乘為: 30414093201713378043612608166064768844377641568960512000000000000
讀到這里,這篇“Python函數參數實例分析”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。