Python中的参数传递和函数调用的方式有哪些?
Python 中的参数传递和函数调用有四种方式:
1. 位置参数传递
位置参数是按照顺序传递的,即 个参数传递给函数中的 个参数,第二个参数传递给函数中的第二个参数,以此类推。位置参数必须传递,否则将会导致语法错误。
示例:
def add(a, b):
return a + b
print(add(1, 2))
输出:3
在上面的示例中,函数 add() 接受两个位置参数 a 和 b,将它们相加并返回它们的和。在调用函数时,我们按照顺序将 1 和 2 作为参数传递给 add() 函数,然后它返回了 3。
2. 关键字参数传递
关键字参数是按照名称传递的,即我们可以通过参数名称来传递参数,这样就不需要按照顺序传递参数。关键字参数是可选的,如果我们不传递它们,函数会使用默认值。
示例:
def greet(name, message="Hello"):
print(message, name)
greet(name="Alice", message="Hi")
greet(name="Bob")
输出:
Hi Alice
Hello Bob
在上面的示例中,函数 greet() 接受两个参数 name 和 message。 message 有默认值为 "Hello"。在 次调用函数时,我们使用关键字参数传递了 name 和 message,因此它以 Hi Alice 的形式打印出来。在第二次调用中,我们只传递了 name,因此函数使用默认值 "Hello",打印出 Hello Bob。
3. 可变参数传递
可变参数是一种能够接受变量数量的参数的特殊类型的参数。如果我们不知道函数需要接受多少个参数,那么我们可以使用可变参数。
在 Python 中有两种类型的可变参数:*args 和 **kwargs。
*args 表示它可以接受任意数量的位置参数。它们被收集到元组中。
示例:
def add(*args):
result = 0
for num in args:
result += num
return result
print(add(1, 2, 3))
print(add(10, 20, 30, 40, 50))
输出:
6
150
在上面的示例中,函数 add() 接受一个可变数量的位置参数 *args。它们被收集到元组中,并计算它们的和。在 次调用中,它接受三个位置参数并返回它们的和。在第二个调用中,它接受五个参数并返回它们的和。
**kwargs 表示它可以接受任意数量的关键字参数。它们被收集到字典中。
示例:
def show(**kwargs):
for key, value in kwargs.items():
print(key, value)
show(name="Alice", age=20, city="New York")
输出:
name Alice
age 20
city New York
在上面的示例中,函数 show() 接受一个可变数量的关键字参数 **kwargs。 它们被收集到字典中,并打印键和值。
4. Lambda 函数
Lambda 函数是一种匿名函数,它通常用于定义一个简短的函数,它只需要在程序中使用一次,并且可以在函数体内定义参数。
示例:
students = [
{"name": "Alice", "score": 90},
{"name": "Bob", "score": 80},
{"name": "Charlie", "score": 70},
]
students.sort(key=lambda x: x["score"], reverse=True)
print(students)
输出:
[{'name': 'Alice', 'score': 90}, {'name': 'Bob', 'score': 80}, {'name': 'Charlie', 'score': 70}]
在上面的示例中,我们使用 lambda 函数作为 sort() 函数的 key 参数来按照学生的成绩进行排序。 lambda x: x["score"] 表示函数接受一个参数 x,然后访问它的 "score" 属性并返回它。
