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传入的是关键字参数,不管有多少,都聚合成一个字典输出或返回
    
  • 相关阅读:
    ural(Timus) 1019 Line Painting
    ACMICPC Live Archive 2031 Dance Dance Revolution
    poj 3321 Apple Tree
    其他OJ 树型DP 选课
    poj 3548 Restoring the digits
    ACMICPC Live Archive 3031 Cable TV Network
    递归循环获取指定节点下面的所有子节点
    手动触发asp.net页面验证控件事件
    子级Repeater获取父级Repeater绑定项的值
    没有列名的数据绑定
  • 原文地址:https://www.cnblogs.com/zanao/p/11047878.html
Copyright © 2011-2022 走看看