当前位置: 首页 > news >正文

基础型网站湄潭建设局官方网站

基础型网站,湄潭建设局官方网站,微信小程序怎么做免费,中国建设银行个人信息网站python函数装饰器 声明:博主并没有系统学习过python语言,在实际项目中遇到关于python不懂的语法,这里仅作为个人学习积累笔记 1.1 python函数相关基础 深入了解python函数装饰器移步:Python 函数装饰器 下面的笔记来源于上述链接…

python函数装饰器

声明:博主并没有系统学习过python语言,在实际项目中遇到关于python不懂的语法,这里仅作为个人学习积累笔记

1.1 python函数相关基础

深入了解python函数装饰器移步:Python 函数装饰器
下面的笔记来源于上述链接
python中将函数赋值给变量,并不会执行该函数,函数只有加括号才会被调用

def hi():print("")greet = hi # 函数hi不会被调用,只是将函数赋值给了变量
hi() # 函数会被执行
# 若要通过greet来执行hi函数
greet() # 变量变为了函数

函数中嵌套函数,所有的嵌套函数会被一同执行,并且嵌套函数不能被外界单独访问

def hi():def greet():……def welcome():……
hi() #调用函数hi()则greet() welcome()会被一同调用

函数中嵌套函数时,从中返回某个特定嵌套函数

def hi(name="func1"):def greet():……def welcome():……if name == "func1":return greetelse:return welcome
a = hi() # 将hi()函数返回的函数赋值给a
print(a()) #调用a函数,即返回的greet函数

函数作为另一个函数的参数传入

def hi():……def func2(func1): print(func1())
func2(hi) #将函数hi作为参数传入函数func2,在func2中执行hi函数

1.2 装饰器的核心作用

Python函数装饰器是一种高阶函数,其核心作用是在不修改原函数代码的情况下动态扩展函数功能。这种特性使得装饰器在代码复用、功能解耦、逻辑增强等方面具有独特优势。

简单了解装饰器的其中一个作用:
动态功能扩展:为函数添加额外行为
装饰器的核心能力是在不改变原函数内部代码的情况下,为其包裹新的功能逻辑
例如实现函数调用日志记录:

def log_decorator(func):def wrapper(*args,**kwargs):print(f"[LOG] 开始执行 {func.__name__},参数:{args}")result = func(*args,**kwargs)  # 调用原函数print(f"[LOG] {func.__name__} 执行完成,结果:{result}")return resultreturn wrapper@log_decorator  # 等价于 add = log_decorator(add) 将原函数add作为参数传递给log_decorator函数
def add(a, b):  # add变量被重新绑定为log_decorator(add)的返回值(即内部函数wrapper)return a + badd(3, 5)
# 输出:
# [LOG] 开始执行 add,参数:(3, 5)
# [LOG] add 执行完成,结果:8

装饰器的应用阶段(代码加载时)当Python解释器加载@log_decorator语法时,会立即执行装饰器函数log_decorator:
函数调用阶段(运行时)当执行add(3, 5)时,实际调用的是被装饰后的wrapper函数
执行顺序

调用 add(3,5)
│
├─> 进入 wrapper(3,5)
│   ├─> 执行 [LOG] 开始执行 add,参数:(3,5)
│   ├─> 调用 func(3,5) → 原始add函数
│   │   └─> 计算 3+5=8
│   └─> 执行 [LOG] add 执行完成,结果:8
│
└─> 返回最终结果8

1.3 python函数装饰器的实际应用:请求限流

控制API调用频率:防止服务被恶意高频调用

def rate_limit(max_calls, period):def decorator(func):calls = []def wrapper(*args):now = time.time()# 清除超时记录calls[:] = [t for t in calls if now - t < period]if len(calls) >= max_calls:raise Exception("请求过于频繁")calls.append(now)return func(*args)return wrapperreturn decorator@rate_limit(5, 60)  # 每分钟最多5次, rate_limit返回decorator, decorator接收api_request函数
def api_request():  # api_request = rate_limit(api_request)# 调用外部API

代码结构拆解,该代码通过装饰器工厂实现了一个滑动窗口请求限流器,其核心结构分为三层:

rate_limit(max_calls, period)#装饰器工厂,接收最大调用次数(max_calls)和时间周期(period秒),返回实际装饰器decorator
decorator(func)#接收被装饰函数(如api_request),通过闭包维护调用时间记录列表calls,返回包装函数wrapper
wrapper(*args)#实现限流逻辑,包含时间窗口清理、调用计数验证、异常抛出等核心功能


Python普通函数与闭包函数对比分析
普通函数
(1)独立定义,无嵌套结构
(2)每次调用均为独立上下文,无状态记忆能力

使用普通函数实现计数器
缺点:全局变量不安全,多实例无法并存

count = 0  # 全局变量易被篡改
def increment():global countcount += 1return count
print(increment())  # 1
print(increment())  # 2

闭包函数
(1)嵌套函数结构,内部函数捕获外部函数变量
(2)通过闭包环境实现状态持久化

使用闭包函数实现计数器

def create_counter():count = 0def counter():nonlocal countcount += 1return countreturn counter  # 每个实例独立计数
counter1 = create_counter()
counter2 = create_counter()
print(counter1())  # 1(实例1独立计数)
print(counter2())  # 1(实例2独立计数)
http://www.dtcms.com/a/495839.html

相关文章:

  • 网站建设与管理就业岗位垫江做网站
  • freeswitch的proxy_media模式下video流的问题与修正
  • 大模型后训练(Post-Training)指南
  • 外卖网站怎么做销量用php建设一个简单的网站
  • 医药企业网站建设浙江省城乡建设厅网站
  • 【超保姆级C++开发教程】从0制作1个带MFC界面的AI图像分类工具
  • 如何将 Android 联系人备份到 Mac 的 4 种简单
  • 免费建网站可信吗wordpress 投稿 插件
  • 基于单片机的车载防酒驾智能控制系统设计
  • 网站优化排名软件推广赣州人才网最新招聘
  • 江宁外贸网站建设浦江县做网站
  • 西安网站建设 盈科成都网站建设上市
  • 【VSCode】Visual Studio Code 2025安装包及安装教程 (附所有版本下载)
  • 益阳有专做网站的吗手机网站导航代码
  • IO------------流(文件读写 )
  • UE5 测量 - 11,面积测量:补充学习多边形的生成
  • 语音合成系统---IndexTTS2:环境配置与实战
  • 网站技术开发重庆观音桥介绍
  • mysql一条sql语句的执行过程
  • 专门做外国的网站有哪些国内软件公司排行榜
  • Git-git stash与分支管理
  • 企业管理软件系统网公司网站服务器优化
  • [嵌入式系统-136]:主流AIOT智能体软件技术栈
  • 半导体制造工艺基本认识 大纲
  • (三)TCP/IP
  • 机器学习(1) 监督学习和无监督学习
  • 问卷调查网站赚钱设计与网站建设案例
  • 杭州建设网站官网企业邮箱在哪里看
  • 如何选择做pc端网站备份wordpress数据库
  • CMake 编译中去掉警告/W3重写 cl: 命令行 warning D9025 :正在重写“/W3”(用“/w”)“