函式的定義和函式的呼叫不是一回事,程式執行時,遇到定義函式,只會執行定義函式名處,裡面的函式體這個時候是不會執行的;
只有到呼叫函式處才會執行裡面的函式體;
沒有返回值: 無 return; -----返回none
只有 return;----返回none
return none----返回none
有返回值: 可以返回任意資料型別;
返回多個值時,可以用多個變數接收,但是變數要對應,不多不少;或者只用乙個變數接收也可以;
定義函式處的引數為形參,形參可以包括位置引數和關鍵字引數(又稱預設引數)且位置引數必須在關鍵字引數之前;
呼叫函式處的引數為實參,實參也包括位置引數和關鍵字引數,位置引數在前,關鍵字引數在後;
並且上述兩種引數都可以只用位置引數,或者只使用關鍵字引數,當混用時需要滿足位置引數在前的原則;
def func(a,b): #形參僅使用位置引數;
print(a+b)
func(1,2) #
實參採用位置引數,一一對應 a=1;b=2
func(1,b=2) #
位置引數和關鍵字引數同時使用,位置引數在前;
func(b=1,a=2) #
使用關鍵字引數,可以不按形參順序賦值;
def func(a,b=2): #形參同時使用位置引數和關鍵字引數,位置引數在前;
print(a+b)
func(1,2) #
實參採用位置引數,一一對應 a=1;b=2
func(1,b=4) #
位置引數和關鍵字引數同時使用,位置引數在前;
func(b=1,a=2) #
使用關鍵字引數,可以不按形參順序賦值;
def func(a=3,b=2): #也就是不管定義時形參採取什麼樣的引數形式,呼叫時實參可以採用上述三種方式;形參使用關鍵字引數;
print(a+b)
func(1,2) #
實參採用位置引數,一一對應 a=1;b=2
func(1,b=4) #
位置引數和關鍵字引數同時使用,位置引數在前;
func(b=1,a=2) #
使用關鍵字引數,可以不按形參順序賦值;
動態引數-- *args ----傳入的值被當成tuple處理(按照位置引數)
定義時採用動態引數 *args 呼叫時可以傳無數個引數,但是需要按照位置引數進行傳遞;
比如我們想計算很多個數的和,可能計算三個數,也可能計算100個數,,,
def func(*args):動態引數*args 和位置引數,關鍵字引數放一起時的順序:位置引數,*args ,關鍵字引數;sum=0
for i in
args:
sum+=i
(sum)
func(1,2,3,4) #
需按照位置引數進行傳遞
func(2,3,4,5,6,7,8)
def func(a,*args,b=10):動態引數-- **kwargs-----傳入的值當成字典處理(按照關鍵字引數)sum=0
for i in
args:
sum+=i
print(sum+a-b)
func(1,2,3,4,b=2) #
傳遞進去時a被賦值為1,而2,3,4 傳給了動態引數args,b的值採用關鍵字引數賦值為2
func(2,3,4,5,6,7,8) #
傳遞進去時a被賦值為2,而3,4,5,6,7,8 傳給了動態引數args,b的值採用預設值10
def func(**kwargs): #動態引數**kwargs,傳入的值當成字典處理
當位置引數,動態引數*args,關鍵字引數,動態引數**kwargs同時存在時:
def func(a,*args,b=2,**kwargs): #執行結果:位置引數,動態引數*args,關鍵字引數,動態引數**kwargs
(a)
print(args) #
傳入args的值被當成list;
(b)
print(kwargs) #
傳入**kwargs的值被當成字典
func(1,2,3,4,5,b=7,c=9,d=2) #
1->a; 2,3,4,5-->args; 7---->b c:2,d:9----> kwargs;
func(1,2,3,4,5,c=8,d=9) #
1->a; 2,3,4,5-->args; 2(預設)(而不是前面的5)---->b c:2,d:9----> kwargs;
順序:位置引數,動態引數*agrs,關鍵字引數,動態引數**kwargs
def func(*args):相當於呼叫函式處將nums列表的元素打散之後傳給動態引數*args,定義函式處,將打散的數再重新組合乘乙個tuple再來看呼叫函式處使用** 將字典打散:sum=0
for i in
args:
sum+=i
(sum)
nums=[1,2,3,4,5]
func(nums[0],nums[1],nums[2],nums[3],nums[4])
func(*nums)
def func(**kwargs):之前一直沒搞懂的問題,現在終於懂了:(kwargs)
dic=
func(**dic)
def func(l=): #使用的預設引數的值是乙個可變資料型別list
(l)func()
#l=[1]
func() #
func() #
l=[1,1] #使用的仍然是預設引數的值-->可變list 還是使用的原來那個list,也就是位址沒變,但是list值變了,func()--->l=[1],還是,現在又增加了乙個1--->[1,1]
再舉乙個例子,仍然是定義函式處使用的預設引數的值為可變資料型別:
形參中的預設引數是可變資料型別,實參不傳參,則始終操作的都是同乙個資料型別(可變),所以預設引數這個可變資料型別的值是會發生改變的!!!
def func(k,dic={}): #位置引數k,關鍵字引數dic 是乙個可變資料型別:字典
dic[k]='
value
(dic)
func(1) #
傳的位置引數1賦值給k 作為字典的鍵, 值為value--->dic=
func(2) #
字典仍使用預設引數,使用原來那個位址,但是這個字典不再是空的了,因為它會變化!--dic=
func(3) #
dic=
python學習系列 day09
一 圖形介面 1 tkinter 2 turtle 二 網路程式設計 1 tcp程式設計 1 客戶端 import socket s socket.socket socket.af inet,socket.sock stream af inet表示利用的ipv4,af inet6表示用ipv6。so...
前端筆記day09
1 完 員列表的刪除功能 姓名姓別 刪除 2 vue的v for語法可以遍歷那些值,分別寫出遍歷不同值的 1 迭代數字 這是第 個p標籤 2 迭代data中的普通物件 3 迭代data中的陣列 3 文字敘述v model和v bind的差別 1 v bind動態繫結指令,預設情況下標籤自帶屬性的值是...
淘淘商城筆記 day09
耦合度是指其他團隊的版本公升級會影響到我們系統 簡單佇列 生產者將訊息傳送到佇列,消費者從佇列中獲取訊息 work模式 乙個生產者,2個消費者,同乙個訊息只能被乙個消費者獲取 訂閱模式 乙個生產者,多個消費者,每個消費者都有自己的乙個佇列 生產者沒有將訊息直接傳送到佇列,而是傳送到交換機 每個佇列都...