Python函数中的参数类型:可变参数、关键字参数和默认参数
在Python中,我们可以定义函数,将一段代码组织为一个整体,方便复用。函数通常具有输入(参数)和输出(返回值),其中输入参数又分为不同的类型,包括可变参数、关键字参数和默认参数。这些不同类型的参数可以让我们更方便、灵活地调用函数,下面我们将一一介绍。
1. 可变参数
可变参数指的是在函数定义时,我们可以预留一个不定数量的参数。在Python中,可变参数分为两种,分别是*args和**kwargs。
*args表示我们在调用函数时可以传入任意数量的非关键字参数,这些参数将被打包成一个元组。
例如,我们可以定义一个sum函数来求一组数的和,无论这组数的数量有多少个:
def sum(*args):
res = 0
for i in args:
res += i
return res
print(sum(1,2,3,4,5)) # 15
print(sum(1,2,3,4)) # 10
print(sum(1,2)) # 3
注意,在调用函数时,我们需要将参数以逗号分隔开即可。
**kwargs表示我们在调用函数时可以传入任意数量的关键字参数,这些参数将被打包成一个字典。
例如,我们可以定义一个info函数来输出个人信息,无论个人信息有多少条:
def info(**kwargs):
for key,value in kwargs.items():
print(key,":",value)
info(name="Tom",age=18,gender="male")
info(city="New York",job="Engineer")
输出:
name : Tom
age : 18
gender : male
city : New York
job : Engineer
需要注意的是,在定义函数时,如果同时需要使用*args和**kwargs,我们需要按照顺序声明这两个参数,即*args放在前面,**kwargs放在后面。
例如,我们可以定义一个person函数来输出一个人的所有信息:
def person(name,*args,**kwargs):
print("name:",name)
print("args:",args)
print("kwargs:",kwargs)
person("Tom","China",18,gender="male",city="Shanghai")
输出:
name : Tom
args : ('China', 18)
kwargs : {'gender': 'male', 'city': 'Shanghai'}
2. 关键字参数
关键字参数指的是在调用函数时,我们可以通过键值对的方式将参数传入函数。这个特性使得我们在调用函数时可以不用关心参数的顺序,只需要将参数名和对应的值传给函数即可。
例如,我们可以定义一个point函数来表示一个点的坐标:
def point(x,y):
print("point coordinates:",x,y)
point(x=10,y=20)
point(y=20,x=10)
输出:
point coordinates: 10 20
point coordinates: 10 20
需要注意的是,如果我们使用了可变参数,则需要传递的关键字参数必须要在*args的参数之后,否则将会产生语法错误。
3. 默认参数
默认参数指的是在函数定义时,我们可以为参数设置一个默认值,如果在调用函数时没有传递对应的值,则会使用默认值。
例如,我们可以定义一个power函数来计算一个数的n次方,默认情况下n为2:
def power(x,n=2):
res = 1
while n > 0:
res *= x
n -= 1
return res
print(power(4)) # 16
print(power(4,3)) # 64
需要注意的是,当函数的参数中既有默认参数,又有不带默认值的参数时,我们需要按照顺序传递参数。如果需要跳过某一个参数,可以使用下划线_占位,表示跳过该参数。例如:
def person(name,age,city="Beijing"):
print("name:",name)
print("age:",age)
print("city:",city)
person("Tom",18)
person("Jerry",20,city="Shanghai")
person("Lucy",city="Guangzhou",age=22) # 注意参数顺序
person(city="Chongqing",age=25,name="Bob")
person("Lily",_,city="Chengdu") # 使用占位符跳过age这个参数
总结
Python函数中参数类型包括可变参数、关键字参数和默认参数。可变参数分为*args和**kwargs,关键字参数通过键值对的方式传入,而默认参数可以为参数设置一个默认值。使用不同的参数类型可以让我们在调用函数时更加方便与灵活,提高代码的可读性和复用性。
