python-之函數基礎知識
阿新 • • 發佈:2017-12-07
可變 外部 max 冗余 錘子 python 空函數 位置 遇到 三 、函數分類
一 、為何要用函數之不用函數的問題
#1、代碼的組織結構不清晰,可讀性差 #2、遇到重復的功能只能重復編寫實現代碼,代碼冗余 #3、功能需要擴展時,需要找出所有實現該功能的地方修改之,無法統一管理且維護難度極大
二、 函數是什麽
針對二中的問題,想象生活中的例子,修理工需要實現準備好工具箱裏面放好錘子,扳手,鉗子等工具,然後遇到錘釘子的場景,拿來錘子用就可以,而無需臨時再制造一把錘子。 修理工===>程序員 具備某一功能的工具===>函數 要想使用工具,需要事先準備好,然後拿來就用且可以重復使用 要想用函數,需要先定義,再使用
三 、函數分類
#1、內置函數 為了方便我們的開發,針對一些簡單的功能,python解釋器已經為我們定義好了的函數即內置函數。對於內置函數,我們可以拿來就用而無需事先定義,如len(),sum(),max() ps:我們將會在最後詳細介紹常用的內置函數。 #2、自定義函數 很明顯內置函數所能提供的功能是有限的,這就需要我們自己根據需求,事先定制好我們自己的函數來實現某種功能,以後,在遇到應用場景時,調用自定義的函數即可。例如
四、如何自定義函數?
#語法 def 函數名(參數1,參數2,參數3,...): ‘‘‘註釋‘‘‘ 函數體 return 返回的值 #函數名要能反映其意義
五、 定義函數的三種形式
#1、無參:應用場景僅僅只是執行一些操作,比如與用戶交互,打印 #2、有參:需要根據外部傳進來的參數,才能執行相應的邏輯,比如統計長度,求最大值最小值 #3、空函數:設計代碼結構
六、調用函數
1、調用函數
函數的調用:函數名加括號 1 先找到名字 2 根據名字調用代碼
2、函數返回值
無return->None return 1個值->返回1個值 return 逗號分隔多個值->元組
什麽時候該有返回值? 調用函數,經過一系列的操作,最後要拿到一個明確的結果,則必須要有返回值 通常有參函數需要有返回值,輸入參數,經過計算,得到一個最終的結果 什麽時候不需要有返回值? 調用函數,僅僅只是執行一系列的操作,最後不需要得到什麽結果,則無需有返回值 通常無參函數不需要有返回值
3、函數調用的三種形式
1 語句形式:foo() 2 表達式形式:3*len(‘hello‘) 3 當另外一個函數的參數:range(len(‘hello‘))
七、函數的參數
1、形參與實參
#形參即變量名,實參即變量值,函數調用時,將值綁定到變量名上,函數調用結束,解除綁定
2、具體應用(重點)
#1、位置參數:按照從左到右的順序定義的參數 位置形參:必選參數 位置實參:按照位置給形參傳值 #2、關鍵字參數:按照key=value的形式定義的實參 無需按照位置為形參傳值 註意的問題: 1. 關鍵字實參必須在位置實參右面 2. 對同一個形參不能重復傳值 #3、默認參數:形參在定義時就已經為其賦值 可以傳值也可以不傳值,經常需要變得參數定義成位置形參,變化較小的參數定義成默認參數(形參) 註意的問題: 1. 只在定義時賦值一次 2. 默認參數的定義應該在位置形參右面 3. 默認參數通常應該定義成不可變類型 #4、可變長參數: 可變長指的是實參值的個數不固定 而實參有按位置和按關鍵字兩種形式定義,針對這兩種形式的可變長,形參對應有兩種解決方案來完整地存放它們,分別是*args,**kwargs ===========*args=========== def foo(x,y,*args): print(x,y) print(args) foo(1,2,3,4,5) def foo(x,y,*args): print(x,y) print(args) foo(1,2,*[3,4,5]) def foo(x,y,z): print(x,y,z) foo(*[1,2,3]) ===========**kwargs=========== def foo(x,y,**kwargs): print(x,y) print(kwargs) foo(1,y=2,a=1,b=2,c=3) def foo(x,y,**kwargs): print(x,y) print(kwargs) foo(1,y=2,**{‘a‘:1,‘b‘:2,‘c‘:3}) def foo(x,y,z): print(x,y,z) foo(**{‘z‘:1,‘x‘:2,‘y‘:3}) ===========*args+**kwargs=========== def foo(x,y): print(x,y) def wrapper(*args,**kwargs): print(‘====>‘) foo(*args,**kwargs) #5、命名關鍵字參數:*後定義的參數,必須被傳值(有默認值的除外),且必須按照關鍵字實參的形式傳遞 可以保證,傳入的參數中一定包含某些關鍵字 def foo(x,y,*args,a=1,b,**kwargs): print(x,y) print(args) print(a) print(b) print(kwargs) foo(1,2,3,4,5,b=3,c=4,d=5) 結果: 2 (3, 4, 5) 3 {‘c‘: 4, ‘d‘: 5}
python-之函數基礎知識