zoukankan      html  css  js  c++  java
  • 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传入的是关键字参数,不管有多少,都聚合成一个字典输出或返回
    
  • 相关阅读:
    基于组的策略(GBP)开启新型网络设计时代
    49 多维数组(二维数组)
    48 查找
    47 排序
    46 字符数组和字符串
    45 数组应用
    44 数组
    43 C语言宏定义
    42 预处理命令
    41 函数封装练习
  • 原文地址:https://www.cnblogs.com/zanao/p/11047878.html
Copyright © 2011-2022 走看看