网创优客建站品牌官网
为成都网站建设公司企业提供高品质网站建设
热线:028-86922220
成都专业网站建设公司

定制建站费用3500元

符合中小企业对网站设计、功能常规化式的企业展示型网站建设

成都品牌网站建设

品牌网站建设费用6000元

本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...

成都商城网站建设

商城网站建设费用8000元

商城网站建设因基本功能的需求不同费用上面也有很大的差别...

成都微信网站建设

手机微信网站建站3000元

手机微信网站开发、微信官网、微信商城网站...

建站知识

当前位置:首页 > 建站知识

Python装饰器是什么东西

本篇内容介绍了“Python装饰器是什么东西”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

创新互联成立于2013年,先为石城等服务建站,石城等地企业,进行企业商务咨询服务。为石城企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。

今天说说带参数的装饰器,为了简化业务逻辑,只实现字符串大写转换的需求,重点来关注装饰器部分:

# 业务函数
def my_upper(text):
   value = text.upper()
   return value

print(my_upper("hello"))  # HELLO

现在需求有变更,核心业务不变,但是需要对转换的的字符包裹一层HTM标签,输出如:

HELLO

,最简单的办法就是直接在函数里面修改逻辑,如:

def my_upper(text):
   value = text.upper()
   return "

" + value + "

"

又接到产品通知,需求有变更,还要在外面套一个div,于是你很不情愿地回去再修改:

def my_upper(text):
   value = text.upper()
   return "

" + value + "

"

如何应对产品这种无止境的修改呢?

不过,技术最终还是要为业务服务,那我们就想一个可以灵活应对产品的办法吧,这里,装饰器就是一个很好的方案。最终效果应该是这样:

@tag("p")
def my_upper(text):
   value = text.upper()
   return value

print(my_upper("hello")) #

HELLO

如何实现呢?先从简单装饰器开始,实现一个不带参数的装饰器

def tag(func):
   def wrapper(text):
       value = func(text)
       return "

" + value + "

"

   return wrapper

@tag
def my_upper(text):
   value = text.upper()
   return value

调用

print(my_upper("hello")) # 

hello



@tag 语法糖等价于  my_upper = tag(my_upper)

my_upper("hello") 等价于 wrapper("hello") 尽管你不能直接访问wrapper,但可以这样去理解

使用装饰器,业务代码一行的都没改,只需要在函数定义处加上装饰器,就实现了相同的功能,那么如何更灵活地通过参数来指定输出的样式呢?使用带参数的装饰器

带参数的装饰器

带参数的装饰器只需要在原来那个不带参数的装饰器基础上之上在最外层套一个函数,该函数中定义一个参数,然后嵌套函数中引用该参数即可实现。从下图看出,我只是把里面那个函数改了一下名字,其余和原来不带参数的装饰器是一样的。有没有觉得这样更灵活?

Python装饰器是什么东西

当然,装饰器不仅可以修饰函数,还可以修饰类。

“Python装饰器是什么东西”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注创新互联网站,小编将为大家输出更多高质量的实用文章!


本文标题:Python装饰器是什么东西
文章起源:http://bjjierui.cn/article/pjoppd.html

其他资讯