Python 引數 – default , *args (*) , **kwargs (**)

測試環境為 CentOS 8 x86_64 (虛擬機)

Python 的引數 可以有 default , *args (*) , **kwargs (**) 下面來看一下範例.

參考文章 – https://skylinelimit.blogspot.com/2018/04/python-args-kwargs.html

  • Default

    [root@localhost ~]# vi default.py
    def plus(a, b, c=None):
        res = a + b + (c if c else 0)
        return res
    
    print(plus(1,2))
    print(plus(1,2,3))
    

    執行結果

    [root@localhost ~]# python3 default.py
    3
    6
    

    說明:
    函數 plus 有 3 個參數, 只少須輸入 2 個參數 a 與 b , c 沒輸入時自帶預設值 None.

    def plus(a, b, c=None):
    
  • *args (*)

    如果引數是不確定個數的話可以使用 * 來把引數收集到 tuple 資料型態物件(跟 List 資料型態物件一樣,但無法新增,刪除,修改其內容).

    [root@localhost ~]# vi args.py
    def plus(*nums):
        print(nums)
        res = 0
        for i in nums:
            res += i
        return res
    
    print(plus(1,2,3,4,5))
    print(plus(5,3,1))
    

    執行結果

    [root@localhost ~]# python3 args.py
    (1, 2, 3, 4, 5)
    15
    (5, 3, 1)
    9
    

    說明:
    在 plus 函數傳入的引數會儲存到 tuple 資料型態物件.

    def plus(*nums):
        print(nums)
    

    執行結果

    (1, 2, 3, 4, 5)
    (5, 3, 1)
    
  • **kwargs (**)

    ** 為 Keyword Argument , 如果引數是不確定個數的話,除了可以使用 * 來把引數收集到 tuple 資料型態物件,還可以使用 ** 來把引數收集到 dict 資料型態物件.
    dict 資料型態物件資料是由 key (鍵值,可使用 括字串(str),整數(int)與浮點數(float) ) + Value (值,可以為任何東西) 來組成).如下:

    Computer1={"CPU":"Intel" , "MEM":["Hynix 16G","Hynix 16G"] , "Disk":"Samsung"}
    
    [root@localhost ~]# vi kwargs.py
    def fun(**settings):
        print(settings.get('name' , 'Not Found'))
        print(settings.get('attack' , 'Not Found'))
        print(settings.get('hp' , 'Not Found'))
    
    fun(name='Sky', attack=100, hp=500)
    fun(attack=100, hp=500)
    

    執行結果

    [root@localhost ~]# python3 kwargs.py
    Sky
    100
    500
    Not Found
    100
    500
    

    說明:
    透過 dic 物件的 get method 來讀取相對應的值.

        print(settings.get('name' , 'Not Found'))
    
  • *args (*) , **kwargs (**)

    將 *args (*) , **kwargs (**) 這兩個合併起來使用就可以接受任意引數了,須注意 * 一定要在 ** 的前面.

    [root@localhost ~]# vi all.py
    def fun(*args, **kwargs):
        print(args, kwargs, sep='\n')
    
    fun([1,2,3] , a=1 , b='b2' , c=0.38)
    

    執行結果

    [root@localhost ~]# python3 all.py
    ([1, 2, 3],)
    {'a': 1, 'b': 'b2', 'c': 0.38}
    

    說明:
    須注意引數 * 一定要在 ** 的前面.

    fun([1,2,3] , a=1 , b='b2' , c=0.38)
    
沒有解決問題,試試搜尋本站其他內容

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料