Python 函数的可变参数和解包参数(*, **)

Python中,在形参前面加上"*"与"**",旨在让函数支持接受任意多的参数,它们可以出现在函数定义或是函数调用中。

1. 函数定义中:收集参数

在函数定义中把不能匹配的基于位置的参数收集到一个元组中,当这个函数被调用时,Python将所有基于位置的参数收集到一个新的元组中,并将这个元组赋值给变量 args。

def f(*args):
    print(args)

f()    # 打印 ()
f(1)    # 打印 (1,)
f(1,2,3,4)    # 打印 (1,2,3,4)

"**" 的特性与之类似,但它只对关键字参数有效。它将这些关键字收集到一个新的字典中,这个字典之后将能够用一般的字典工具处理。也就是说,"**" 形式允许你将关键字参数转换成字典,从而让你能使用诸如 keys 调用 ,字典迭代器遍历等。

def f(**args):
    print(args)

f()    # 打印 {}
f(a=1, b=2)    # 打印 {'a':1, 'b':2}

def f(a, *args, **kargs):
    print(a, args, kargs)

f(1, 2, 3, x=1, y=2)
# 打印: 1 (2,3) {'y':2, 'x':1}

2. 函数调用中:解包参数

我们也能在函数调用中使用"*", "**"语法。在这种上下文中,它与函数定义中的意思相反。也就是说,它会解包参数的集合,而不是创建参数的集合。

def func(a,b,c,d):
    print(a,b,c,d)

# *
args = (1, 2)
args += (3, 4)
func(*args)        # 打印 1 2 3 4

# **
args = {'a':1, 'b':2, 'c': 3}
args['d'] = 4
func(**args)
# 打印 1 2 3 4

# 下面每一个调用 ,都是打印 1 2 3 4 
func(*(1,2),**{'d':4, 'c':3})    
func(1, *(2,3),**{'d':4})
func(1, c=3, *(2,),**{'d':4})
func(1, *(2,3), d=4)
func(1, *(2,), c=3, **{'d':4})

 

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值