函数六阶:迈向 Python 高手

56 阅读4分钟

阶段 1: 基本函数

在这个阶段,函数是简单的,并且执行单个任务。它们可能不包含参数或返回值。

示例代码

def greet():
    print("Hello, World!")
  1. 函数可以非常简单,不需要任何输入(参数)或输出(返回值),它们专注于执行一个明确的、固定的任务。例如,打印一条固定的欢迎消息。

阶段 2: 参数化函数

函数现在接受参数,这使得它们更灵活和可重用。

示例代码

def greet(name):
    print(f"Hello, {name}!")
  1. 为了使函数能够处理不同的数据和执行更通用的任务,引入参数是至关重要的一步。参数允许我们将外部信息传递给函数,从而改变函数的行为和输出。

阶段 3: 带有返回值的函数

函数现在返回一个值,而不仅仅是打印输出,这允许调用者使用函数的结果进行进一步的操作。

示例代码

def add(a, b):
    return a + b

result = add(3, 5)
print(result)
  1. 通过 "return" 语句真正实现了函数作为计算单元的角色,其结果可以被程序中的其他部分所利用,这标志着函数的功能性和实用性得到了显著提升。

阶段 4: 带有默认参数的函数

引入了默认参数值,使得函数更加通用和灵活。

示例代码

def greet(name="World"):
    print(f"Hello, {name}!")

greet()
greet("Clcoding")
  1. 默认参数是 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 :

  1. 当函数需要接收任意数量的位置参数时,例如计算任意数量数字的总和、找到一组数字中的最大值或最小值等。
  2. 当你不知道调用函数时会传递多少个参数。
  3. 在函数定义中,*args 放在普通参数之后。传递给函数的多余的位置参数会被收集到一个元组 args 中。

可变关键字参数 **kwargs :

  1. 当函数需要接收任意数量的关键字参数时,这些参数通常以 key=value 的形式传递。
  2. 当你需要传递一些配置选项或者命名参数,但又不确定具体会有哪些参数。
  3. 在函数定义中,**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()

高阶函数:

  1. 允许将函数作为参数传递给其他函数,或者从函数中返回函数。
  2. 实现了更抽象和通用的编程模式,例如回调函数、函数组合等。
  3. 常见的内置高阶函数包括 map(), filter(), sorted(), functools.reduce() 等。

Lambda 函数:

  1. 用于创建简短的、匿名的函数。
  2. 通常用在需要一个函数作为参数但这个函数逻辑很简单,不需要显式定义函数名的场景,例如在使用 map(), filter(), sorted() 时作为 key 函数。
  3. 语法简洁:lambda arguments: expression。

装饰器:

  1. 提供了一种简洁优雅的方式来修改或增强函数(或方法)的行为,而无需修改其原始代码。
  2. 通过 @decorator_name 语法应用到函数上。
  3. 常用于实现日志记录、性能分析、权限控制、缓存等横切关注点。
  4. 本质上是一个接受函数作为参数并返回一个新函数的闭包。

掌握这些高级函数特性对于编写更Pythonic、更高效和更易于维护的代码至关重要。 它们是函数式编程在 Python 中的体现,能够帮助开发者以更抽象和声明式的方式思考问题。理解高阶函数、Lambda 函数和装饰器是 Python 进阶的关键一步。