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--> 男 
    

      

  • 相关阅读:
    Leetcode Reverse Words in a String
    topcoder SRM 619 DIV2 GoodCompanyDivTwo
    topcoder SRM 618 DIV2 MovingRooksDiv2
    topcoder SRM 618 DIV2 WritingWords
    topcoder SRM 618 DIV2 LongWordsDiv2
    Zepto Code Rush 2014 A. Feed with Candy
    Zepto Code Rush 2014 B
    Codeforces Round #245 (Div. 2) B
    Codeforces Round #245 (Div. 2) A
    Codeforces Round #247 (Div. 2) B
  • 原文地址:https://www.cnblogs.com/a-ant/p/11001311.html
Copyright © 2011-2022 走看看