Python | **,**kwargs,*,*args的作用

(Python版本3.7.4)

1. **与**kwargs

1.1 **的作用

**的作用是将字典中的内容作为参数传入函数中。

# 举例
def print1(a, b, c):
    print(a, b, c)
# 定义一个字典
dict = {'a':1, 'b':2, 'c':3}
# 传入函数中
print1(**dict)

函数返回:

1 2 3

在print1()中有且只有三个positional argument,且都没有预设它们的值,因此字典中的参数只能包含且仅包含a,b,c三个参数。

dict = {'a':1, 'b':2, 'c':3, 'd':4}
print1(**dict) # 这就报错了

 函数返回:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
 in 
      2 # 因此字典中的参数只能包含且仅包含a,b,c三个参数。
      3 dict = {'a':1, 'b':2, 'c':3, 'd':4}
----> 4 print1(**dict)

TypeError: print1() got an unexpected keyword argument 'd'

 1.2 **kwargs的作用

 在定义函数时使用**kwargs,可以接受不限量的参数个数

# 重新定义print1()
def print1(**kwargs):
    i = 0
    for elem in kwargs:
        i = i + 1
        print("第",i,"个参数:",elem, '=', kwargs[elem])

dict = {'a':1, 'b':2, 'c':3, 'd':4}
print1(**dict)

 函数返回:

第 1 个参数: a = 1
第 2 个参数: b = 2
第 3 个参数: c = 3
第 4 个参数: d = 4

也可以:

print1(a=1, b=2, c=3, d=4, e=5)

返回:

第 1 个参数: a = 1
第 2 个参数: b = 2
第 3 个参数: c = 3
第 4 个参数: d = 4
第 5 个参数: e = 5

2. *与*args的作用

2.1 *的作用

与**不同的是,*解包的是列表(或元组),**解包的是字典

# 定义一个print2()来说明
def print2(a, b, c):
    print(a, b, c)

list = [3, 5]
print2(1, *list)
tuple = (3, 5)
print2(1, *tuple)

 返回:

1 3 5
1 3 5

由于print2()有且仅有三个positional argument,且都没有预定义它们的值,所以调用的时候必须给三个值。

2.2 *args的作用

# 重新定义print2()
def print2(*args):
    i = 0
    for elem in args:
        i = i + 1
        print("第",i,"个参数:",elem)
    print(type(args))

list = [1,2,3,4,5]
print2(*list)
tuple = (1,2,3,4,5)
print2(*tuple)

返回:

第 1 个参数: 1
第 2 个参数: 2
第 3 个参数: 3
第 4 个参数: 4
第 5 个参数: 5
<class 'tuple'>
第 1 个参数: 1
第 2 个参数: 2
第 3 个参数: 3
第 4 个参数: 4
第 5 个参数: 5
<class 'tuple'>

这里的<class 'tuple'>代表在函数里的args实际上是个元组,即便可以传进去的也可以是list。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值