1.位置參數

位置參數就是普通的參數定義

            
              def power(x):
     print(x**2)
            
          

2.默認參數

當調用函數時沒有給參數值,那么會給使用定義的默認值。下面定義的函數可以定義參數值也可以不定義,不定義時x默認為9

            
              def power(x = 3):
     print(x**2)
            
          

默認參數注意事項,當默認參數使用的是可變的類型參數時,會產生不同的結果。當函數定義默認的參數是一個空列表時,第一次調用函數時,變量L設為['end'],當第二次調用時,會以['end']為默認參數,因為L指向的列表對象地址沒有改變,所有L的值為['end','end']。

            
              In [1]: def power(L = []):
   ...:     L.append('end')
   ...:     return L
   ...:

In [2]:

In [2]: print(power())
['end']

In [3]: print(power())
['end', 'end']

In [4]: print(power())
['end', 'end', 'end']
            
          

3.可變參數

當參數的個數不確定時,可以使用可變參數,只需要在變量前加,當想把一個列表或元祖的值傳入時,只需要在列表或元祖前加即可。

            
              def sum(*num):
     temp = 0
     for i in num:
          temp += i
     return temp

print(sum(1, 2, 4, 60))
L = [1, 3, 5, 6]
print(sum(*L))
            
          

4.關鍵字參數

可以將多個參數封裝成dict,下面的函數除了name和age需要定義外,還可以傳入多個kv鍵值對,會被封裝成dict。當有一個dict對象時,只需在對象名前加就可以傳入參數。

            
              def person(name, age, **kw):
     print("name =", name, "age = ", age, "kw = ", kw)

person('fgnb', 33, fg = 'nb')
extra = {'1':'1', '2':"2", '3':"3"}
person('fgsb', '33', **extra)

            
          

5.命名關鍵字參數

主要用于限制關鍵字參數的參數名,比如希望輸入名為a和b的關鍵字。只需在中間加上一個號,或者參數中間有可變參數

            
              def person(name, age, * , a, b):
     print(name, age, a, b)

def person(name, age, *args, city, job): #參數傳遞時需要2個位置參數,city和job的關鍵字參數和任意個參數變量
     print(name, age, args, city, job)

person('fg', 32, a = 'a', b = 'b')
            
          

6.參數的順序

位置參數、默認參數、可變參數、命名關鍵字參數和關鍵字參數。

            
              def f1(a, b, c=0, *args, **kw):
    print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw)

def f2(a, b, c=0, *, d, **kw):
    print('a =', a, 'b =', b, 'c =', c, 'd =', d, 'kw =', kw)

>>> f1(1, 2)
a = 1 b = 2 c = 0 args = () kw = {}
>>> f1(1, 2, c=3)
a = 1 b = 2 c = 3 args = () kw = {}
>>> f1(1, 2, 3, 'a', 'b')
a = 1 b = 2 c = 3 args = ('a', 'b') kw = {}
>>> f1(1, 2, 3, 'a', 'b', x=99)
a = 1 b = 2 c = 3 args = ('a', 'b') kw = {'x': 99}
>>> f2(1, 2, d=99, ext=None)
a = 1 b = 2 c = 0 d = 99 kw = {'ext': None}
# 可以通過List或者tuple傳遞參數
>>> args = (1, 2, 3, 4)
>>> kw = {'d': 99, 'x': '#'}
>>> f1(*args, **kw)
a = 1 b = 2 c = 3 args = (4,) kw = {'d': 99, 'x': '#'}
>>> args = (1, 2, 3)
>>> kw = {'d': 88, 'x': '#'}
>>> f2(*args, **kw)
a = 1 b = 2 c = 3 d = 88 kw = {'x': '#'}