python (*args,**kw)可变参数浅析

本文深入浅出地介绍了Python中可变参数的使用,包括*args用于收集位置参数,返回元组;**kw用于收集关键字参数,返回字典。讲解了参数收集的便利性和参数定义顺序的要求,并通过示例代码和zip函数的应用进行了说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一,参数收集

编程语言在定义函数时,如果需要传入的参数是不固定的,可能需要区分多种情况,定义多个函数名相同传参不同的函数,这样代码显得很冗余,python为解决这个问题,推出了参数收集,简化代码,形式如下:

  • 定义函数时,在传参时加一个*号,函数可以收集0~N个值作为参数,返回结果是一个元组;
  • 定义函数时,在传参时加一个**号,函数可以收集关键字参数,返回参数名为key值,参数值为values值的字典。

这样写简化代码,美观,参数可变时不要对参数做任何修改。

示例代码如下:

#收集任意个数参数
def print_args(*args):
    print args
    
#收集关键字参数
def print_kw(**kw):
    print kw
    
#收集任意参数,基本可以代表任意参数
def print_params(*args,**kw):
    print args,kw
    
#参数组合
def print_all(a,b,c=0,*args,**kw):
    print a,b,c,args,kw

print_args(1,2,34,4,45,5)#收集任意个数参数
print_args()#如果参数为空,返回的也是元元组
print_args('sss')#如果参数个数为1,也是元组形式

print_kw()#返回空字典
print_kw(qwe=99)
print_kw(ss=12,fa=424)

print_params()
print_params(132,24,'ss',42)
print_params(ss=234)
print_params(12,24,66,ss=432,hsg=546)

print_all(23, 543,134124,1342,4234,asdfg=24,kj=545)

结果如下所示:
这里需要注意的是参数组合参数定义的顺序必须是:位置参数、默认参数、可变参数、命名关键字参数和关键字参数。 

(1, 2, 34, 4, 45, 5)
()
('sss',)
{}
{'qwe': 99}
{'ss': 12, 'fa': 424}
() {}
(132, 24, 'ss', 42) {}
() {'ss': 234}
(12, 24, 66) {'ss': 432, 'hsg': 546}
23 543 134124 (1342, 4234) {'kj': 545, 'asdfg': 24}

 二、参数分配

def add(x,y):
    return x+y

def fun(name,greeting):
    print greeting,name
    
param=(1,2)
prarmtemp=(1,2,34,4)
print add(*param)
# print add(*prarmtemp) 这样会报错,只需要两个参数,给了四个

aram = {'name' :'jack','greeting':'well met'}
fun(**aram)
3
well met jack

三、zip函数

zip()函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表

如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。

a=[1,2,'sss',45]
b=[121,24,54,43,5]

zipped=zip(a,b)
#返回元组的列表
print zip(a)
#返回的元素个数与最短的列表一致
print zip(a,b)
#参数分配机制,可以看出此处如何实现的
print zip(*zipped)
[(1,), (2,), ('sss',), (45,)]
[(1, 121), (2, 24), ('sss', 54), (45, 43)]
[(1, 2, 'sss', 45), (121, 24, 54, 43)]

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值