*args 和 **kwargs

*args

接收任意多个位置参数

def test(*args):
    print(type(args), args)
    
test("a", ["b", "c"])

# 执行结果: <class 'tuple'> ('a', ['b', 'c'])

上面我们创建了一个简单地函数用来接收多个位置参数。

通过执行后的结果可以看出使用 *args 方式接收参数会将这些参数放到一个元祖中。

此时我们会想到一个问题假如我们传递参数时并不想将整个列表作为参数,而是想将列表中的每一个元素分别作为参数传入应该怎么办呢?在解决这个问题前我们先看一段代码。

test_list = ["one", "two", "three"]

print(test_list)
print(*test_list)

# 执行结果:
# ['one', 'two', 'three']
# one two three

执行后得到结果发现事情变得有趣了起来,* 可以帮助我们对列表进行解包,因此我们可以利用这样的特性,将列表中的每一个元素分别作为参数传入函数。

def test(*args):
    print(type(args), args)
    
test_list = ["one", "two", "three"]
test("a", *test_list)

# 执行结果: <class 'tuple'> ('a', 'one', 'two', 'three')

**kwargs

接受任意多个关键字参数

def test(**kwargs):
    print(type(kwargs), kwargs)
    
test(a="one", b="two", c="three")

# 执行结果: <class 'dict'> {'a': 'one', 'b': 'two', 'c': 'three'}

上面我们创建了一个简单地函数用来接收多个关键字参数。

通过执行后的结果可以看出使用,**kwargs 方式接收参数会将这些参数放到一个字典中。

还是同样的问题,我们可不可以将一个字典中每一个键值对分别作为关键字参数传入呢?答案是可以的,与 *args 的使用方法相同。

def test(**kwargs):
    print(type(kwargs), kwargs)
    
test_dict = {"a":"one", "b":"two", "c":"three"}
test(**test_dict, d="four")

# 执行结果: <class 'dict'> {'a': 'one', 'b': 'two', 'c': 'three', 'd': 'four'}

⚠️ 当我们想同时传入多个位置参数和关键字参数时,需要注意 *args 必须放在 **kwargs 前面

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值