zoukankan      html  css  js  c++  java
  • (十五)python3 可变长参数(arg,*args,**kwargs)

     可变长参数(*args,**kwargs)

    一、最常见的是在定义函数时,预先并不知道, 函数使用者会传递多少个参数给你, 所以在这个场景下使用这两个关键字。其实并不是必须写成*args 和**kwargs。  *(星号)才是必须的. 你也可以写成*ar 和**k. 而写成*args 和**kwargs只是一个通俗的命名约定.分别代表的是元组和字典

    def x(arg, *args, **kwargs):
        print('arg--> {}'.format(arg))
        print('args--> {} '.format(args))
        print('kwarg--> {} '.format(kwargs))
    
    
    x(1,2,3,4,key1="value1")
    
    #结果
    # arg--> 1
    # args--> (2, 3, 4) 
    # kwarg--> {'key1': 'value1'} 
    

      在函数调用时,位置参数传递必须在关键字参数左边或者说前面,**kwargs接收关键字参数,生成字典。*args接收除第一个位置参数和关键字参数外的其它参数生成元组,根参数是什么数据类型无关。

    def x(arg, *args, **kwargs):
        print('arg--> {}'.format(arg))
        print('args--> {} '.format(args))
        print('kwarg--> {} '.format(kwargs))
    
    
    x(1,(2,3,),4,key1="value1")
    
    #arg--> 1
    #args--> ((2, 3), 4) 
    #kwarg--> {'key1': 'value1'}
    

     

    二、函数调用时使用*args、**args

     下面方式调用应该不难理解

    def print_info(name,age,sex):
        print('name--> {}'.format(name))
        print('age--> {} '.format(age))
        print('sex--> {} '.format(sex))
    
    
    print_info("name1",25,"男")
    
    #name--> name1
    # age--> 25 
    # sex--> 男 
    

     换个方式:*args,**kwargs

    def print_info(name, age, sex):
        print('name--> {}'.format(name))
        print('age--> {} '.format(age))
        print('sex--> {} '.format(sex))
    
    
    list = ["李刚", 20, "男"]
    
    dic = {"name": "王某某", "age": 30, "sex": "女",}
    
    print_info(*list)
    
    # 将列表或元组前加“*”并传组函数,(注意:元素个数与位置必须对应)结果如下。
    # name--> 李刚
    # age--> 20
    # sex--> 男
    
    
    
    print_info(**dic)
    # 同样在传入的字典前加上“**”,此时字典会被解析成key=value的形式。注意key值和个数不能大于形参,结果如下
    
    # name--> 王某某
    # age--> 30
    # sex--> 女
    

    综合一下:  

    print_info("小刚",age=18,**{"sex":"男"})
    
    #
    name--> 小刚
    age--> 18 
    sex--> 男 
    

      

  • 相关阅读:
    模板-树链剖分
    bzoj2523 聪明的学生
    P1220 关路灯
    BZOJ3572 [Hnoi2014]世界树
    BZOJ4013 [HNOI2015]实验比较
    BZOJ4012 [HNOI2015]开店
    BZOJ4011 [HNOI2015]落忆枫音
    BZOJ4009 [HNOI2015]接水果
    BZOJ4010 [HNOI2015]菜肴制作
    BZOJ4008 [HNOI2015]亚瑟王
  • 原文地址:https://www.cnblogs.com/a-ant/p/11001311.html
Copyright © 2011-2022 走看看