Python函数中的参数*args和**kwargs用法说明

本文介绍了Python函数中的可变参数*args和关键字参数**kwargs的用法。*args将未指定数量的参数打包为元组,而**kwargs则将参数以键值对形式打包为字典。这两个参数在函数定义中用于灵活接收不同数量和类型的实参,增强函数的可扩展性。同时,文章提到了在函数调用中如何使用*和**对已打包的参数进行拆解赋值,并强调了使用**方式时需保证字典键与形参名一致。
摘要由CSDN通过智能技术生成

问题:Python函数中的参数*args和**kwargs用法说明,谈谈你的理解


解答

*args:可变参数

可变参数就是传入的参数个数是可变的,可以是1个、2个到任意个,还可以是0个参数,这些可变参数在函数调用时会自动组装为一个tuple元组(Thsee arguments will be wrapped up in a tuple)

def fn(a, *args):
    print('a:', a)
    print('args:', args)
    for i in args:
        print(i)
    print(type(args))

'''
a: 1
args: (2, 3, 4, 5)
2
3
4
5
<class 'tuple'>
'''
fn(1, 2, 3, 4, 5)

* 把函数fn()接受到的多个参数2,3,4,5,打包成了元组(2,3,4,5),赋值给了形参args 

* 的作用:函数接受实参时,按顺序分配给函数形参,如果遇到带∗的形参,那么就把还未分配出去的实参以元组形式打包(pack),分配给那个带∗的形参args

形参args仅仅是一个约定俗成的形参的写法,你写成别的形参名也没事,但是不利于统一形式

# 定义可变参数在参数前面加了一个*号 
def calc(*args):
    sum = 0
    for n in args:
        sum = sum + n * n
    return sum

# 调用calc函数时,可以传入任意个参数,包括0个参数
calc() # 0
calc(1,2,3) # 14
calc(1,3,5,7) # 84

**kwargs:关键字参数

关键字参数允许传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict字典

形参kwargs仅仅是一个约定俗成的写法,没有其他特殊含义,换成其他的形参名也没事,但是为了代码可读性,最好还是用约定俗成的

关键字参数可以扩展函数的功能

def fn(**kwargs):
    print(type(kwargs))
    print(kwargs)

'''
<class 'dict'>
{'a': 1, 'b': 2, 'c': 3}
'''
fn(a=1, b=2, c=3)
def person(name, age, **kwargs):
    print('name:', name, 'age:', age, 'info:', kwargs)
    

# 函数person除了必选参数name和age外,还接受关键字参数kwargs
# name: Andy age: 25 info: {}
person('Andy', 25)
# name: Lee age: 26 info: {'city': 'GuangZhou'}
person('Lee', 26, city='GuangZhou')
# name: Rita age: 30 info: {'gender': 'M', 'job': 'Engineer'}
person('Rita', 30, gender='M', job='Engineer')

扩展补充知识

def fn(a, b, c):
    print(a, b, c)

# 1 2 3
fn(*[1, 2, 3])

# 1 2 3
fn(**{'a': 1, 'b': 2, 'c': 3})

用在了函数调用中,可以将打包了的实参(元组或列表),拆分(unpack)成单个的值,依次赋值给函数的形参,在本例中,打包了的实参[1, 2, 3]被拆分,1赋值给了形参a,2赋值给了形参b,3复制给了形参c

**也可用在函数调用中,可将打包的实参字典的键值拆成单个的,依次赋值给函数的形参,在本例中,打包了的实参{'a': 1, 'b': 2, 'c': 3}被拆分,1赋值给了形参a,2赋值给了形参b,3复制给了形参c

注意Tips:用**方式拆解字典给形参赋值时,需要字典的键名和函数形参一致,否则会报错


[Python] Python函数传参机制icon-default.png?t=O83Ahttps://blog.csdn.net/Hudas/article/details/125853944

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值