函數基礎(二)
阿新 • • 發佈:2018-03-27
基礎 問題 混合 傳值 形參與實參 順序 music AR AD
函數的參數
一、形參與實參
形參:在定義函數時括號內的定義的函數。相當於變量中的‘變量名’
實參:在調用函數時,括號內傳入的值。相當於變量當中的“變量的值”
函數在調用的時候將值綁定到變量名上,函數調用結束之後,解除綁定
二、參數的具體應用
1、位置參數(按照從左到右的順序定義的參數)
在定義函數時按照位置定義的函數就叫做位置函數
特性:在調用函數時必須按照位置為形參傳值,多一個不行,少一個也不行
# def foo(x,y,z):
# print(x,y,z)
# foo(1,2,3)
# 再調用函數時,按照位置定義的實參,稱為位置實參
# 位置實參會與形參一一對應
2、關鍵字參數
再調用函數時按照key-value的形式定義的實參,稱為關鍵字參數,關鍵字函數相當於指名道姓的為形參傳值,意味著即使不按照位置傳值,也可以為指定的參數傳值
# def foo(x,y,z):
# print(x,y,z)
# foo(x=1,y=3,z=5)
在調用函數時,位置實參可以和關鍵字參數混合使用,但是要註意以下幾點:
1、必須遵循形參的規則
2、不可以為同一個形參重復傳值
3、位置實參必須放到關鍵字實參前面
# def foo(x,y,z)
# print(x,y,z)
# foo(1,y=2,z=3)
3、默認參數
在定義階段已經為某個形參賦值,那麽該形參就稱為默認參數,定義階段有值就意味著調用階段可以不傳值。
默認參數的值只在定義階段賦值一次,也就是說默認參數的值在定義階段就已經固定死了
# def register(name,age,sex=‘male‘):
# print(name,age,sex)
# register(‘sean‘,20)
# register(‘able‘,25)
# register(‘jacky‘,30)
# register(‘lve‘,26,‘female‘)
# 默認參數的值應當設為不可變類型
# def register(name,hobby,l=None):
# if l is None:
# l=[]
# l.append(hobby)
# print(name,l)
# register(‘sean‘,‘paly‘)
# register(‘able‘,‘read‘)
# register(‘jacky‘,‘cook‘)
# register(‘lve‘,‘music‘)
對於經常需要變化的值,需要將對應的形參定義成位置形參
對於大多數情況都一樣的情況,就需要將對應的形參定義為默認參數
4、可變長參數
可變長度指的是參數的個數可以不固定,實參當中又按照位置定義的實參和按照關鍵字定義的實參,所以可變長的實參指的就是按照這兩種形式定義的實參個數可以不固定
其中在位置實參當中處理這種問題的方式是:“用*號將溢出的位置實參全部接收,然後保存成元組的形式賦值給args”
# def foo(x,y,z,*args) # print(x,y,z) # print(args)
# foo(1,2,3,4,5,6,7,8,9) #1,2,3,(4,5,6,7,8,9) # foo(1,2,3,*(4,5,6,7,8,9)) #*後面的實參可以是字符串、元組、列表 # foo(1,2,3,*[4,5,6,7,8,9]) # foo(1,2,3,*‘hello‘)
關鍵字參數:“用**將溢出的關鍵字實參全部接收,然後保存成字典的形式賦值給kwargs”
# def foo(x,y,z,**kwargs):
# print(x,y,z)
# print(kwargs)
# foo(1,2,3,a=4,b=5,c=6) # 1,2,3,{‘a‘:4,‘b‘:5,‘c‘:6}
函數基礎(二)