python學習筆記day09 函式

2022-02-06 23:16:59 字數 4033 閱讀 3260

函式的定義和函式的呼叫不是一回事,程式執行時,遇到定義函式,只會執行定義函式名處,裡面的函式體這個時候是不會執行的;

只有到呼叫函式處才會執行裡面的函式體;

沒有返回值: 無 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):

sum=0

for i in

args:

sum+=i

print

(sum)

func(1,2,3,4) #

需按照位置引數進行傳遞

func(2,3,4,5,6,7,8)

動態引數*args 和位置引數,關鍵字引數放一起時的順序:位置引數,*args ,關鍵字引數;

def func(a,*args,b=10):

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

動態引數-- **kwargs-----傳入的值當成字典處理(按照關鍵字引數)

def func(**kwargs):  #

動態引數**kwargs,傳入的值當成字典處理

當位置引數,動態引數*args,關鍵字引數,動態引數**kwargs同時存在時:

def func(a,*args,b=2,**kwargs): #

位置引數,動態引數*args,關鍵字引數,動態引數**kwargs

print

(a)

print(args) #

傳入args的值被當成list;

print

(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):

sum=0

for i in

args:

sum+=i

print

(sum)

nums=[1,2,3,4,5]

func(nums[0],nums[1],nums[2],nums[3],nums[4])

func(*nums)

相當於呼叫函式處將nums列表的元素打散之後傳給動態引數*args,定義函式處,將打散的數再重新組合乘乙個tuple再來看呼叫函式處使用** 將字典打散:

def func(**kwargs):

print

(kwargs)

dic=

func(**dic)

之前一直沒搞懂的問題,現在終於懂了:

def func(l=):  #

使用的預設引數的值是乙個可變資料型別list

print

(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

'print

(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個消費者,同乙個訊息只能被乙個消費者獲取 訂閱模式 乙個生產者,多個消費者,每個消費者都有自己的乙個佇列 生產者沒有將訊息直接傳送到佇列,而是傳送到交換機 每個佇列都...