python函数用法(二)
1. 递归函数
递归函数是调用自身的函数。递归在解决某些问题时非常有用,如计算阶乘、遍历树形结构等。
python复制代码
|
def factorial(n): |
|
"""This function calculates the factorial of a number.""" |
|
if n == 0: |
|
return 1 |
|
else: |
|
return n * factorial(n - 1) |
|
|
|
print(factorial(5)) # 输出:120 |
2. 生成器函数
生成器函数是一种特殊的函数,它使用yield关键字而不是return来返回值。生成器函数返回一个迭代器,可以在需要时逐个产生值,而不是一次性计算所有值并返回它们。这对于处理大量数据或无限序列非常有用。
python复制代码
|
def square_numbers(n): |
|
"""This generator function yields squares of numbers up to n.""" |
|
for i in range(n): |
|
yield i ** 2 |
|
|
|
# 创建一个生成器对象 |
|
squares = square_numbers(5) |
|
|
|
# 遍历生成器对象,打印每个值 |
|
for square in squares: |
|
print(square) |
|
|
3. 装饰器函数
装饰器是Python中一个高级功能,它允许你修改或增强函数的行为,而无需修改函数本身的代码。装饰器本质上是一个接受函数作为参数的可调用对象(通常是另一个函数),并返回一个新函数。
下面是一个简单的装饰器示例,它用于记录函数执行的时间:
python复制代码
|
import time |
|
|
|
def timing_decorator(func): |
|
"""This decorator measures the execution time of a function.""" |
|
def wrapper(*args, **kwargs): |
|
start_time = time.time() |
|
result = func(*args, **kwargs) |
|
end_time = time.time() |
|
print(f"Function {func.__name__} took {end_time - start_time:.6f} seconds to execute.") |
|
return result |
|
return wrapper |
|
|
|
@timing_decorator |
|
def slow_function(): |
|
"""A slow function that we want to measure the execution time of.""" |
|
time.sleep(2) # Simulate a slow operation |
|
return "Done" |
|
|
|
# 调用被装饰的函数 |
|
slow_function() |
在上面的例子中,@timing_decorator是装饰器的语法糖,它等价于slow_function = timing_decorator(slow_function)。当调用slow_function时,实际上调用的是wrapper函数,它在执行原函数前后添加了时间测量代码。