1. 程式人生 > 實用技巧 >函式的引數

函式的引數

一、函式的引數分為形參與實參 (1)形參:在函式定義階段,括號內定義的引數(變數名),稱之為形式引數,簡稱形參 deffunc(x,y): print(x,y) (2)實參:在函式呼叫階段,括號內傳入的值(變數值),稱之為實際引數,簡稱實參 func(1,2)
二、詳細介紹形參與實參 2.1 位置引數 (1)位置形參:在函式定義階段,按照從左到右的順序依次定義的形參 特點:必須被傳值 deffunc(x,y): print(x,y)
(2)位置實參:在函式呼叫階段,按照從左到右的順序依次傳入的值 特點:按照位置與形參一一對應 func(1,2) func(1,2,3) func(1,)
func(1,2,3,4,5,) 2.2關鍵字實參: 在函式呼叫階段,按照key=value的形式傳值 特點:可以打破傳值的順序,但仍能指名道姓地為形參賦值 func(y=2,x=1)
注意:可以混用位置實參與關鍵字實參,但是 (1)位置實參必須放在前面 (2)不能為同一個形參重複賦值 func(111,y=2) func(y=2,111) func(111,x=222,y=333)
2.3預設形參: 在函式定義階段,就已經為形參賦值,該形參稱之為預設形參 特點:呼叫時可以不用為預設形參傳值 deffunc(x,y=222): print(x,y)
func(111) func(111,333)
注意:可以混用位置形參與預設形參,但是 (1)位置形參必須放在前面 (2)預設形參的值只在函式定義階段賦值一次,拿到的一個記憶體地址 為函式的每次呼叫都是獨立,預設形參的值通常應該是不可變 deffunc(y=222,x): print(x,y)
m=222 m=[]
deffunc(x,y=m): print(x) print(y)
m=333 m.append(44444444444) func(111)

deffunc(name,hobby,hobbies=None): #name="egon" #hobby="music" ifhobbiesisNone: hobbies=[] hobbies.append(hobby) print('%s的愛好是%s'%(name,hobbies))
func('egon','music')
func('lili','read')
func('jack','movie')
#案例;

def register(name,age,sex='male'):
    print(name,age,sex)

register("sean",18)
register("jack",19)
register("tom",20)
register("lili",21,'female')
三、 *與**在形參與實參的應用 可變長的實參指的是在呼叫函式時括號內傳入的實參值的個數不固定 而實參無非兩種格式:位置實參\關鍵字實參 對應著必須有專門的形參來接收溢位位置實參與關鍵字實參
3.1*與**在形參中的應用 (1)*在形參中:*會把溢位的位置實參存成元組的形式,然後賦值給其後的形參名 deffunc(x,*args):#x=1,args=(2,3) print(x,args)
func(1,2,3)

(2)**在形參中:**會把溢位的關鍵字實參存成字典的形式,然後賦值給其後的形參名 deffunc(x,**kwargs):#x=1,kwargs={"c":3,"a":1,"b":2} print(x,kwargs)
func(x=1,a=1,b=2,c=3)
3.2*與**在實參中的應用 deffunc(x,y,z): print(x,y,z)
(1)*在實參中:*會將實參值打散成位置實參 func(*[1,2,3])#func(1,2,3)
(2)**在實參中:**會將字典格式的實參值打算成關鍵字實參 func(**{"a":1,'b':2,'c':3})#func(a=1,b=2,c=3) func(**{"x":1,'y':2,'z':3})#func(x=1,z=3,y=2)
func(*"hello")# func(*{"aaa":1,'bbb':2,'ccc':3})#func('aaa','bbb','ccc')

3.3可以混用:**必須在*的後面 defwrapper(*args,**kwargs):#args=(1,2,3,4,5)kwargs={"a":1,'b':2,'c':3} print(args) print(kwargs)
wrapper(1,2,3,4,5,a=1,b=2,c=3)

defwrapper(*args,**kwargs):#args=("h","e")kwargs={"a":1,'b':2,'m':333,'n':4444} print(args) print(kwargs)
wrapper(*'he',a=1,b=2,**{'m':333,'n':4444})#wrapper("h","e",a=1,b=2,n=4444,m=333)


非常重要的一種格式 defindex(x,y): print('index===>',x,y)
defwrapper(*args,**kwargs):#args=(1,2,3)kwargs={"a":1,'b':2,'c':3} index(*args,**kwargs)#index(*(1,2,3).**{"a":1,'b':2,'c':3}) #index(1,2,3,a=1,b=2,c=3)
#index(1,y=2)
wrapper(1,y=2)