函數的參數

函數的參數

一、參數的類型

函數的參數分爲形參和實參python

一、形參

定義函數時括號內聲明的參數,本質是一個變量名,用來接收外部傳來的參數app

二、實參

調用函數時括號內傳入的值,值能夠是常量、變量、表達式或三種的組合函數

def index(a):  # 形參:至關於變量名
    print(a)
    print(b)
    if a > b:
        print(a)
    else:
        print(b)
b = 2
a = 1
index(a)  # 實參:至關於變量值

二、傳參方式

一、位置參數 positional arguments

調用函數時經過位置傳入的實參與形參一一對應code

def index(a,b):
    if a>b:
        return a
    else:
        return b
index(1,3)# 按照位置順序向形參中傳參

二、關鍵字參數

一、調用函數時按照key=value形式指定實參能夠不按順序傳參it

二、關鍵字參數與位置參數混用時,位置參數必定要在前io

三、而且不能夠對同一個形參重複賦值class

def res(a,b,c,d):
    print(a,b,c,d)
res(1,2,d=3,c=4)#混用關鍵字參數與位置參數,位置參數在前,關鍵字參數在後指定參數傳參

三、默認參數

在定義函數時已經爲形參進行賦值,須要常常改變的參數定義成位置參數,不多改變的定義成默認參數容器

一、默認參數必須在位置參數以後基礎

二、默認參數僅在定義階段賦值一次變量

def res(a, b, c, d=5):
    print(a, b, c, d)
d = 8# 在定義時已經被賦值一次,此處修改無效
res(1, 2, c=3)#默認參數能夠在實參中不寫直接調用
res(1, 2, c=3,d=8)# 若是修改默認參數在調用時修改

三、默認參數一般設爲不可變類型

若是設置成可變類型,則每次調用都是在上次調用的基礎上加值

def res(a, b, c, d=[]):
    d.append(c)
    print(a, b, c, d)
res(1, 2, c=3)
res(1, 2, c=3)
res(1, 2, c=3)
>>>
1 2 3 [3]
1 2 3 [3, 3]
1 2 3 [3, 3, 3]

能夠修改以下:

# 第一種解決方案
def res(a, b, c, d=None):
    if d == None:# 若是是None則定義一個空列表
        d=[]
    d.append(c)
    print(a, b, c, d)
res(1, 2, c=3)
res(1, 2, c=4)
res(1, 2, c=5)

# 第二種解決方案
def res(a, b, c, d):
    d.append(c)
    print(a, b, c, d)
res(1, 2, 3,d=[])
res(1, 2, 4,[])
res(1, 2, 5,[])

四、可變長參數

調用函數時,實參的個數不固定,而實參傳參有位置參數和關鍵字參數,全部有兩種解決方案

一、位置參數*args,在定義階段形參最後一個參數args前加個星號,能夠接受全部實參中的溢出的位置參數,默認以元組的形式保存下來

  • 官方認證爲*args,可是隻要有星號後面是什麼參數都有可變長類型的效果

  • *是打散傳入的容器類型,若是不打星號就默認轉換溢出的參數造成元組

def res(a, b, c,*args):
    print(a, b, c,args)
res(1, 2, 3,4,5,6,7,8)
>>>
1 2 3 (4, 5, 6, 7, 8)
def res(a, b, c,*args):
    print(a, b, c,*args)# 將輸入的參數原本轉換成元組的,打散
res(1, 2, 3,4,5,6,7,8)
>>>
1 2 3 4 5 6 7 8

二、關鍵字參數**kwargs,在定義階段最後一個形參用,將調用時全部溢出的關鍵字參數轉換爲字典{關鍵字:參數}賦值給形參

官方認證爲**kwargs,可是隻要有星號後面是什麼參數都有可變長類型的效果

def res(a, b, c, **kwargs):# 將調用時溢出的關鍵字參數轉換成字典
    print(a, b, c, kwargs)


res(1, 2, 3, d=1, f=4, e=7)
>>>
1 2 3 {'d': 1, 'f': 4, 'e': 7}
def res(a, b, c, **kwargs):
    print(a, b, c, *kwargs)# 一個*是打散字典拿到key值,打散字典只能是一個*


res(1, 2, 3, d=1, f=4, e=7)
>>>
1 2 3 d f e

五、命名關鍵字參數

一、在位置可變長參數和關鍵字可變長參之間

二、在調用階段,必定要以關鍵字參數的形式傳值

三、關鍵字參數必定要在位置參數後面

def index(a,b,c=1,*args,d,**kwargs):
    print(a,b,c,args,d,kwargs)
index(1,2,3,4,5,6,d=2,f=4,g=8)
>>>
# 1 2 3 (4, 5, 6) 2 {'f': 4, 'g': 8}

六、組合使用

必須按照定義順序:位置參數,關鍵字參數,*args,命名關鍵字參數,**kwargs

相關文章
相關標籤/搜索