python *args和**kwargs魔法变量

1、 函数的三种主要参数类型:

标准参数、*args、**kwargs

2、 定义:

  *args、**kwargs,也叫魔法参数。它们发挥作用的重点是前面的星号,这两个可以打包或者解包相应的参数,至于,args、kwargs是代指,也可以是任何其他字符,例如*x,**xx。

  • ** *args**:可变长参数列表,也可以说成可变长参数集合。*可以捕获标准参数后键值对参数前所有位置参数,按position unpack 参数列表。
  • **kwargs:可变长键值对参数,多指字典。**可以捕获所有关键字参数。按key word unpack 参数列表。

3、使用举例

  魔法参数使用主要是两方面,一是定义函数时不确定函数参数的数量。二是调用函数时,为了将参数一次性传入。
1、定义函数
  下面举例了,**是如何将传入的字典参数解包,以及如何将传入的关键字参数打包成一个字典类型

def get(url, **kwargs):
        kwargs.setdefault('allow', True)# 设定kwargs的默认键值
        # 此时kwargs是一个字典,任何字典操作都以应用
        for i in kwargs:
            print(i,kwargs[i])
get('url',data=3, headers=4)
------------输出-------------
data 3
headers 4
allow True
----------------------------
arg = {'data':3, 'headers':4}
get('url',**arg)
data 3
headers 4
allow True

* 使用如下,同样道理,打包与解包。打包后,args是一个tuple类型

def send(x,*args):
    #args是一个列表
    for i in args:
        print(i)
send('x',3,4,5,6)
----------输出---------
3
4
5
6
----------------------
s = 'abcde' # 这里举例一个str,str也会是一个集合,也可以试试列表、tuple等
send('x',*s)
b
c
d
e

2、调用函数
  调用函数时使用魔法变量主要作用是解压unpack参数集合。
**使用举例

def send(url,data,header=None):
    print('url:',url)
    print('data:',data)
    print('headers:',header)
kwarg = {'url':'http://www.xxx.com','data':'oooo', 'header':'Chrome'}```
send(**kwarg)
------------------输出-----------------------------
url: http://www.xxx.com
data: oooo
headers: Chrome

注意当使用**解析字典型参数时,传入函数的是类似key=value的形式,所有字典的键值必须存在于函数定义时参数名字中,否则会报错。TypeError: send() got an unexpected keyword argument ‘p’。

*使用举例,按位置分配参数值。此时,传入的数据类型可以是列表、tuple、str等,然后,*可以将其解包。

def get(x,y,z):
    print('x:',x)
    print('y:',y)
    print('z:',z)
arg = [1,2,3]
get(*arg)
---------------输出-------------------------------------
x: 1
y: 2
z: 3
发布了25 篇原创文章 · 获赞 14 · 访问量 1149

猜你喜欢

转载自blog.csdn.net/A_pinkpig/article/details/104836095