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

企业网站形象建设什么是百度竞价

企业网站形象建设,什么是百度竞价,页面设计结课总结,网站建设教程讲解装饰器(Decorator) 是 Python一种强大的语法特性,允许在不修改原函数或类代码的前提下,动态地扩展其功能。和其名字一样,装饰器的核心思想就是"包装",即通过将函数或类作为参数传递给另一个函数&…

装饰器(Decorator) 是 Python一种强大的语法特性,允许在不修改原函数或类代码的前提下,动态地扩展其功能。和其名字一样,装饰器的核心思想就是"包装",即通过将函数或类作为参数传递给另一个函数(装饰器),返回一个增强后的新函数或类。

核心概念

  1. 函数是一等对象
    Python 中函数可以像变量一样传递、赋值或作为返回值,这是装饰器的基础。

  2. 闭包(Closure)
    内部函数可以访问外部函数的变量,即使外部函数已执行完毕。

  3. 语法糖 @
    @decorator 等价于 func = decorator(func),简化装饰器的应用。

示例

def my_decorator(func):def wrapper():print("函数执行前...")func()print("函数执行后...")return wrapper@my_decorator
def say_hello():print("Hello!")say_hello()
输出:

原理

装饰器的本质是函数嵌套,@my_decorator 等价于:

say_hello = my_decorator(say_hello)

如何处理带参数的函数

函数可以使用 *args 和 **kwargs 接受任意参数:

def my_decorator(func):def wrapper(*args, **kwargs):print(f"参数: args={args}, kwargs={kwargs}")return func(*args, **kwargs)return wrapper@my_decorator
def add(a, b):return a + bprint(add(3, b=4))
输出:

如何保留原函数元信息

如果不使用functools.wraps,被装饰的函数的名称、文档字符串等会被替换,可能导致调试困难。因此,应该使用functools.wraps来保留原函数的元数据。

from functools import wraps
import timedef my_decorator(func):@wraps(func)  # 使用@wraps保留原函数信息def wrapper(*args, **kwargs):import timestart = time.time()result = func(*args, **kwargs)end = time.time()print(f"{func.__name__} 执行耗时: {end - start:.2f}秒")return resultreturn wrapper@my_decorator
def my_func():"""模拟耗时操作"""time.sleep(1)my_func()
print(my_func.__name__)

输出:
编辑
 
如果不使用@wraps,则会输出 wrapper


带参数的装饰器

装饰器本身是可以接受参数的,但需要多一层嵌套:

from functools import wrapsdef repeat(n):"""重复执行函数 n 次"""def decorator(func):@wraps(func)def wrapper(*args, **kwargs):for _ in range(n):result = func(*args, **kwargs)return resultreturn wrapperreturn decorator@repeat(5)
def greet(name):print(f"Hello, {name}!")greet("Tom")
输出:

类装饰器

类也可以作为装饰器,需实现 __call__ 方法:

class Test:def __init__(self, func):self.func = funcself.calls = 0def __call__(self, *args, **kwargs):self.calls += 1print(f"函数 {self.func.__name__} 被调用了第 {self.calls} 次")return self.func(*args, **kwargs)@Test
def say_hi():print("Hi!")say_hi() 
say_hi()

输出:

装饰器的应用场景

  1. 日志记录
    记录函数调用参数、返回值或异常。

  2. 性能计时
    统计函数执行时间。

  3. 权限校验
    在 Web 框架中检查用户权限(如 Flask/JWT)。

  4. 缓存结果
    缓存函数结果避免重复计算(如 @lru_cache)。

  5. 路由注册
    Web 框架中用装饰器定义路由(如 Flask 的 @app.route)。

注意事项

  1. 装饰器顺序
    如果使用一个装饰器装饰另一个装饰器,是按从下到上的顺序执行:

    @decorator1
    @decorator2
    def func():pass

    等价于 func = decorator1(decorator2(func))

  2. 不要影响原函数行为
    确保装饰器不要影响原函数的行为,如参数、返回值等。

  3. 正确使用wraps保留元信息
    在使用装饰器时,要正确使用 functools.wraps 保留元信息,方便调试。

码字不易,原创更不易,如您觉得本文对您有帮助,麻烦动动您富贵的小手,点赞、收藏、关注、订阅!!!

http://www.cadmedia.cn/news/16071.html

相关文章:

  • 尚海整装为啥口碑那么差盐城网站优化
  • 武汉珞珈网站建设武汉网站推广
  • 北京时代 网站建设群推广
  • 江苏省华建建设股份有限公司网站微信引流推广
  • 怎么用ps做网站前台美工今日重大新闻
  • 企业建立自己网站主要方式网络营销的四大要素
  • 西安建设局网站软件开发培训机构去哪个学校
  • 做网站建设的名声很差吗百度明星搜索量排行榜
  • 廊坊网站建设外包域名推荐
  • 上海浦东医院网站建设正规专业短期培训学校
  • 网站速度诊断超级外链推广
  • b2c商务网站建设郑州网站建设制作公司
  • 雄安免费网站建设南京百度网站快速优化
  • 网站首页建设网站近两年成功的网络营销案例
  • 万商云集(成都)科技股份有限公司万词霸屏百度推广seo
  • wordpress下载站主题重庆人力资源和社会保障网官网
  • 商务网站开发与建设找索引擎seo
  • 网站建设 是否计入固定资产东莞精准网络营销推广
  • 论坛网站在线生成互联网营销师有什么用
  • 企业微网站网上销售培训课程
  • 营销类型网站怎么建设百度品牌广告是什么
  • 娄底企业网站建设公司推广seo是什么意思
  • 网页设计类网站seo关键词优化的技巧和方法
  • 无锡市政府网站建设评估seo是一种利用搜索引擎的
  • 深圳做网站报价百度搜索风云榜手机版
  • 公司注册域名需要哪些条件百度推广seo自学
  • eclipse开发微网站开发保定百度首页优化
  • 政府移动门户网站建设江北关键词优化排名seo
  • 靠谱网站建设公司价格seo关键词排名
  • 郑州好的企业网站建设计算机培训班培训费用