python装饰器

python装饰器

装饰器示例代码

python 复制代码
def 外func(被装饰func):
    """
    这是一个装饰器示例,展示如何使用中文命名函数和变量。
    被装饰func: 这是将被装饰的函数
    """
    def 内func(*args, **kwargs):
        """
        内func 的 Docstring
        :param args: 一个星号 * 收集位置参数
        :param kwargs: 两个星号 ** 收集关键字参数
        """
        print("开始装饰器功能")
        result = 被装饰func(*args, **kwargs)
        print("结束装饰器功能")
        return result
    return 内func

装饰器应用示例

shell 复制代码
def outer_func(func):
    def inner_func(*args, **kwargs):
        print("内函数执行前代码")
        result = func(*args, **kwargs)
        print("内函数执行后代码")
        return result
    return inner_func

@outer_func
def send_email(邮箱地址, 主题, 邮件内容):
    print(f"Sending email to: {邮箱地址}")
    print(f"Subject: {主题}")
    print(f"Body: {邮件内容}")  

if __name__ == "__main__":
    send_email("test@test.com", "测试主题", "测试邮件内容.")

实战应用示例

  • 背景描述:
  1. 数据库在内网,只有跳板机才能连接到;
  2. ecs_client不能直接连接到数据库;
  3. ecs_client能连接到跳板机。
shell 复制代码
def ssh_D(exec_select_sql_func):
    """
    用来在SSH隧道中执行SELECT SQL语句的装饰器
    exec_select_sql_func: 查询sql的函数
    """
    def wrapper(*args, **kwargs):
        """
        wrapper 的 Docstring
        :param args: 一个星号 * 收集位置参数
        :param kwargs: 两个星号 ** 收集关键字参数
        """
        print("1. 建立SSH隧道连接,并建立动态端口转发")
        print("2. 切换全局socket到SSH隧道的动态端口")
        result = exec_select_sql_func(*args, **kwargs)
        print("4. 关闭SSH隧道连接")
        return result
    return wrapper

@ssh_D
def execute_select_sql(sql_query):
    """
    执行SELECT SQL语句的函数
    sql_query: 要执行的SQL查询语句
    """
    print(f"3. 内函数 执行SQL查询: {sql_query}")
    # 模拟查询结果
    return ["结果1", "结果2", "结果3"]  

if __name__ == "__main__":
    sql = "SELECT * FROM users WHERE age > 30;"
    results = execute_select_sql(sql)
    print("查询结果:", results)
相关推荐
学逆向的3 小时前
win32注入代码
开发语言·网络安全·api·win32
MoRanzhi12033 小时前
第 3 篇 · 数据清洗与特征工程:从问题判定到特征构建
python·pandas·数据清洗·特征工程·缺失值处理·异常值检测·特征编码
Sarvartha3 小时前
内部类知识
java·开发语言
刘科领3 小时前
使用ollama & openweb-ui 本地搭建自己的AI
人工智能·python·ui·ai
专业程序开发源3 小时前
flask家电故障预测系统92491-计算机课程设计/毕业设计
vscode·python·sql·算法·flask·课程设计
夜雪一千3 小时前
Python 生成模拟地址数据:Faker之外的备选库
网络·windows·python
半亩码田3 小时前
C#转Python第4.8篇:正则表达式:Python re 模块 vs C# System.Text.RegularExpressions
python·正则表达式·c#
夜雪一千3 小时前
如何取消PyCharm自动识别test开头文件并进入测试模式
ide·python·pycharm
yi0114 小时前
LeetCode 643. 子数组最大平均数 I|从暴力枚举到滑动窗口
人工智能·笔记·python·算法·leetcode·滑动窗口
小李不困还能学4 小时前
PyCharm远程开发连接失败排查与解决
ide·python·pycharm