python3进阶之*args与**kwargs用法

Posted 神毓·逍遥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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










































以上是关于python3进阶之*args与**kwargs用法的主要内容,如果未能解决你的问题,请参考以下文章

(十五)python3 可变长参数(arg,*args,**kwargs)

Python3中参数*args和**kwargs介绍

函数进阶

函数的进阶

装饰器进阶

关于python3的一些理解(装饰器垃圾回收进程线程协程全局解释器锁等)