函數
1、什么是函數
函數是組織好的,可重復使用的,用來實現單一,或相關聯功能的代碼段。
用人話來說就是:需要某塊代碼多次,為了提高編寫的效率以及代碼的重用,把具有獨立功能的代碼段組織為一個小模塊,需要時就可以直接調用,這就是函數
函數能提高應用的模塊性,和代碼的重復利用率
Python 定義函數使用 def 關鍵字,一般格式如下:
def 函數名(參數列表): ...... 函數體 ...... return 返回值
- def:表示函數的關鍵字
- 函數名:函數的名稱,日后根據函數名調用函數
- 函數體:函數中進行一系列的邏輯計算,如:發送郵件、計算出 [11,22,38,888,2]中的最大數等...
- 參數:為函數體提供數據
- 返回值:當函數執行完畢后,可以給調用者返回數據。
- 其中參數和返回值不是必須的
參考來自:https://www.cnblogs.com/saneri/p/10055615.html
2、函數的定義和調用
自定義一個函數,求和
# 自定義一個函數求兩個數 之和 def my_func(a,b): return a + b # 調用函數 f = my_func(3,88) # 打印結果 print(f)
運行結果:91
- 每次調用函數時,函數會從頭開始執行,當這個函數中的代碼執行完畢,也意味着調用結束
- 如果函數中執行到了return也會結束函數
3、函數的參數
3.1、實參和形參
# 自定義一個函數求兩個數 之和 def my_func(a,b): return a + b # 調用函數 f = my_func(3,88)
其中,上面代碼,定義時小括號中的參數,用來接收參數用的,稱為 “形參”;調用時小括號中的參數,用來傳遞給函數用的,稱為 “實參”(即a/b為形參,3/88為實參)
3.2、按調用函數時參數的書寫方式 分為:位置參數與關鍵字參數
位置參數
# 自定義一個函數求兩個數 之和 def my_func(a,b): return a + b # 調用函數時實參只輸入一個 f = my_func(3)
上面代碼運行時會報錯,因為定義函數時有兩個形參,而調用時只輸入了一個實參
結論:使用位置參數調用函數 需要注意實參的位置,實參的位置和形參的位置要一一對應,少傳一個實參會報錯
關鍵字參數
# 定義一個函數 def my_print(name, age, no): print("我的名字:%s" % name) print("我的年齡:%d" % age) print("學號:%s" % no) # 使用關鍵字參數方式調用函數 my_print(age=23,name='洗滌',no=1)
調用函數的時候使用的是函數的形參名;若關鍵字參數與位置參數混合使用,需要讓位置參數在前 ,關鍵字參數再后,某個參數使用了關鍵字參數,后面的都要使用關鍵字參數
3.3、默認參數(缺省參數)
默認參數即定義時給形參設置一個默認值,后面調用的時候這個參數就可以不寫,直接取默認值;也可以后面把一個新的值給到此參數,調用時不給值則默認
# 定義一個有默認參數的函數 def my_print(name, no, age=20): print("我的名字:%s" % name) print("我的年齡:%d" % age) print("學號:%s" % no) # 調用函數 my_print('小明','007')
運行結果:
我的名字:小明
我的年齡:20
學號:007
此時調用函數時可以不寫默認的那個參數,定義有默認參數的時候,需要把默認參數寫在最后
3.4、可變參數(可以實現函數定義,以及函數調用時,參數個數不匹配的情況)
待補充..................
4、函數的返回值(return+表達式)
用於退出函數,選擇性地向調用方返回一個表達式。不帶參數值的return語句返回None
4.1、單個返回值
# 定義一個求和函數 def smqh(a,b): re = a + b # 有一個返回值 return re d = smqh(23,2) print(d)
# 如果有一個return+數值,稱之為這個函數有返回值
4.2、多個返回值
def my_func(score): if score < 0: print("您傳入的分數有誤!!!") # 函數的執行提前結束 return #return后面沒有值,什么都不返回,這是性能才考慮到的,因為分數小於0 ,后面的不需要再比較,無意義 # 對分數進行判斷 if score >= 90: return "優" elif score >= 80: return "良" elif score >= 60: return "中" elif score >= 0: return "差" # 他不會執行 因為在前面已經執行了return print("測試")
return的作用:1、作為函數的返回值
2、執行的函數提前結束(一個函數中可以有多個return語句,只要有一個return語句被執行到,這個函數就會結束了,因此后面的return沒有什么用處)
5、函數的嵌套
# 寫一個函數打印一條橫線 def p_one_d(): print('-'*20) # 打印自定義函數的橫線 def p_line(num): for i in range(num): p_one_d() # 調用函數 p_line(3)
運行結果:
--------------------
--------------------
--------------------
函數p_one_d()嵌套在函數p_line()里面,調用函數p_line()時,p_line()函數多次調用了p_one(),這就是函數的嵌套調用
6、函數的文檔說明
看文檔說明需要用到python的內置函數help(),用來查看python函數的文檔說明
若自定義函數沒有文檔說明,使用help時默認會打印函數附近的注釋
其作用:1、可以在時間過了很久后 快速讀懂自己的代碼;2、便於工作的交接
格式:help(函數名稱)
def sumhe(num1,num2): ''' 這是求和的 :param num1:數字1 :param num2: 數字2 :return: 返回兩個數字相加 ''' return num1 + num2 help(sumhe)
================================================== 代碼運行結果: sumhe(num1, num2) 這是求和的 :param num1:數字1 :param num2: 數字2 :return: 返回兩個數字相加
7、匿名函數
###########普通函數############# # 定義一個普通求和函數 def suma(a,b): return a + b print(suma(3,4)) ###########lambda############# f = lambda a,b: a+b ret = f(3,2) print(ret)
lambda的意義就是為了簡潔的表達函數
解釋:lambda a,b : a + b
冒號左邊的lambda 相當於函數的名字(),a,b就是函數的形參;冒號右邊的內容就是函數的返回值
匿名函數有個限制,就是只能有一個表達式,不用寫return,返回值就是該表達式的結果
7.2、把函數當做參數傳遞
def sanf(a,b,c): print('a = %d' % a) print('b = %d' % b) print('result:%d' % c(a,b))#c是一個函數,當做參數來用 f = lambda a,b : a + b sanf(1, 3, f)
運行結果:
a = 1
b = 3
result:4
