zoukankan      html  css  js  c++  java
  • python3进阶之*args与**kwargs用法

      *args 和 **kwargs 主要用于函数定义。 你可以将不定数量的参数传递给一个函数。不定的意思是:预先并不知道, 函数使用者会传递多少个参数给你, 所以在这个场景下使用这两个关键字。其实并不是必须写成*args 和**kwargs。  *(星号)才是必须的. 你也可以写成*ar 和**k. 而写成*args 和**kwargs只是一个通俗的命名约定.

      python函数传递参数的方式有两种: 
    位置参数(positional argument) 
    关键词参数(keyword argument)

     

    *args与**kwargs的区别,两者都是python中的可变参数。 
        *args表示任何多个无名参数,它本质是一个tuple; 
        **kwargs表示关键字参数,它本质上是一个dict; 

     

      如果同时使用*args和**kwargs时,必须*args参数列要在**kwargs前。

     

    示例1.

    def fun(*args,**kwargs):

        print('args=', args)

        print('kwargs=',kwargs)

    fun(1,2,3,4,A='a',B='b',C='c',D='d')

    输出:

    args= (1, 2, 3, 4)

    kwargs= {'A': 'a', 'B': 'b', 'C': 'c', 'D': 'd'}

    示例2:

    def mutil(name,*ar):
    print(name,"主人,你好")
    for item in ar:
    print("我的名字叫:",item)

    mutil("liuhu","xiaoyun","liuwei")
    # liuhu 主人,你好
    # 我的名字叫: xiaoyun
    # 我的名字叫: liuwei

    示例3:
    def love(**kwargs):
    for key,value in kwargs.items():
    print("{0}爱着{1}".format(key,value))
    love(name="liuhu",age=18)
    # name爱着liuhu
    # age爱着18


    示例4:
    def test(arg1, arg2, arg3):
    print("arg1:", arg1)
    print("arg2:", arg2)
    print("arg3:", arg3)

    args = ("two", 3, 5)
    test(*args)
    kwargs = {"arg3": 3, "arg2": "two", "arg1": 5}
    test(**kwargs)
    # arg1: two
    # arg2: 3
    # arg3: 5

    # arg1: 5
    # arg2: two
    # arg3: 3


    仙衣眠云碧岚袍,一襟潇洒,两袖飘飘。玉墨舒心春酝瓢,行也逍遥,坐也逍遥。
  • 相关阅读:
    BZOJ4821 SDOI2017相关分析(线段树)
    BZOJ3167/BZOJ4824 HEOI2013SAO/CQOI2017老C的键盘(树形dp)
    BZOJ4820 SDOI2017硬币游戏(概率期望+高斯消元+kmp)
    BZOJ4811 Ynoi2017由乃的OJ(树链剖分+线段树)
    BZOJ4810 Ynoi2017由乃的玉米田(莫队+bitset)
    Codeforces Round #522 Div. 1 没打记
    BZOJ4784 ZJOI2017仙人掌(树形dp+dfs树)
    43. Multiply Strings
    2. Add Two Numbers
    150. Evaluate Reverse Polish Notation
  • 原文地址:https://www.cnblogs.com/max520liuhu/p/8921932.html
Copyright © 2011-2022 走看看