函式的引數傳遞

2021-07-31 17:37:03 字數 1824 閱讀 6544

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,

print

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...

函式的引數傳遞

實參與形參 實參 全稱為 實際引數 是在呼叫時傳遞給函式的引數.實參可以是常量 變數 表示式 函式等,無論實參是何種型別的量,在進行函式呼叫時,它們都必須具有確定的值,以便把這些值傳送給形參。因此應預先用賦值,輸入等辦法使實參獲得確定值。形參 全稱為 形式引數 由於它不是實際存在變數,所以又稱虛擬變...