2022.3.16學習筆記
2022.3.16筆記總結
- 函式的定義與呼叫
- 函式的分類
- 函式的返回值
- 函式的引數
一、函式的的定義與呼叫
定義函式:
def func():
'''這裡是註釋'''
迴圈體程式碼
return 返回值
呼叫函式:
函式名()
func() # 即可呼叫
注意:
1、函式必須先定義才能呼叫
2、函式在定義階段只檢測語法不執行程式碼,呼叫時才執行
3、函式名可以當作變數名,指向的時記憶體中函式體程式碼所在的位置
二、函式的分類
1、內建函式:
python直譯器中提前定義好的可以直接呼叫的函式,一開啟python直譯器就可以直接呼叫
eg:len(),print()等
2、自定義函式:
即程式設計師自己編寫的函式
2.1無參函式:
在函式定義階段括號內沒有引數的函式
def func(): # 定義無參函式
print('666') # 666
func() # 無參函式呼叫時括號內無需寫引數
2.2有參函式:
在函式定義階段括號內有引數的函式
def func(a,b): # 定義函式時有引數
print(a,b) # 1,2
func(1,2) # 呼叫時也需要傳引數
2.3空函式:
函式定義時函式體程式碼用pass或者...代替
def run(): pass # 函式體程式碼用pass代替 def study(): # 先構思主題功能 pass def eat(): pass
由此可見,空函式並非一無是處,寫一些比較複雜的程式碼時可以先構思並搭好框架,也不一定一定能用到。
三、函式的返回值
1、返回值的概念:
函式的返回值就是在呼叫函式之後返回的結果
def func():
print('666')
res = func() # 666 返回值需要用一個變數名指向
2、如何獲取返回值
變數名 = 函式呼叫
res = func()
3、如何操作返回值
3.1return關鍵字
函式體程式碼後面跟return關鍵字,return後面空一格然後寫需要返回的值,那麼函式呼叫就會返回return後面的內容
def func(): a = 6 b = 7 c = a * b return c # return後面是函式呼叫會返回的資料 res = func() print(res) # 42
3.2有return關鍵字但是後面沒有內容
當函式呼叫時函式體程式碼結束後有return但是後面沒有內容,預設返回值為None
def func():
a = 6
b = 7
c = a * b
return # return後面沒有內容
res = func()
print(res) # None
3.3沒有return關鍵字
函式體程式碼後沒有return則預設返回值為None
3.4return後面有多個值
當return後面有多個值並用逗號隔開則會自動組成元組作為返回值返回
def func():
a = 6
b = 7
c = a * b
return a,b,c # return後面為多個單個元素
res = func()
print(res) # 結果為tupl(6,7,42)
3.5return的作用
return的作用,不僅是返回return後面的內容,當函式體程式碼執行到return時會自動結束函式執行,相當於迴圈體程式碼裡面的break
四、函式的引數
1、函式引數的分類
第一類:定義階段括號裡面寫的引數,稱之為形式引數,簡稱形參
第二類:呼叫階段括號裡面寫的引數,稱之為實際引數,簡稱實參
2、形參與實參的關係
關係1:形參類似於是變數名,實參類似於是變數名的值
關係2:形參是函式定義時定義的,實參時函式呼叫時獲取的,實參用於向形參傳值,函式呼叫時形成繫結關係,函式執行結束後解除繫結
def func(a,b): # 括號內的a,b就是形參,在函式體中可能會用到的引數
c = a + b
return c
res = func(1,2) # 括號內的1,2就是實參
print(res) # 3
注意:實參可以是變數名、具體值、函式返回值等多種形式
3、位置引數
3.1位置形參:
在函式定義階段在括號內從左往右依次填寫的變數名
def func(a,b):
pass
3.2位置實參:
在函式呼叫階段括號內從左往右傳入的實際資料
def func(a,b):
pass
func(1,2)
3.3位置引數的特徵
特徵1:位置形參和實參都是按照從左往右的順序依次繫結關係的
特徵2:位置形參有幾個,位置形參就必須傳入幾個資料
def func(a,b,c,d,e,f):
pass
func(1,2,3,4,5,6) # 位置實參需與位置形引數量一一對應才能呼叫
4、關鍵字引數(實參)
概念:
關鍵字引數一般指關鍵字實參,是在函式呼叫階段知名道姓地向形參傳值的一種引數
def func(a,b,c):
pass
func(b=2,a=1,c=4) # 呼叫1,關鍵字引數可以不按照順序
func(1,c=4,b=2) # 呼叫2,位置引數需要在關鍵字引數前
注意:
1.指定給某個引數傳值,可以不按照順序但是不能重複傳值
2.位置引數必須放在關鍵字引數前面
5、預設引數(形參)
概念:
預設引數一般是指形參中指定某一引數在函式定義時就已經賦值了的引數
def func(a,b,c=4): # 函式定義時c賦值為4
pass
func(1,2) # 引數c不寫呼叫函式執行時預設為4
func(1,2,3) # 引數c傳入與函式賦值不同,使用新傳入的值
6、可變長引數(重要)
6.1概念:
函式在定義階段可以接收多個實參且不會報錯的引數
6.2*args和**kwargs:
*a:用於接收多餘位置引數,該引數以後的值都會被接收並組成元組賦值給a(a可以是任意變數,一般使用args)
def func(a,b,*c):
pass
func(1,2,3,4,5,6,7,8,9...) # 1,2實參會被位置形參a,b接收,後面的資料都會被*c接收並組成元組c=(3,4,5,6,7,8,9...)
**b:用於接收多餘關鍵字引數,該引數以後的值都會被接收並組成字典賦值給b(b可以是任意變數,一般使用kwargs)
def func(a,b,**c):
pass
func(a=1,b=2,d=3,e=4,f=5...) # 關鍵字實參a=1,b=2會被位置形參a,b接收,後面的資料都會被*c接收並組成字典c=(d:3,e:4,f:5,...)
6.3*args和**kwargs聯合使用
兩者聯合使用可以接收任意型別引數
def func(*args,**kwargs):
print(args,kwargs)
func() # () {}
func(1,2,3,4,name='jason',age=18) # (1,2,3,4) {name:'jason',age:18}
因此用此方法,當不確定需要多少個實參時可以使用
6.4可變長引數補充說明
*和**不單單可以在形參中使用 還可以在實參中使用:
*可以將元組和列表打散成位置實參一一傳入
**可以將字典打散後將鍵值對當成關鍵字實參一一傳入
def func(*args,**kwargs):
print(args,kwargs)
func(*[1,2,3,4,5,6]) # 等同於func(1,2,3,4,5,6)
func(**{'name':'jason','age':18}) # 等同於func(name='jason',age=18)
作業
思考如何將週末大作業優化成函式版本?