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
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python 中,`*args` 和 `**kwargs` 是常用的参数传递方式,用于将不定数量的参数传递给函数。 `*args` 是一个特殊的语法,用于在函数定义中接受任意数量的位置参数。当我们在函数定义中使用 `*args` 参数时,Python 会将传递给函数的所有位置参数打包成一个元组,并将该元组赋值给 `args` 变量。这样,我们就可以在函数中使用 `args` 变量来访问所有位置参数。 下面是一个简单的例子,演示如何使用 `*args` 参数接受任意数量的位置参数: ``` def print_args(*args): for arg in args: print(arg) # 调用函数 print_args(1, 2, 3) print_args("hello", "world") ``` 在上面的代码中,我们定义了一个 `print_args` 函数,它接受任意数量的位置参数。在函数中,我们使用 `for` 循环遍历 `args` 元组,并打印每个参数的值。当我们调用 `print_args` 函数时,Python 会将传递给函数的所有位置参数打包成一个元组,并将该元组赋值给 `args` 变量。 `**kwargs` 是另一个特殊的语法,用于在函数定义中接受任意数量的关键字参数。当我们在函数定义中使用 `**kwargs` 参数时,Python 会将传递给函数的所有关键字参数打包成一个字典,并将该字典赋值给 `kwargs` 变量。这样,我们就可以在函数中使用 `kwargs` 变量来访问所有关键字参数。 下面是一个简单的例子,演示如何使用 `**kwargs` 参数接受任意数量的关键字参数: ``` def print_kwargs(**kwargs): for key, value in kwargs.items(): print(f"{key} = {value}") # 调用函数 print_kwargs(a=1, b=2, c=3) print_kwargs(name="Alice", age=25) ``` 在上面的代码中,我们定义了一个 `print_kwargs` 函数,它接受任意数量的关键字参数。在函数中,我们使用 `for` 循环遍历 `kwargs` 字典,并打印每个参数的键值对。当我们调用 `print_kwargs` 函数时,Python 会将传递给函数的所有关键字参数打包成一个字典,并将该字典赋值给 `kwargs` 变量。 需要注意的是,`*args` 和 `**kwargs` 可以同时在函数定义中使用,以接受任意数量的位置参数和关键字参数。在这种情况下,`*args` 必须放在 `**kwargs` 之前。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值