【目錄】
一、什么是函式
二、為何要有函式
三、如何使用函式
(一)定義函式
(二)呼叫函式
(三)函式回傳值
一、什么是函式
為了方便重復使用某些需要的代碼功能,因此創造了很多代碼工具,給它們命名為‘函式’,
在程式中,具備某一功能的‘工具’——函式
‘事先準備工具’的程序——函式的定義
‘拿來就用’——函式的呼叫
函式的分類:
#1、內置函式
為了方便我們的開發,針對一些簡單的功能,python解釋器已經為我們定義好了的函式,即內置函式,對于內置函式,我們可以拿來就用而無需事先定義,如 len(),sum(),max()
#2、自定義函式
很明顯內置函式所能提供的功能是有限的,這就需要我們自己根據需求,事先定制好我們自己的函式來實作某種功能,以后,在遇到應用場景時,呼叫自定義的函式即可,
二、為何要有函式
為了解決以下程式代碼問題:
#1、代碼的組織結構不清晰,可讀性差
#2、遇到重復的功能只能重復撰寫實作代碼,代碼冗余
#3、功能需要擴展時,需要找出所有實作該功能的地方修改之,無法統一管理且維護難度極大
三、如何使用函式
函式的使用分為定義階段與呼叫階段,
定義函式時只檢測語法,不執行函式體代碼,
函式名加括號即函式呼叫,只有呼叫函式時才會執行函式體代碼
定義函式發生的事情
1、申請記憶體空間保存函式體代碼
2、將上述記憶體地址系結函式名
3、定義函式不會執行函式體代碼,但是會檢測函式體語法
呼叫函式發生的事情
1、通過函式名找到函式的記憶體地址——print(func)
2、然后加括號就是在觸發函式體代碼的執行 ——func()
(一)定義函式——三種方式
函式的使用必須遵循’先定義,后呼叫’的原則,
函式的定義就相當于 事先將函式體代碼保存起來,然后將記憶體地址賦值給函式名,函式名就是對這段代碼的參考,這和變數的定義是相似的,沒有事先定義函式而直接呼叫,就相當于在參考一個不存在的’變數名’,
def 函式名(引數1,引數2,...):
"""檔案描述"""
函式體
return 值
- def: 定義函式的關鍵字;
- 函式名:函式名指向函式記憶體地址,是對函式體代碼的參考,函式的命名應該反映出函式的功能;
- 括號:括號內定義引數,引數是可有可無的,且無需指定引數的型別;
- 冒號:括號后要加冒號,然后在下一行開始縮進撰寫函式體的代碼;
- """檔案描述""" 描述函式功能,引數介紹等資訊的檔案,非必要,但是建議加上,從而增強函式的可讀性;
- 函式體:由陳述句和:達式組成;
- return 值:定義函式的回傳值,return是可有可無的,
1、方式一:無參函式
# 示范1——先定義函式,后呼叫函式
def bar(): #定義函式 bar(), bar=函式的記憶體地址 print('from bar') def foo(): # print(bar) # 輸出的是函式的記憶體地址 <function bar at 0x0000021D5885A0D0> bar() #呼叫函式bar() print('from foo') foo() #呼叫函式foo()
# 示范2——定義函式的部分,放在呼叫陳述句之后,但是在呼叫函式執行之前
def foo(): bar() #此處還未呼叫函式bar(),只是判斷是否有語法錯誤 print('from foo') # 定義函式 bar() def bar(): # bar=函式的記憶體地址 print('from bar') foo() #呼叫函式bar()
# 示范3———定義函式的部分,放在呼叫陳述句之后,且在呼叫函式執行之后,此時會出錯哦
def foo(): # print(bar) bar() print('from foo') foo() def bar(): # bar=函式的記憶體地址 print('from bar') NameError: name 'bar' is not defined
2、方式二:有參函式——引數是函式的呼叫者向函式體傳值的媒介
函式——工廠
引數——原材料
回傳值——產品
def my_min(x,y): res=x if x < y else y return res
3、方式三:空函式——函式體代碼為 pass,代表什么都不做
定義空函式通常是有用的,因為在程式設計的開始,往往是先想好程式都需要完成什么功能,
然后把所有功能都列舉出來用pass充當函式體“占位符”,這將使得程式的體系結構立見,清晰且可讀性強,
之后我們便可以統籌安排編程任務,有選擇性的去實作函式體功能來替換掉pass,從而提高開發效率,
【栗子】:撰寫一個ftp程式,我們可能想到的功能有用戶認證,下載,上傳,瀏覽,切換目錄等功能,可以先做出如下定義,再有選擇性地實作函式體代碼——
def auth_user(): """user authentication function""" pass def download_file(): """download file function""" pass def upload_file(): """upload file function""" pass def ls(): """list contents function""" pass def cd(): """change directory""" pass
4、三種定義函式方式的使用場景:
(1)無參函式
def interactive(): name=input('username>>: ') age=input('age>>: ') gender=input('gender>>: ') msg='名字:{} 年齡:{} 性別'.format(name,age,gender) print(msg) interactive() interactive() interactive() interactive()
(2)有參函式
def add(x,y): # 引數-》原材料 # x=20 # y=30 res=x + y # print(res) return res # 回傳值-》產品 # add(10,2) res=add(20,30) print(res)
(3)空函式
參考上一小節內容中的【栗子】——撰寫一個ftp程式
(二)呼叫函式——
按照在程式出現的形式和位置,可將函式的呼叫形式分為三種:
1、陳述句的形式:只加括號呼叫函式
interactive()
add(1,2)
2、運算式形式
def add(x,y): # 引數-》原材料 res=x + y return res # 回傳值-》產品 賦值運算式 res=add(1,2) print(res) 數學運算式 res=add(1,2)*10 print(res)
3、函式呼叫可以當做引數
res=add(add(1,2),10) print(res)
(三)函式回傳值
1、return
#若需要將函式體代碼執行的結果回傳給呼叫者,則需要用到return,
#return的回傳值無型別限制,且可以將多個回傳值放到一個元組內,
# return是函式結束的標志,即函式體代碼一旦運行到 return,會立刻終止函式的運行;
函式內可以有多個return,但只執行一次函式就結束了,并且會將 return后的值當做本次運行的結果回傳,
#PS:
結束程式的執行的力度:
exit > return > break > 條件為假
(1)回傳None:函式體內的return后無值或直接省略return,則默認回傳none
return
return None
def func(): pass res=func() print(res) # 回傳值None
(2)有return,回傳一個值
def func(): return (10) res=func() print(res) # 回傳值為10
(3)有return,回傳多個值——逗號分隔開多個值,默認回傳元祖
def func(): return (10,'cc',[1,2]) res=func() print(res,type(res)) # 回傳值為元祖(10, 'cc', [1, 2])
參考資料:
https://www.cnblogs.com/linhaifeng/articles/7531972.html
https://zhuanlan.zhihu.com/p/108808009
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/175716.html
標籤:Python
上一篇:在python檔案中操作django orm提示環境變數設定問題
下一篇:LeetCode | 1160. Find Words That Can Be Formed by Characters拼寫單詞【Python】
