今天是闭包,装饰器和案例

1. 闭包(Closure)

闭包是指一个函数(称为内部函数)和与其相关的引用环境(通常是一个包含函数定义时存在的非全局作用域)的组合。闭包允许函数访问其定义时的作用域外部的变量。

下面是一个简单的闭包示例:


  

pythonCopy Code

def outer_function(x):
    def inner_function(y):
        return x + y
    return inner_function

# 创建一个闭包
closure = outer_function(10)

# 使用闭包
result = closure(5)  # inner_function 访问了 outer_function 的 x
print(result)  # 输出: 15

在这个例子中,inner_function 是一个闭包,它可以访问外部函数 outer_function 中的变量 x

2. 装饰器(Decorator)

装饰器是一种Python的函数,它可以用来修改其他函数的行为。装饰器本身是一个函数,它接受一个函数作为参数,并返回一个新的函数。

下面是一个简单的装饰器示例:


  

pythonCopy Code

# 装饰器函数
def my_decorator(func):
    def wrapper():
        print("在调用函数之前做一些操作")
        func()  # 调用原始函数
        print("在调用函数之后做一些操作")
    return wrapper

# 被装饰的函数
def say_hello():
    print("你好!")

# 使用装饰器
say_hello = my_decorator(say_hello)

# 调用被装饰后的函数
say_hello()

输出:


  

Copy Code

在调用函数之前做一些操作 你好! 在调用函数之后做一些操作

3. 装饰器案例

通常,我们会使用 @ 符号来应用装饰器,这样代码更加简洁和易读。下面是上面示例的装饰器版本:


  

pythonCopy Code

# 装饰器函数
def my_decorator(func):
    def wrapper():
        print("在调用函数之前做一些操作")
        func()  # 调用原始函数
        print("在调用函数之后做一些操作")
    return wrapper

# 使用装饰器
@my_decorator
def say_hello():
    print("你好!")

# 调用被装饰后的函数
say_hello(

  

Copy Code

在调用函数之前做一些操作 你好! 在调用函数之后做一些操作

在这个例子中,my_decorator 函数就是一个装饰器,它修改了 say_hello 函数的行为,使其在调用前后打印额外的信息。

相关推荐

  1. 今天装饰案例

    2024-07-23 08:14:03       36 阅读
  2. python -装饰

    2024-07-23 08:14:03       40 阅读
  3. Python笔记11-装饰设计模式

    2024-07-23 08:14:03       63 阅读
  4. Python--装饰高级应用

    2024-07-23 08:14:03       32 阅读
  5. 深入理解Python中的装饰

    2024-07-23 08:14:03       32 阅读
  6. Python装饰

    2024-07-23 08:14:03       68 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-23 08:14:03       168 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-23 08:14:03       185 阅读
  3. 在Django里面运行非项目文件

    2024-07-23 08:14:03       155 阅读
  4. Python语言-面向对象

    2024-07-23 08:14:03       169 阅读

热门阅读

  1. 【Golang 面试基础题】每日 5 题(三)

    2024-07-23 08:14:03       34 阅读
  2. 【策略模式在项目中的实际应用】

    2024-07-23 08:14:03       30 阅读
  3. 前端设计模式面试题汇总

    2024-07-23 08:14:03       27 阅读
  4. 预训练语言模型实践笔记

    2024-07-23 08:14:03       41 阅读
  5. 坑人的macos tar 命令 (实际上是bsdtar)换用 gnu tar

    2024-07-23 08:14:03       36 阅读
  6. windows下玩转DockerDesktop--学习笔记

    2024-07-23 08:14:03       34 阅读
  7. 45、PHP 实现滑动窗口的最大值

    2024-07-23 08:14:03       34 阅读
  8. PHP框架简介

    2024-07-23 08:14:03       28 阅读
  9. Scratch语言详解

    2024-07-23 08:14:03       33 阅读
  10. GCD异步与同步任务执行顺序分析

    2024-07-23 08:14:03       33 阅读
  11. 设计模式-策略模式

    2024-07-23 08:14:03       34 阅读