目录
- 什么是函数
- 函数的定义与调用
- 函数的参数传递
- 默认参数与关键字参数
- 可变长参数
- 匿名函数(Lambda函数)
- 函数的返回值
- 递归函数
- 高阶函数
- 装饰器函数
- 函数的作用域与闭包
- 总结
1. 什么是函数
函数是将一段特定功能的代码封装成一个独立的模块,便于代码的重复利用。函数可以接受输入参数,进行相应的处理,最终返回一个结果。
优点:
- 代码复用性高
- 逻辑清晰,结构化
- 提高代码的可读性和维护性
2. 函数的定义与调用
函数的定义
在 Python 中,使用 def
关键字定义一个函数。函数的定义语法如下:
def function_name(parameters):"""函数的文档字符串 (可选)"""函数体return value # (可选)
示例:
def greet(name):"""简单的问候函数"""return f"Hello, {name}!"# 调用函数
print(greet("Alice")) # 输出:Hello, Alice!
在这个示例中,greet
函数接收一个参数 name
,并返回一个问候字符串。
函数调用
函数调用通过其名称并传入相应的参数,语法如下:
function_name(arguments)
3. 函数的参数传递
函数参数用于传递数据到函数内部进行处理。Python 的函数支持多种形式的参数传递,包括位置参数、关键字参数、默认参数等。
位置参数
位置参数是按照函数定义时的顺序传递的参数。
def add(x, y):return x + y# 调用时按顺序传入参数
print(add(2, 3)) # 输出:5
关键字参数
关键字参数允许在函数调用时通过参数名称来传递参数,而不受顺序的限制。
def introduce(name, age):return f"My name is {name}, and I am {age} years old."# 使用关键字参数
print(introduce(age=30, name="Bob")) # 输出:My name is Bob, and I am 30 years old.
4. 默认参数与关键字参数
默认参数是在函数定义时为某些参数设置默认值,这样在调用函数时可以选择性地省略这些参数。
def greet(name, message="Hello"):return f"{message}, {name}!"# 省略 message 参数
print(greet("Alice")) # 输出:Hello, Alice!
注意事项
默认参数必须出现在位置参数的后面,否则会导致语法错误。
5. 可变长参数
Python 允许函数接收可变长参数,即传递任意数量的参数。使用 *args
和 **kwargs
可以实现这一功能。
位置参数收集(*args)
*args
用于接收任意数量的未命名参数,并将其封装为一个元组。
def sum_numbers(*args):return sum(args)print(sum_numbers(1, 2, 3)) # 输出:6
关键字参数收集(**kwargs)
**kwargs
用于接收任意数量的关键字参数,并将其封装为一个字典。
def print_info(**kwargs):for key, value in kwargs.items():print(f"{key}: {value}")print_info(name="Alice", age=30, city="New York")
# 输出:
# name: Alice
# age: 30
# city: New York
6. 匿名函数(Lambda 函数)
匿名函数是没有名字的函数,使用 lambda
关键字定义。它常用于简单的场景,尤其是作为参数传递给其他函数时。
语法
lambda 参数列表: 表达式
示例:
add = lambda x, y: x + y
print(add(3, 5)) # 输出:8
lambda
函数相当于一行的简化函数定义,适用于简单操作。
7. 函数的返回值
函数通过 return
语句返回结果,return
可以返回任何类型的数据,甚至可以返回多个值。
返回单个值
def square(x):return x * xprint(square(4)) # 输出:16
返回多个值
def get_position():x = 5y = 10return x, y# 返回的是一个元组
pos = get_position()
print(pos) # 输出:(5, 10)
8. 递归函数
递归函数是指在函数内部调用自身的函数,常用于解决分治、树结构遍历等问题。
递归函数示例:计算阶乘
def factorial(n):if n == 1:return 1else:return n * factorial(n - 1)print(factorial(5)) # 输出:120
递归函数必须包含终止条件,否则会导致无限递归,造成程序崩溃。
9. 高阶函数
高阶函数是指可以接收其他函数作为参数,或将函数作为返回值的函数。
示例:map() 函数
def square(x):return x * xnumbers = [1, 2, 3, 4, 5]
squares = map(square, numbers)print(list(squares)) # 输出:[1, 4, 9, 16, 25]
map()
函数将 square
函数应用到 numbers
列表的每个元素上。
10. 装饰器函数
装饰器是高阶函数的一种,用于在不修改原函数代码的前提下扩展其功能。装饰器常用于日志记录、性能监控等场景。
简单装饰器示例
def decorator(func):def wrapper(*args, **kwargs):print("函数调用前")result = func(*args, **kwargs)print("函数调用后")return resultreturn wrapper@decorator
def greet(name):print(f"Hello, {name}!")greet("Alice")
# 输出:
# 函数调用前
# Hello, Alice!
# 函数调用后
在上述代码中,@decorator
将 greet
函数进行装饰,添加了前后打印操作。
11. 函数的作用域与闭包
作用域
Python 中的变量作用域有局部作用域、全局作用域和内嵌作用域。局部作用域的变量在函数内部可见,而全局作用域的变量在整个程序中可见。
x = 10 # 全局变量def func():x = 5 # 局部变量print(x)func() # 输出:5
print(x) # 输出:10
闭包
闭包是指函数内定义的函数可以访问外部函数的局部变量,即使外部函数已经执行完毕,内部函数依然可以使用这些变量。
def outer():x = 10def inner():print(x)return innerclosure = outer()
closure() # 输出:10
12. 总结
本文详细介绍了 Python 函数的各个方面,从最基本的函数定义与调用,到复杂的递归、高阶函数和装饰器等高级概念。掌握这些知识将有助于你在实际编程中更加灵活地使用函数,从而提高代码的可读性、复用性和结构化程度。