装饰器示例代码
def 外func(被装饰func):
"""
这是一个装饰器示例,展示如何使用中文命名函数和变量。
被装饰func: 这是将被装饰的函数
"""
def 内func(*args, **kwargs):
"""
内func 的 Docstring
:param args: 一个星号 * 收集位置参数
:param kwargs: 两个星号 ** 收集关键字参数
"""
print("开始装饰器功能")
result = 被装饰func(*args, **kwargs)
print("结束装饰器功能")
return result
return 内func
装饰器应用示例
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", "测试主题", "测试邮件内容.")

实战应用示例
- 数据库在内网,只有跳板机才能连接到;
- ecs_client不能直接连接到数据库;
- ecs_client能连接到跳板机。

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)
