Python函数常用参数详解:位置参数、关键字参数和默认参数
Python是一种高级编程语言,通过定义函数,我们可以在程序中实现代码重用,减少冗余代码。在定义函数时,我们需要说明函数的参数与返回值。Python的函数参数有三种类型:位置参数(positional arguments)、关键字参数(keyword arguments)和默认参数(default arguments)。
位置参数:
位置参数即是按照顺序传递给函数的参数,在函数定义时需要声明参数的名称。例如:
def greet(name, message):
print(message, name)
greet('John', 'Hello')
在上面的代码中,函数greet拥有两个位置参数:name和message。在调用函数时以位置参数的方式分别传入'John'和'Hello'。在函数内部,'John'和'Hello'可以分别通过name和message获取。
关键字参数:
关键字参数即是通过名称传递给函数的参数,和位置参数不同的是,它不需要按照顺序,而是根据参数名来匹配传入的值,在函数定义时需要指定参数名。例如:
def greet(name, message):
print(message, name)
greet(message='Hello', name='John')
在上面的代码中,我们传递给函数greet两个关键字参数:name和message。在函数调用时我们不需要按照参数定义的顺序传递参数,而是可以通过名称传递。同时,参数名对大小写不敏感。
默认参数:
默认参数指的是在函数定义时指定的默认值,函数调用时如果没有传递该参数,则使用默认值。例如:
def greet(name, message='Hello'):
print(message, name)
greet('John')
在上面的代码中,函数greet定义了一个默认参数,当调用greet时只传递'name'参数,因为'message'有默认值,解释器就会使用默认值打印出输出。
除了上面提到的三种参数类型,Python还有三种特殊的参数类型:*args、**kwargs、*。下面我们将分别介绍这三种参数类型:
*args:
*args参数可以接收多个不定长度的位置参数,它把所有的参数保存到一个tuple中,接收任意多个参数,这些参数会以一个tuple的形式传递进来:
def my_sum(*args):
s = 0
for i in args:
s += i
return s
print(my_sum(1, 2, 3, 4, 5)) # 15
print(my_sum(10, 20, 30)) # 60
在上面的代码中,我们定义了一个名为my_sum的函数,函数的前面加上了一个*args参数,表示它可以接收任意个数的位置参数。在函数内部,我们利用for循环遍历所有传入的参数,并将它们相加,最后返回结果。
**kwargs:
**kwargs参数可以接收多个不定长度的关键字参数,它把所有的参数保存到一个dict中,接收任意多个关键字参数,这些参数会以一个dict的形式传递进来:
def describe_person(name, age, **kwargs):
print('Name:', name)
print('Age:', age)
for key, value in kwargs.items():
print(key.capitalize() + ':', value)
describe_person('John', 26, city='New York', country='USA', occupation='Programmer')
在上面的代码中,我们定义了一个名为describe_person的函数,除了name和age两个位置参数外,函数还可以接收任意多个关键字参数,这些参数可以通过for循环遍历,并打印出来。
*:
单个星号*是将列表或元组解包:
def print_nums(a, b, c):
print(a, b, c)
my_list = [1, 2, 3]
print_nums(*my_list) # 1 2 3
在上面的代码中,我们定义了一个名为print_nums的函数,该函数需要三个参数a、b和c。然后我们定义了一个列表my_list,包含了三个元素1、2和3。通过在列表名前加上一个星号*,我们将列表中的元素解包,并按顺序传递给函数print_nums,最终打印出结果。
总结:
Python中函数可以接收三种参数类型:位置参数、关键字参数和默认参数。另外还有三种特殊的参数类型:*args、**kwargs和*。在函数参数的传递过程中,我们可以通过列表、元组、字典等数据类型来保存参数,然后利用*和**符号来调用参数。在Python中,函数传参很灵活,根据具体需求选择不同的参数类型,可以提高工作效率,加快开发速度。
