阶段 1: 基本函数
在这个阶段,函数是简单的,并且执行单个任务。它们可能不包含参数或返回值。
示例代码
def greet():
print("Hello, World!")
- 函数可以非常简单,不需要任何输入(参数)或输出(返回值),它们专注于执行一个明确的、固定的任务。例如,打印一条固定的欢迎消息。
阶段 2: 参数化函数
函数现在接受参数,这使得它们更灵活和可重用。
示例代码
def greet(name):
print(f"Hello, {name}!")
- 为了使函数能够处理不同的数据和执行更通用的任务,引入参数是至关重要的一步。参数允许我们将外部信息传递给函数,从而改变函数的行为和输出。
阶段 3: 带有返回值的函数
函数现在返回一个值,而不仅仅是打印输出,这允许调用者使用函数的结果进行进一步的操作。
示例代码
def add(a, b):
return a + b
result = add(3, 5)
print(result)
- 通过 "return" 语句真正实现了函数作为计算单元的角色,其结果可以被程序中的其他部分所利用,这标志着函数的功能性和实用性得到了显著提升。
阶段 4: 带有默认参数的函数
引入了默认参数值,使得函数更加通用和灵活。
示例代码
def greet(name="World"):
print(f"Hello, {name}!")
greet()
greet("Clcoding")
- 默认参数是 Python 函数开发中一个强大且方便的特性,能够提高函数的灵活性和易用性。但同时也需要注意其使用规则和潜在的陷阱,尤其是在使用可变类型作为默认值时。
阶段 5: 带有可变参数的函数
函数可以使用 *args 和 **kwargs 来处理可变数量的参数。
示例代码
def add_all(*args):
return sum(args)
print(add_all(1, 2, 3, 4))
def print_info(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
print_info(name="Clcoding", age=25)
可变位置参数 *args :
- 当函数需要接收任意数量的位置参数时,例如计算任意数量数字的总和、找到一组数字中的最大值或最小值等。
- 当你不知道调用函数时会传递多少个参数。
- 在函数定义中,*args 放在普通参数之后。传递给函数的多余的位置参数会被收集到一个元组 args 中。
可变关键字参数 **kwargs :
- 当函数需要接收任意数量的关键字参数时,这些参数通常以 key=value 的形式传递。
- 当你需要传递一些配置选项或者命名参数,但又不确定具体会有哪些参数。
- 在函数定义中,**kwargs 放在 *args 之后(如果两者都存在)。传递给函数的多余的关键字参数会被收集到一个字典 kwargs 中。
阶段 6: 高级函数 - 高阶函数、Lambda 函数和装饰器
高阶函数: 能够接受其他函数作为参数或将函数作为返回值的函数。
Lambdas (Lambda 函数): 匿名、内联函数。
Decorators (装饰器): 修改其他函数行为的函数。
示例代码
def apply_function(func, value):
return func(value)
print(apply_function(lambda x: x**2, 5))
def decorator(func):
def wrapper():
print("Before the function call")
func()
print("After the function call")
return wrapper
@decorator
def say_hello():
print("Hello!")
say_hello()
高阶函数:
- 允许将函数作为参数传递给其他函数,或者从函数中返回函数。
- 实现了更抽象和通用的编程模式,例如回调函数、函数组合等。
- 常见的内置高阶函数包括 map(), filter(), sorted(), functools.reduce() 等。
Lambda 函数:
- 用于创建简短的、匿名的函数。
- 通常用在需要一个函数作为参数但这个函数逻辑很简单,不需要显式定义函数名的场景,例如在使用 map(), filter(), sorted() 时作为 key 函数。
- 语法简洁:lambda arguments: expression。
装饰器:
- 提供了一种简洁优雅的方式来修改或增强函数(或方法)的行为,而无需修改其原始代码。
- 通过 @decorator_name 语法应用到函数上。
- 常用于实现日志记录、性能分析、权限控制、缓存等横切关注点。
- 本质上是一个接受函数作为参数并返回一个新函数的闭包。
掌握这些高级函数特性对于编写更Pythonic、更高效和更易于维护的代码至关重要。 它们是函数式编程在 Python 中的体现,能够帮助开发者以更抽象和声明式的方式思考问题。理解高阶函数、Lambda 函数和装饰器是 Python 进阶的关键一步。