python之函數的傳參形參的第三種動態參數*args和**kwargs


1. 位置/關鍵字傳參的缺點

當給函數傳入的參數數目不定時,之前的傳參方式解決不了問題。

def eat(food1,food2,food3):
    print(f'我請你吃:{food1},{food2},{food3}')
eat('蒸羊羔','蒸熊掌','蒸鹿尾')


萬能參數,動態參數。 *args
def eat(food1,food2,food3):
    print(f'我請你吃:{food1},{food2},{food3}')
eat('蒸羊羔','蒸熊掌','蒸鹿尾','燒花鴨','燒企鵝')

2. *args 作用: ***

  • 在實參角度:定義一個函數時,* 所有的位置參數聚合到一個元組中

  • *args傳入位置參數

  • retrun后面跟args返回的是一個元組

def eat(*args):  # 在實參角度:定義一個函數時,* 所有的位置參數聚合到一個元組中。
    print(args)
    print(f'我請你吃:{args}')
# eat('蒸羊羔','蒸熊掌','蒸鹿尾','燒花鴨','燒企鵝')

練習題

函數接收不定個數的數字實參,將最終的和返回出去
def sum1(*args):
    # print(args)  (100, 2, 67, 3)
    result = 0
    for i in args:
        result += i
    return result
print(sum1(100,2,67,3))

**3. kwargs作用 (重要性***)

  • 函數的定義時:**將實參角度所有的關鍵字參數聚合成了一個字典,給了kwargs.
  • **wkargs傳入關鍵字參數
  • retrun 后面跟**kwargs返回的是一個字典
def func(**kwargs):  # 函數的定義時:**將實參角度所有的關鍵字參數聚合成了一個字典,給了kwargs.
    print(kwargs)
func(name='alex',age=84,hobby='唱跳rap籃球')

特點:關鍵字形式的,一傳傳一堆,不管你傳入多少實參

練習題

# *args,**kwargs 萬能參數
def func(*args,**kwargs):
    print(args,kwargs)

# func(1,2,4,'fjdksal',age=84,hobby='唱跳rap籃球')

一句話總結:

*args在實參角度: 函數定義時, 將傳入的值聚合到一個元組當中,返回的是元組

**kwargs在實參角度,函數定義時, 將傳入的值聚合成一個字典,返回的是字典

用法:

l1 = [1,2,3]
dic1 = {'name':'太白','age':18}
def func(a,*args,**kwargs):
    print(args)  # (1, 2, 3,'太白', 'wusir', '景女神')
    print(kwargs)
func(1,l1,dic1,hobbie = '唱歌')

# 輸出結果
([1, 2, 3], {'name': '太白', 'age': 18})
{'hobbie': '唱歌'}

# 個人見解,復習看這個就好
a傳入的是位置參數1,*args傳入的是l1和dic1(如果dic1后面還有位置實參還可以傳給*args, **kwarg傳入的hobbie = '唱歌'關鍵字參數)
# 記住一點就好:**args傳入位置參數,不管寫多少,都聚合到一個元組中,輸出或返回. **kwargs傳入的是關鍵字參數,不管有多少,都聚合成一個字典輸出或返回


免責聲明!

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



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