在这篇博文中,我们会使用sum()
和information()
作为例子来如何正确地向函数传入参数
可变参数
(*args)
所谓可变参数,是其指参数的个数可变,这对于多次在给一个函数传入非固定个数参数的场景来说十分的好用。(看到这里有疑问?看下面的例子---->>>>)
首先看一个比较麻烦的写法:
sum()
函数接收多个整数,然后对这些整数进行求和,返回求和的结果。所以要给sum()
传入多个数字,一种可能的方法如下:
list1 = [1,2,3,4]
list2 = [1,2,3,4,5]
def sum(list):
result = 0
for i in list:
result += i
return(result)
print(sum(list1))#10
print(sum(list2))#15
有一点需要注意的是,使用上述sum()
的时候,需要首先定义一个列表,这样的写法比较麻烦,如果使用可变参数的方法就可以使得代码更加简洁,可变参数允许你传入0个或任意
个参数,这些可变参数在函数调用时会自动组装为一个元组(tuple)
。
def sum1(*list):
result = 0
for i in list:
result += i
return(result)
print(sum1(1,2,3,4)) #10
print(sum1(1,2,3,4,5)) #15,无需再定义新的列表
关键字参数
(**kwargs)
与可变参数类似,关键字参数也可以传入非固定个数的参数,但是与之不同的是,关键字参数允许你传入0个或任意
个含参数名的参数,这些关键字参数在函数内部自动组装为一个字典(dict)
。
def information(**kwargs):
print("kwargs中包含:",kwargs)
information() #kwargs中包含: {}
information(age=1,name="Ben") #kwargs中包含: {'name': 'Jack', 'age': 1}
从打印的结果可以看出**kwargs是一个字典
def information1(**kwargs):
if 'age' in kwargs:
print("age:",kwargs['age'])
if 'name' in kwargs:
print("name:",kwargs['name'])
else:
pass
information1(age=1,name="Ben") #age: 1
#name: Ben
命名关键字参数
(其他参数,*,命名关键字参数)
上面我们介绍的关键字参数可以传入0到任意个参数,在某些传入关键字的场景中,我们想要控制传入的关键字参数,使得只能传入指定的关键字参数,所以,我们引入命名关键字参数
def information2(age,*, name, address):
print("age:", age, "; name:", name, "; address:", address)
information2(1,name="Ben", address="somewhere,China")
#age: 1 ; name: Ben ; address: somewhere,China
传入命名关键字参数
时需要注意,*
后的参数都是要传入命名的参数,如上面例子中的age=1