Python的位置參數、默認參數、關鍵字參數、可變參數


一、位置參數

函數調用時根據函數定義的參數位(形參)置來傳遞參數

示例:

1 #-*- coding:utf-8 -*-
2 
3 def msg(name,age):
4     print("Hello,your name is %s,your age is %s"%(name,age))
5 msg('root',12)

位置參數必須一一對應,缺一不可

二、關鍵字參數

在函數調用時,通過‘鍵--值’方式為函數形參傳值,不用按照位置為函數形參傳值。

注意:

  1. 關鍵字參數必須在位置參數右邊
  2. 對同一個形參不能重復傳值

正確示例:

 1 # #-*- coding:utf-8 -*-
 2 #
 3 # 按照順序為函數形參傳值
 4 # def msg(name,age,sex):
 5 #     print("Hello,your name is %s,age is %s,sex is %s"%(name,age,sex))
 6 # msg('root',12,'男')
 7 
 8 #有位置參數和關鍵字參數時,關鍵字參數要放在位置參數后面
 9 # def msg(name,age,sex):
10 #     print("Hello,your name is %s,age is %s,sex is %s"%(name,age,sex))
11 # msg('root',12,sex= '男')
12 
13 # 參數中有多個關鍵字參數時,關鍵字參數不分先后順序
14 # def msg(name,age,sex):
15 #     print("Hello,your name is %s,age is %s,sex is %s"%(name,age,sex))
16 # msg('root',sex= '男',age= 22)

錯誤示例:

1 # 關鍵字參數放在了位置參數的前面
2 # def msg(name,age,sex):
3 #     print("Hello,your name is %s,age is %s,sex is %s"%(name,age,sex))
4 # msg(name='root',22,'男')
5 
6 # def msg(name,age,sex):
7 #     print("Hello,your name is %s,age is %s,sex is %s"%(name,age,sex))
8 # msg('root',age=12,'男')

三、默認參數

在定義函數時,可以為形參提供默認值。對於有默認值的形參,調用函數時如果為該參數傳值,則使用傳入的值,否則使用默認值。

注意:

  1. 在調用函數時可以不給有默認值的形參傳值
  2. 無論是函數的定義還是調用,默認參數的定義應該在位置形參右面
  3. 只在定義時賦值一次
  4. 默認參數通常應該定義成不可變類型

示例:

def msg(name,age,sex='男'): #默認參數在關鍵字參數后面
  ...

def test(x,y=2):
print(x)
print(y)
test(2) #只給一個參數傳值,則另外一個使用默認值

  四、非固定參數

當函數定義時不確定要傳入多少個實參時,就可以使用非固定參數。而實參有按位置和按關鍵字兩種形式定義,針對這兩種形式的可變長,形參對應有兩種解決方案來完整地存放它們,分別是*args,**kwargs

  1. *args  接收的是實參,位置參數,將轉化成元祖返回
    def test(*args):
        print(args)
    test(1,2,3,4,5)

    運行結果:
    (1, 2, 3, 4, 5)
    def test1(x,*args):
        print(x)
        print(args)
    test1(1,2,3,4,5)

    運行結果:

    1
    (2, 3, 4, 5)

     

  2. *kwargs 接收的是實參,關鍵字參數,將轉化成字典返回
    def func(a,b,**kwargs):
        print(a,b,kwargs)
    func(a = 10,b = 20,cc = 30,dd = 40)
    運行結果:
    10 20 {'cc': 30, 'dd': 40}

     參數定義順序:位置參數->*args->默認參數->**kwargs


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM