目錄python
函數就是程序中具有某一功能的工具。(事先將工具準備好就是函數的定義,遇到應用場景拿來就用就是函數的調用。)函數
先定義函數,後調用。工具
定義函數:定義函數階段只識別語法,不運行代碼;也就是說:在函數定義階段,只要不是語法錯誤,就不會報錯。code
def 函數名(param1,param2...): ''' 函數功能的描述信息 :param1 #描述 :param2 #描述 :return #返回值 ''' code1 # 實現某一個具體的功能 code2 code3 retrun 返回值
函數名的定義:input
調用函數 : 調用函數階段才執行函數體代碼。it
函數名()可使用這個工具class
函數名(param1,param2....)
定義函數時‘參數’是函數體接收外部傳值的一種媒介,其實就是一個變量名。基礎
什麼是無參函數變量
在函數定義階段,括號內沒有參數(變量名),稱爲無參函數。擴展
須要注意的點
def func(): print('hello world') func() # hello world
什麼是有參函數
在函數定義階段括號內有參數(變量名),稱爲有參函數。
須要注意的點
def sum_self(x,y): '''求和''' res = x+y print(res) sum_self(1,2) #3
當你只知道你須要實現某個功能,但不知道該如何用代碼實現時,你能夠暫時寫個空函數,而後先實現其餘功能。
def func(): pass
返回值:函數內部代碼通過一系列邏輯處理得到的結果。類型於變量值
def func(): name = 'rayn' return name name = func() print(name) # rayn
若是須要在程序中拿到函數的處理結果並作進一步的處理,則須要函數必需要有返回值。
def max_self(salary1,salary2): if salary1 > salary2: return salary1 else: return salary2 max_salary = max_self(20000,30000) print(max_salary*12) # 360000
須要注意:
def func(): name = 'rayn' age = 20 hobby_list = ['run','rap'] return name,age,hobby_list name,age,hobby_list = func() print(f'name,age,hobby_list:{name,age,hobby_list}') name,age,hobby_list:('rayn', 20, ['run', 'rap'])
形參:在函數定義階段,括號內定義的參數,被稱之爲形式參數,簡稱:形參,相似於變量名,不爲具體的數據類型。
def func(x,y): # x,y 就是形參 print(x) print(y)
實參:在函數調用階段,括號內傳入的參數,被稱之爲實際參數,簡稱實參,相似於變量的值;實參必須是具體的數據類型。
func(1,2) # 1,2 就是實參
位置形參:在函數定義階段,按照從左到右的順序依次定義的形參,稱之爲位置形參。
def func(x,y): print(x) print(y)
特色:按照位置定義的形參,都必須被傳值,多一個不行,少一個也不行。
位置實參:在函數調用階段,按照從左到右的順序依次定義的實參,被稱之爲位置實參。
fun(1,2)
特色:按照位置爲對應的形參依次傳值。
在函數定義階段,提早賦值給形參,當實參傳值的時候,實參傳的值會覆蓋默認值。值不須要改變,而且常常使用,就用默認形參;默認形參必須在位置形參後面。
def guess_age(age=18): inp_age = int(input('請輸入年齡:')) if inp_age == age: print('猜對了') else: print('猜錯了') guess_age() 請輸入年齡:18 猜對了 guess_age(20) # 實參上傳的值覆蓋了默認值 請輸入年齡:20 猜對了
在調用時,按照key = value 的形式爲指定的參數傳值,稱之爲關鍵字實參;形參名是什麼,則關鍵字實參名也必須是什麼。
def self_max(a,b): print(f'a:{a},b:{b}') res1 = self_max(b=30,a=20) a:20,b:30
特色:能夠打破位置的限制,但仍能爲指定的形參賦值。
注意:
def self_max(x,y,z,a,b): print(f'{x},{y},{z},a:{a},b:{b}') res1 = self_max(10,11,12,b=30,a=20) 10,11,12,a:20,b:30
可變長參數:指的是在調用函數時,傳入的參數個數能夠不固定。
調用函數時,傳值的方式無非兩種,一種是位置實參,另外一種試試關鍵字實參,所以形參額必須得有兩種解決方法,以此來分別接收溢出的位置實參(*)與關鍵字實參(**)。
形參中的 * 會將溢出的位置實參所有接收,以元祖的形式存儲,再把元祖賦值給 * 後的參數。注意:* 後的參數名約定俗成爲args。
def self_max(*args): print(args) res1 = self_max(10,11,12,13,14) 10 11 12 13 14
形參中的 ** 會將溢出的關鍵字實參所有接收,以字典的形式存儲,再把字典賦值給 ** 後的參數。注意:** 的參數名約定俗稱爲kwargs。
def self_max(**kwargs): print(kwargs) res1 = self_max(a=10,b=20,c=30,d=40) {'a': 10, 'b': 20, 'c': 30, 'd': 40}
實參中的 * ,會將 * 後參數的值循環取出,打散成位置實參。之後但凡碰到實參中帶 * 的,它就是位置實參,應該立刻打散成位置實參去看。
def self_max(*args): print(args) a = [1,2,3] # 把這個列表內的元素一個一個取出來,而後一個一個傳給這個函數 self_max(*a) (1, 2, 3)
實參中的 ** ,會將 ** 後參數的值循環取出,打散成關鍵字實參。之後但凡碰到實參中帶 ** 的,它就是關鍵字實參,應該立刻打散成關鍵字實參去看。
def self_max(**kwargs): print(kwargs) x = {'a':10,'b':20,'c':30,'d':40} res1 = self_max(**x) {'a': 10, 'b': 20, 'c': 30, 'd': 40}
*後面必須得寫args, ** 後面必須得寫kwargs,約定俗成的一種規範