函式:函式的基本使用、函式引數的使用
阿新 • • 發佈:2022-01-11
一、函式的基本使用
1、什麼是函式
函式就類似於具備某一功能的工具,提前定義好之後可以反覆使用(即:函式就是盛放程式碼和功能的容器)
1.1函式的使用原則:
先定義,後呼叫
為何要用函式==>解決下述問題:
-
1.程式碼組織結構不清晰、過於冗餘、可讀性差
-
2.程式碼沒有返回值(無法使用之後的返回結果)
-
3.相容性、可維護性、可擴充套件性差、修改繁雜等等
如何用函式
-
先定義------> 三種定義方式
-
後呼叫------> 三種呼叫方式
-
返回值------> 三種返回值的形式
2、函式定義語法
def 函式名(引數1,引數2,引數3,...):'''函式的註釋''' 函式體程式碼 return 返回值 ''' 1.def: (必須) 定義函式的關鍵字; 2.函式名:(必須) 函式名指向函式記憶體地址,是對函式體程式碼的引用。函式的命名應該反映出函式的功能; 3.括號冒號:(必須) 括號後要加冒號,然後在下一行開始縮排編寫函式體的程式碼; 4.引數:(可選) 括號內定義引數,引數是可有可無的,且無需指定引數的型別; 5.函式註釋: (可選) 描述函式功能,引數介紹,非必要,但是建議加上,從而增強函式的可讀性; 6.函式體:(必須) 由語句和表示式組成; 7.return值:(可選) 定義函式的返回值,return是可有可無的。'''
3、函式的定義與呼叫
定義函式
定義函式發生的事情
-
1、在記憶體空間中申請一塊記憶體空間儲存函式體程式碼
-
2、將函式體程式碼所在的記憶體空間地址繫結給函式名
強調:定義函式只檢測語法,不執行程式碼
def login(): # login = 函式的記憶體地址 print(111) # 函式體程式碼 print(222) x = 10 # x = 10的記憶體地址 print(x) # 10 ''' 原則上列印應該返回記憶體地址,但是返回的是值。 變數名受到python直譯器特殊照顧由記憶體地址直接找到返回值列印。 '''print(login) # <function login at 0x7fa136db91f0> ''' 但函式名不同,列印顯示的是記憶體地址。定義函式的目的是為了把程式碼丟到容器, 只需要執行不需檢視。則無需被照顧。 '''
呼叫函式
呼叫函式發生的事情:
-
1、先通過函式名定位到函式的記憶體地址
-
2、函式名加括號會觸發函式體程式碼的執行
強調:呼叫函式才會執行函式體程式碼
# 示例: def login(): print('hello') login() # hello 觸發函式體程式碼的執行 # 語法錯誤 def func(): print(111 # 無效語法,定義階段都無法通過 # 邏輯錯誤 def func(): print(111) x # x 沒有定義,變數名也需要先定義後引用 func() # 呼叫肯定出錯 # 示例: def bar(): print('from bar') def foo(): print('from foo') bar() foo() ''' from foo from bar ''' # 語法錯誤 def foo(): print('from foo') bar() foo() # bar沒有定義,呼叫肯定出錯 def bar(): print('from bar')
4、定義函式的三種形式
1.無參函式
- 函式在定義階段括號內沒有引數
# 函式體不需要外部傳引數進行,它本身程式碼就是固定的,所以就是無參函式 def say(): print('welcome to here') say() # 引數是函式的呼叫者向函式體傳值的媒介,有參無參是根據函式體程式碼去走的,看函式體程式碼是否需要外部傳引數 def login(): inp_name = input("請輸入使用者名稱>>>: ").strip() inp_pwd = input("請輸入密碼>>>: ").strip() if inp_name == "jack" and inp_pwd == "123": print('登入成功!') else: print("使用者名稱或密碼錯誤") login() # 直接呼叫無需傳引數,input功能已經實現與使用者互動
2.有參函式
- 函式在定義階段括號內有引數
# 函式體程式碼需要外部傳引數進行,這種函式就需要定義為有參函式 def max2(x, y): # 引數---》原材料 if x > y: print(x) else: print(y) max2(10,20)
3.空函式
- 函式在定義階段括號內沒有引數,並且函式體程式碼為空(pass)
# 函式體為pass代表什麼都不做,稱之為空函式。定義空函式通常是有用的,因為在程式設計的開始,往往是先想好程式都需要完成什麼功能,然後把所有功能都列舉出來用pass充當函式體“佔位符”,這將使得程式的體系結構清晰且可讀性強。例如要編寫一個程式,我們可能想到的功能有使用者認證,下載,上傳,等功能,可以先做出如下定義: def auth_user(): """使用者認證""" pass # 代表佔位符 def download_file(): """下載檔案""" pass def upload_file(): """上傳檔案""" pass
呼叫函式的三種形式
# 1.語句 len("hello") # 單純的呼叫,例如len統計hello的長度 # 2.表示式 res = len("hello") # 將呼叫函式的返回值賦值給res res = len("hello") * 10 # 將呼叫函式的返回值乘以10的結果賦值給res print(res) # 3 .可以當做引數傳給另外一個函式 len("hello") # 從形式上看就是將函式呼叫,從本質講是跟2同理 print(len("hello")) # 先調len的返回值然後再賦值給print
函式的返回值
return 詳解
def max(x, y): if x > y: return x else: return y res = max(10, 20) print(res)
1、return是一個函式結束的標誌,函式可以有多個return,但只要執行一次return,整個函式就立即結束,並且將return後的值當做本次呼叫的結果返回
def func(): print("=====") # 只執行到了此行 return 111 # return後的值當做本次呼叫的結果返回 print("****") # ruturn 下面的值不會被執行 return 222 res = func() print(res) ''' ===== 111 '''
-
2、return後的返回值有三種情況
- 1)函式內可以沒有return 或者 return None 或者 return:返回的都是None
- 2)return 值:返回的就是這一個值
- 3)return 值1,值2,值3:會自動組織成一個元組返回
# 示例1: def func(): print(111) return print(2222) res = func() print(res) ''' 111 None ''' # 示例2: def func(): return 111,"xxx",[22,33] res = func() print(res) # (111,"xxx",[22,33])返回的是元組