def func(a=1,b=2,c=3): #形參有預設值
print a,b,c
func()
func(4,5,6)
func(5,6)
func(7)
func(a=8)
func(a=9,b=10)
func(11,c=12) #func(11,a=12)和func(a=12,13)是錯誤的
def calcsum(*args):#可以接受任意數量的引數
sum=0
for i in args:
sum+=i
print sum
#呼叫:
calcsum(1,2,3)
calcsum(123,456)
calcsum()
#在變數前加上*,呼叫時的引數會儲存在乙個tuple(元組)物件中,賦值給形參。
#在函式內部需要對引數進行處理時,只要對這個tuple型別的形參進行操作就可以了
#因此函式在定義時不需要指明引數個數,就可以處理任意引數個數的情況
#tuple是有序的,所以args中元素的順序受到賦值時的影響
def printall(*args):
for i in args:
print i,
printall(1,2,3)
printall(3,2,1)
#可以按照函式名傳遞引數,不受位置的限制,也可以像tuple傳遞一樣不受限制
#func2(**kargs)則是把引數以鍵值對字典的形式傳入
def printall(**kargs):
for k in kargs:
print k,':',kargs[k]#字典是無序的,故在輸出的時候,不一定按照提供引數的順序
#呼叫時,引數的順序無所謂,只要對應合適的形參名就可以
printall(a=1,b=2,c=3)
printall(x=4,y=5)
#混合的引數呼叫方式
def func3(x,y=5,*a,**b):
print x,y,a,b
func3(1) #混合使用時,首先注意函式的寫法,必須遵守:
func3(1,2) #帶有預設值的形參(arg=)須在無預設值的形參之後;
func3(1,2,3) #元組引數(*args)須在帶有預設值的形參(arg=)之後;
func3(x=1) #字典引數(**kargs)須在元組引數(*args)之後
func3(x=1,y=1)
func3(x=1,y=1,a=1,b=1) #可以省略某種型別的引數,仍需保證此順序規則
func3(1,y=1) #呼叫時遵守
func3(1,2,3,4,a=1) #指定引數名稱的引數要在沒指定名稱的引數之後
func3(1,2,3,4,k=1,t=0,o=3) #不可以重複傳遞
'''
#函式被呼叫時,引數的傳遞過程為:
#1.按順序把沒指定引數的實參賦給形參
#2.把指定引數名稱(args=v)的實參賦給對應的形參;
#3.將多餘的沒指定引數的實參打包成乙個tuple傳遞給元組引數(*args);
#4.將多餘的指定引數名的實參打包成乙個dict傳遞給字典引數(**kargs)
'''
函式的引數傳遞
一 函式引數傳遞機制的基本理論 函式引數傳遞機制問題在本質上是呼叫函式 過程 和被呼叫函式 過程 在呼叫發生時進行通訊的方法問題。基本的引數傳遞機制有兩種 值傳遞和 引用傳遞 以下討論稱呼叫其他函式的函式為主調函式,被呼叫的函式為被調函式。值傳遞 passl by value 過程中,被調函式的形式...
函式引數的傳遞
先來幾道題壓壓驚先 第一題 void exchg1 int x,int y int main void 問題是x y a b 第二題 void exchg2 int px,int py int main void 問題是 px py a b 第三題 void exchg3 int x,int y i...
函式的引數傳遞
實參與形參 實參 全稱為 實際引數 是在呼叫時傳遞給函式的引數.實參可以是常量 變數 表示式 函式等,無論實參是何種型別的量,在進行函式呼叫時,它們都必須具有確定的值,以便把這些值傳送給形參。因此應預先用賦值,輸入等辦法使實參獲得確定值。形參 全稱為 形式引數 由於它不是實際存在變數,所以又稱虛擬變...