Python中*args和**kwargs的博弈

做一个柔情的程序猿

共 2448字,需浏览 5分钟

 · 2021-09-11

对于Python初学者而言,*args 和 **kwargs 这两个变量可能一时半会理解不了。其实这些并不是什么特殊的参数,只是编程人员约定的变量名字。其中args 是 arguments 的缩写,表示位置参数;kwargs 是 keyword arguments 的缩写,表示关键字参数。接下来我们就来一起了解他们的用法以及在什么情况下使用?

*args和**kwargs可以同时在函数的定义中,但是*args必须在**kwargs前面.


*args用法



* args 和 ** args 主要用于函数定义,可以将不定数量的参数传递给一个函数。

这里不定的意思是:预先并不知道,函数使用者会传递多少个参数给你,所在在这个场景下使用这两个关键字。* args 是用来发送一个 非键值 的可变数量的参数列表给一个函数。

传递任意数量的参数

当你不确定你的函数里将要传递多少参数时你可以用*args.例如,它可以传递任意数量的参数。

>>> def print_everything(*args):        for count, thing in enumerate(args):...         print '{0}. {1}'.format(count, thing)...>>> print_everything('apple', 'banana', 'cabbage')0. apple1. banana2. cabbage

在函数处新增x和y变量

在函数中如果定义了变量x和y,*args放在函数中可以新增x和y的变量,简答方便。

>>> def func(x,y,*args):        print(type(x))        print(x)        print(y)        print(type(args))        print(args)    print_func(1,2,'one',[])
>>><class 'int'>12<class 'tuple'>('one', [])

将*args放在函数变量最前面

将*args放在函数变量最前面时,可能会报错,对变量x和y都有影响。如下:
def func(*args,x,y):    print(type(x))    print(x)    print(y)    print(type(args))    print(args)

运行时出现如下报错信息:

TypeError: func() missing 2 required keyword-only arguments'x' and 'y'

意思是 函数 print_func找不到关键词参数 x 和 y

所以若 *args 不是在最后,则需要在参数传入时,明确定义 *args后面的变量参数名,如下:

def func(*args,x,y):    print(type(x))    print(x)    print(y)    print(type(args))    print(args)print_func(1,2,'one',[],x='x',y='y')

可以正确输出

<class 'str'>xy<class 'tuple'>(1, 2, 'one', [])

**kwargs用法



**kwargs允许你将不定长度的 【键值对 key-value 】,作为参数传递给一个函数。如果你想要在一个函数里处理带名字的参数,你应该使用**kwargs

**kwargs允许你使用没有事先定义的参数名:

>>> def table_things(**kwargs):...     for name, value in kwargs.items():...         print '{0} = {1}'.format(name, value)...>>> table_things(apple = 'fruit', cabbage = 'vegetable')cabbage = vegetableapple = fruit




组合使用 args,*args 和 **kwargs 来调用函数

命名参数首先获得参数值然后所有的其他参数都传递给*args**kwargs.命名参数在列表的最前端

def func(x, *args, **kwargs):    print(x)    print(args)    print(kwargs)
print_func(1, 2, 3, 4, y=1, a=2, b=3, c=4)

运行结果

1(2, 3, 4){'y': 1, 'a': 2, 'b': 3, 'c': 4}



推荐阅读

(点击标题可跳转阅读)

简易的服务器接口开发入门教程

教你用Python制作实现自定义字符大小的简易小说阅读器

小程序云开发项目的创建与配置

汇总超全Matplotlib可视化最有价值的 50 个图表(附 Python 源代码)(一)

超详细讲解CTC理论和实战

ODBC连接主流数据库的配置方法

教你用python进行数字化妆,可爱至极

加速Python列表和字典,让你代码更加高效

老铁,三连支持一下,好吗?↓↓↓


点分享

点点赞

点在看

浏览 26
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报