# Python 函数
# 函数定义
# 基本函数定义
def greet(name):
return f"你好,{name}!"
# 带默认参数的函数
def greet_with_title(name, title="先生"):
return f"你好,{title}{name}!"
# 可变参数函数
def sum_numbers(*args):
return sum(args)
# 关键字参数函数
def print_info(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
# 函数返回值
# 多返回值
def get_coordinates():
return 10, 20
x, y = get_coordinates()
# 返回None
def do_nothing():
pass
# 函数作用域
# 全局变量和局部变量
global_var = 10
def modify_global():
global global_var
global_var = 20
# 闭包
def outer_function(x):
def inner_function(y):
return x + y
return inner_function
# 装饰器
# 基本装饰器
def log_function(func):
def wrapper(*args, **kwargs):
print(f"调用函数: {func.__name__}")
result = func(*args, **kwargs)
print(f"函数执行完成")
return result
return wrapper
@log_function
def add(a, b):
return a + b
# 带参数的装饰器
def repeat(times):
def decorator(func):
def wrapper(*args, **kwargs):
for _ in range(times):
result = func(*args, **kwargs)
return result
return wrapper
return decorator
@repeat(3)
def greet(name):
print(f"Hello, {name}!")
# 生成器
# 生成器函数
def count_up_to(n):
i = 1
while i <= n:
yield i
i += 1
# 生成器表达式
squares = (x**2 for x in range(10))
# Lambda函数
# 基本lambda函数
square = lambda x: x**2
# 在高阶函数中使用
numbers = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x**2, numbers))
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
# 递归函数
# 阶乘计算
def factorial(n):
if n <= 1:
return 1
return n * factorial(n - 1)
# 斐波那契数列
def fibonacci(n):
if n <= 1:
return n
return fibonacci(n-1) + fibonacci(n-2)
# 最佳实践
函数设计
- 遵循单一职责原则
- 保持函数简短且功能明确
- 使用有意义的函数名和参数名
参数处理
- 合理使用默认参数
- 注意可变默认参数的陷阱
- 适当使用类型提示
装饰器使用
- 用于横切关注点
- 保持装饰器简单
- 正确处理函数元数据
生成器应用
- 处理大数据集
- 实现惰性求值
- 提高内存效率
# 练习题
- 实现一个缓存装饰器
- 编写生成器处理大文件
- 使用递归解决实际问题
# 下一步
学习Python的模块和包管理,了解如何组织更大的项目。