Python args 和 kwargs

目录

 

1. 在函数定义中使用*args

2 在函数定义中使用**kwargs

3.参数顺序

4.拆包运算符(*)(**)


1. 在函数定义中使用*args

以下是个自定义的求和函数:

>>> def my_sum(a,b):
	return a + b 

>>> my_sum(1,2)
3

 此函数仅能对2个数求和,如果需要对不同数量的参数求和,而传递的特定数量的参数仅在运行时确定,进行更改:

>>> def my_sum(a_list):
	result = 0
	for i in a_list:
		result += i
	return result

>>> l = [x for x in range(10)]
>>> l
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> my_sum(l)
45

(实际上它对可迭代对象都是有效的,但这里希望关注的是列表)

然而如果对象不是预先知道的,这个函数就不适用了,进行更改:

>>> def my_sum_2(*args):
	result = 0
    '''args是打包后的元组,对它迭代
    '''
	for i in args:
		result += i
	return result


>>> my_sum_2(1)
1
>>> my_sum_2(1,2,3)
6
>>> my_sum_2(1,2,3,4,5,6)
21

*args 能让函数接受任意数量的位置参数

在本例中,不再向my_sum()传递列表,而是传递随意数量的位置参数,my_sum()接受输入中提供的所有参数,并使用拆包运算符(*)将所有参数打包到一个名为args的元组中。当然,args只是一个名称,可以用其他的代替。另外Python允许你在list或tuple前面加一个*号,把list或tuple的元素变成可变参数传进去

 

2 在函数定义中使用**kwargs

*args 能让函数接受任意数量的关键字参数

**kwargs的工作方式与*args类似,但它不接受位置参数,而是接受命名参数,并使用拆包运算符(**)将所有参数打包到一个名为kwargs的字典中。

>>> def mark_sum(**kwargs):
	result = 0
    '''kwargs是打包后的字典,用dcit.values()返回一个值的列表,并迭代
    '''
	for key in kwargs.values():
		result += key
	return result

>>> mark_sum(chinese = 100,math = 98,english = 99)
297

3.参数顺序

参数的正确顺序是:

#1 标准参数

#2 *args 

#3 **kwargs 

如下:

def my_function(a, b, *args, **kwargs):
    pass

4.拆包运算符(*)(**)

'''拆包运算符(*)
'''
>>> l1 = ['chinese','math']
>>> l2 = ['english','physics']
>>> l1
['chinese', 'math']
>>> l2
['english', 'physics']
>>> l_gather = [*l1,*l2]
>>> l_gather
['chinese', 'math', 'english', 'physics']


'''拆包运算符(**)
'''
>>> x = {'chinese' : 100,'math' : 98}
>>> y = {'english' : 99,'physics' : 99}
>>> x
{'chinese': 100, 'math': 98}
>>> y
{'english': 99, 'physics': 99}
>>> gather = {**x,**y}
>>> gather
{'chinese': 100, 'math': 98, 'english': 99, 'physics': 99}

还支持切片:

>>> ls = [x for x in range(101)]
>>> ls
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98,99,100]
>>> start,*new_ls,end = ls
>>> start
0
>>> end
100
>>> new_ls
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97,98,99]

将列表分为三个不同的部分。取出第一个值,最后一个值以及之间的所有值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值