函式基本及函式引數
阿新 • • 發佈:2020-12-01
一.函式
功能: 包裹一部分程式碼 實現某一個功能 達成某一個目的
特點::
""" 特點:可以反覆呼叫,提高程式碼的複用性,提高開發效率,便於維護管理 函式基本格式 函式的定義: def 函式名(): code1 code2 函式的呼叫: 函式名() """
1. 函式定義
# 定義函式 def func(): print("我是一個函式")
2. 函式呼叫
func()
3. 函式命名
""" 函式命名 字母數字下劃線,首字元不能為數字 嚴格區分大小寫,且不能使用關鍵字 函式命名有意義,且不能使用中文哦
""" 駝峰命名法: (1) 大駝峰命名法:每個單詞的首字元大寫 (類:面向物件) mycar => MyCar mydesk => MyDesk (2) 小駝峰命名法:除了第一個單詞的首字元小寫之外,剩下每個單詞首字元大寫 mycar => myCar mydesk => myDesk mycar => my_car mydesk => my_desk symmetric_difference """
列:
# 函式的定義處 def cfb_99(): for i inrange(1,10): for j in range(1,i+1): print("%d*%d=%2d " % (i,j,i*j) , end="") print() # 函式的呼叫處 for i in range(10): cfb_99()
二. 函式的引數
""" 引數: (1)形參: 形式引數,在函式的定義處 (2)實參:實際引數,在函式的呼叫處 形參: 普通形參,預設形參,普通收集形參,命名關鍵字形參,關鍵字收集形參 實參: 普通實參,關鍵字實參 遵循原則: 形參和實參要一一對應
1. 普通形參
"""hang,lie是函式的普通形參""" def func(hang,lie): i = 0 while i < hang: j = 0 while j < lie: print('*',end='') j+=1 print() i+=1 #函式的呼叫處 """10,10是函式的實際引數""" func(10,10) func(3,8)
2. 預設形參
"""hang,lie身上有預設值,是預設形參""" def s_star(hang=10,lie=10): i = 0 while i < hang: j = 0 while j < lie: print("*",end="") j+=1 print() i+=1 # 函式的呼叫處 """ 在函式呼叫時: 如果給予實參,那麼直接使用實際引數 如果沒有給予實參,那麼使用引數預設自帶的值 """ # s_star() # s_star(3,8) s_star(4)
3.普通形參+預設形參
# 函式的定義處 """預設形參必須跟在普通形參的身後,順序是一定的""" def s_star(hang,lie=10): i = 0 while i < hang: j = 0 while j < lie: print("*",end="") j+=1 print() i+=1 # 函式的呼叫處 # s_star(3,3) s_star(3) # s_star() error
4、關鍵字實參
# 函式的定義處 def s_star(hang,a,b,c,d,lie=10): i = 0 while i < hang: j = 0 while j < lie: print("*",end="") j+=1 print() i+=1 # 函式的呼叫處 # s_star(hang=4,a=1,b=2,c=3,d=4,lie=5) s_star(c=3,d=4,lie=5,hang=4,a=1,b=2)
5、普通實參 + 關鍵字實參
def s_star(hang,a,b,c,d,lie=10): i = 0 while i < hang: j = 0 while j < lie: print("*",end="") j+=1 print() i+=1 # 函式的呼叫處 """關鍵字實參必須跟在普通實參的身後,順序是一定的""" # s_star(5,6,99,c=7,d=8,lie=9) # s_star(c=7,d=8,lie=9,5,6,99) error s_star(5,1,c=2,d=3,lie=10,b=5) # ok # s_star(5,1,c=2,d=3,lie=10,a=5) error s_star(5,1,c=2,d=3,lie=10,,,,b=5) s_star(5,1,c='',d='',lie=10,,,,b=5)
6、區分預設形參和關鍵字實參
# 函式的定義處 def lol31_gameteam(top="王盼盼",middle="吳洪昌",bottom="孫敬華",jungle="孫致和",support="周鵬飛"): print("上單選手{}".format(top)) print("中單選手{}".format(middle)) print("下單選手{}".format(bottom)) print("打野選手{}".format(jungle)) print("輔助選手{}".format(support)) # 函式的呼叫處 lol31_gameteam() lol31_gameteam(top="牧樹人",middle="李亞",bottom="周鵬飛",jungle="溫子越",support="孫敬華")
三、收集引數
""" 收集引數: (1)普通收集引數: 專門用來收集多餘的沒人要的普通實參 def func(*args): code *args => arguments(引數) 在args這個引數的前面加上一個*表達普通收集引數,形成一個元組 """
基本使用:
# 基本使用 def func(a,b,c,*args): print(a,b,c) print(args) # (1,2,3,4,5,5,6,7,8) func(1,2,3,4,5,5,6,7,8) # 計算任意個數的累加和 def func(*args): total = 0 for i in args: total += i print(total) func(1,2,3,4,6,10,11,100)
""" (2)關鍵字收集引數 : 專門用來收集多餘的沒人要的關鍵字實參 def func(**kwargs): code1... **kwargs => keyword arguments 在kwargs引數的前面加上2個**表達關鍵字收集引數,形成一個字典 """
例:
def func(**kwargs): dic = {"monitor":"班長","class_flower":"班花","class_grass":"班草"} strvar1 = '' strvar2 = '' # 遍歷字典中的鍵值對 for k,v in kwargs.items(): if k in dic: strvar1 += dic[k] + ':' + v + '\n' else: strvar2 += v + ',' print(strvar1.strip()) print("吃瓜群眾:"+ strvar2.rstrip(","))
四、命名關鍵字引數
""" 定義命名關鍵字引數的兩種方式: (1)def func(a,b,*,c) c是命名關鍵字 (2)def func(*args,c,**kwargs) c是命名關鍵字引數 在函式呼叫時,必須使用命名關鍵字引數來進行賦值 """
1、關於* 和 ** 的使用方法
關於 *
""" * 和 ** 在函式的定義處,用來做收集操作,打包 * 和 ** 在函式的呼叫處,用來做打散操作,解包 """ def func(a,b,*,c,d): print(a,b) print(c,d) lst = [1,2] # *把列表裡面的所有元素拿出來,當成引數一個一個賦值給func進行呼叫 func(*lst,c=3,d=4)
關於 **
def func(a,b,*,c,d): print(a,b) print(c,d) dic = {"c":3,"d":4} # **把字典裡面的所有元素拿出來,拼裝成鍵=值的引數形式,賦值給func進行呼叫 func(1,2,**dic,) # func( c=3, d=4 )
2、引數定義順序
# ### 當所有引數都在一起的時候,按照什麼順序定義呢? # 引數定義的順序:普通引數 -> 預設引數 -> 普通收集引數 -> 命名關鍵字引數 -> 關鍵字收集引數 # 收集到所有的實參: def func(*args,**kwargs)
五、return 返回值
""" 自定義函式的返回值,return 可以把值返回到函式的呼叫處 (1) return + 六大標準資料型別 , 還有類和物件,函式 如果不定義return , 預設返回的是None (2) 在執行完return之後,立刻終止函式,後面的程式碼不執行 """
1、return的返回型別
def func(): # return 1 # return 3.14 # return "abc" # return [] # return () # return {"a":1} pass res = func()
# 如果不定義return , 預設返回的是None print(res) # None
2.在執行完return之後,立刻終止函式,後面的程式碼不執行
def func(): print(1) print(2) return 3 print(4) print(5) res = func() print(res) def func(): for i in range(3): if i == 2: return 1 print(i) res = func() print(res)
3、模擬簡單的計算器 + - * /
def func(sign,num1,num2): if sign == "+": res = num1 + num2 elif sign =="-": res = num1 - num2 elif sign == "*": res = num1 * num2 elif sign == "/": if num2 == 0: return "除數不能為0 , 腦弟!" res = num1 / num2 else: return "這個本計算器真算不了" return res res = func("+",3,5) res = func("-",10,20) res = func("*",10,20) res = func("/",20,10) res = func("/",20,0) res = func("&",20,0) print(res)