目录
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]
将列表分为三个不同的部分。取出第一个值,最后一个值以及之间的所有值。