目录
- 函数简介
- 基本函数语法
- 函数参数
- 返回值
- 高级函数概念
- 列表推导式与Lambda函数
- 实用示例
函数简介
函数是可重用的代码块,用于执行特定任务。它们有助于组织代码,促进复用,并使程序更易于维护。可以将函数视为程序中的小型程序。
基本函数语法
在Python中定义函数的基本语法如下:
def function_name(parameters):# 函数体# 要执行的代码return value # 可选
示例:
def greet(name):return f"Hello, {name}!"# 调用函数
message = greet("Alice")
print(message) # 输出: Hello, Alice!
函数参数
默认参数
def greet(name, greeting="Hello"):return f"{greeting}, {name}!"print(greet("Bob")) # 输出: Hello, Bob!
print(greet("Bob", "Hi")) # 输出: Hi, Bob!
位置参数与关键字参数
def create_profile(name, age, occupation):return f"Name: {name}, Age: {age}, Occupation: {occupation}"# 使用位置参数
print(create_profile("Alice", 30, "Engineer"))# 使用关键字参数
print(create_profile(age=30, name="Alice", occupation="Engineer"))
*args 和 **kwargs
def print_all(*args, **kwargs):# 打印位置参数for arg in args:print(f"位置参数: {arg}")# 打印关键字参数for key, value in kwargs.items():print(f"关键字参数: {key} = {value}")print_all(1, 2, 3, name="Alice", job="Developer")
返回值
函数可以返回单个值、多个值,或什么都不返回(默认返回None)。
# 多个返回值
def get_coordinates():x = 10y = 20return x, y# 返回值为元组
gx_coord, y_coord = get_coordinates()
print(f"X: {x_coord}, Y: {y_coord}")# 提前返回
def check_number(n):if n < 0:return "负数"elif n > 0:return "正数"return "零"
高级函数概念
嵌套函数
def outer_function(x):def inner_function(y):return x + yreturn inner_function# 创建闭包
add_five = outer_function(5)
print(add_five(3)) # 输出: 8
装饰器
def timer_decorator(func):from time import timedef wrapper(*args, **kwargs):start = time()result = func(*args, **kwargs)end = time()print(f"函数 {func.__name__} 用时 {end - start:.2f} 秒")return resultreturn wrapper@timer_decorator
def slow_function():import timetime.sleep(1)return "完成!"slow_function()
列表推导式与Lambda函数
列表推导式
列表推导式提供了一种基于现有序列创建新列表的简洁方式。
# 基本列表推导式
squares = [x**2 for x in range(10)]
print(squares) # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]# 带条件的列表推导式
even_squares = [x**2 for x in range(10) if x % 2 == 0]
print(even_squares) # [0, 4, 16, 36, 64]# 嵌套列表推导式
matrix = [[i+j for j in range(3)] for i in range(3)]
print(matrix) # [[0, 1, 2], [1, 2, 3], [2, 3, 4]]
Lambda函数
Lambda函数是可以内联定义的小型匿名函数。
# 基本lambda函数
square = lambda x: x**2
print(square(5)) # 25# 多参数lambda
add = lambda x, y: x + y
print(add(3, 4)) # 7# lambda结合列表推导和map
numbers = [1, 2, 3, 4, 5]
doubled = list(map(lambda x: x*2, numbers))
print(doubled) # [2, 4, 6, 8, 10]
实用示例
数据处理函数
def process_data(data, filters=None, transform=None):"""使用可选的过滤和转换处理数据列表。参数:data: 要处理的值列表filters: 要应用的过滤函数列表transform: 应用于过滤后数据的转换函数"""result = data# 如果有过滤器则应用if filters:for filter_func in filters:result = [item for item in result if filter_func(item)]# 如果有转换则应用if transform:result = [transform(item) for item in result]return result# 示例用法
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
is_even = lambda x: x % 2 == 0
is_greater_than_five = lambda x: x > 5
double = lambda x: x * 2# 使用过滤和转换处理数据
result = process_data(numbers,filters=[is_even, is_greater_than_five],transform=double
)
print(result) # [12, 16, 20]
函数中的错误处理
def safe_divide(a, b):"""安全地进行除法运算并处理错误。"""try:result = a / bexcept ZeroDivisionError:print("错误: 除数为零!")return Noneexcept TypeError:print("错误: 除法类型无效!")return Noneelse:return resultfinally:print("尝试了除法操作")# 示例用法
print(safe_divide(10, 2)) # 5.0
print(safe_divide(10, 0)) # None(带错误信息)
print(safe_divide(10, "2")) # None(带错误信息)
生成器函数
def fibonacci_generator(n):"""生成n个斐波那契数。"""a, b = 0, 1count = 0while count < n:yield aa, b = b, a + bcount += 1# 使用生成器
fib = fibonacci_generator(10)
fibonacci_list = list(fib)
print(fibonacci_list) # [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
本教程涵盖了Python函数的基础和高级概念。通过修改示例和编写自己的函数来练习这些概念。记住,函数是组织代码、提高可维护性和复用性的强大工具。