了解python函数的各种参数传递方式
Python 中的函数参数传递方式有以下几种:
1. 位置参数传递
2. 默认参数传递
3. 关键字参数传递
4. 不定长参数传递
下面将详细介绍每种参数传递方式。
1. 位置参数传递
位置参数是指在调用函数时,将参数按照顺序传递给函数。例如:
def greeting(name, message):
print(f'{name}, {message}!')
greeting('Alice', 'Hello')
# 输出结果
# Alice, Hello!
在上面的例子中,name 和 message 参数的顺序是固定的,所以在调用 greeting() 函数时也必须按照相同的顺序传递参数。如果传递的参数个数不对,将会引起错误:
greeting('Hello', 'Alice')
# 输出结果
# Hello, Alice!
2. 默认参数传递
默认参数是指在定义函数时,为某个参数指定一个默认值。如果在调用函数时没有为该参数传值,则会使用默认值。例如:
def greeting(name, message = 'Hello'):
print(f'{name}, {message}!')
greeting('Alice')
# 输出结果
# Alice, Hello!
在上面的例子中,message 参数使用了默认值 'Hello'。因此,如果调用 greeting() 函数时只传递了 name 参数,message 参数将使用默认值。
如果需要使用自定义的 message 值,可以给 greeting() 函数的 message 参数传递新的值:
greeting('Bob', 'Hi')
# 输出结果
# Bob, Hi!
需要注意的是,如果在定义函数时使用了默认参数,则必须将默认参数放在非默认参数的后面。例如:
def greeting(message = 'Hello', name):
print(f'{name}, {message}!')
# 报错!
# SyntaxError: non-default argument follows default argument
3. 关键字参数传递
关键字参数是指在调用函数时,通过 parameter=value 的形式给函数传递参数。例如:
def greeting(name, message):
print(f'{name}, {message}!')
greeting(message='Hello', name='Alice')
# 输出结果
# Alice, Hello!
在上面的例子中,message 和 name 参数的顺序被交换了,但是因为使用了关键字参数传递,所以程序不会出错。
需要注意的是,如果既使用了位置参数传递,又使用了关键字参数传递,那么关键字参数必须放在位置参数后面。例如:
greeting('Alice', message='Hi')
# 报错!
# TypeError: greeting() got multiple values for argument 'message'
在上面的例子中,message 参数在位置上和关键字上都出现了,所以程序会报错。
4. 不定长参数传递
不定长参数是指在定义函数时,不将参数的个数限制在一个固定数量。Python 中有两种不定长参数传递方式:可变参数和关键字参数。
4.1 可变参数传递
可变参数是指一个函数接受任意数量的参数,这些参数会被放在一个元组中传递给函数。例如:
def sum(*args):
total = 0
for num in args:
total += num
return total
result = sum(1, 2, 3)
print(result) # 6
在上面的例子中,*args 是一个可变参数,可以接受任意数量的参数,最后将它们打包成一个元组传递给函数。在调用 sum() 函数时,传递了三个参数,这三个参数会被放在一个元组中,然后传递给 sum() 函数。
4.2 关键字参数传递
关键字参数是指一个函数接受任意数量的关键字参数,这些参数会被放在一个字典中传递给函数。例如:
def print_info(**kwargs):
for key, value in kwargs.items():
print(f'{key}: {value}')
print_info(name='Alice', age=25, address='123 Main St')
# 输出结果
# name: Alice
# age: 25
# address: 123 Main St
在上面的例子中,**kwargs 是一个关键字参数,可以接受任意数量的关键字参数,将它们作为键值对打包成一个字典传递给函数。
需要注意的是,可变参数必须在关键字参数前。但是,可以同时使用可变参数和关键字参数。例如:
def print_scores(*scores, **kwargs):
for score in scores:
print(f'Score: {score}')
for key, value in kwargs.items():
print(f'{key}: {value}')
print_scores(80, 90, 100, name='Alice', age=25)
# 输出结果
# Score: 80
# Score: 90
# Score: 100
# name: Alice
# age: 25
在上面的例子中,函数接受了三个位置参数和两个关键字参数。位置参数被打包成一个元组传递给函数,关键字参数被打包成一个字典传递给函数。
以上就是 Python 中的函数参数传递方式的详细介绍。为了编写出更加灵活的代码,我们需要熟练掌握这些参数传递方式,在实际编写程序时灵活运用。
