python之函数的传参形参的第三种动态参数*args和**kwargs

Posted zanao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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传入的是关键字参数,不管有多少,都聚合成一个字典输出或返回

以上是关于python之函数的传参形参的第三种动态参数*args和**kwargs的主要内容,如果未能解决你的问题,请参考以下文章

函数的进阶

函数基础回顾02

10. Python函数的进阶

python 基础篇 10 函数进阶

Python基础day10

万恶之源-函数的进阶