当前位置:首页>python>中篇Python(ODOO)篇 第一章 Python基础(六)基础部分 19.装饰器

中篇Python(ODOO)篇 第一章 Python基础(六)基础部分 19.装饰器

  • 2026-09-10 21:24:06
中篇Python(ODOO)篇 第一章 Python基础(六)基础部分 19.装饰器

什么是装饰器?

Python装饰器就是用来拓展原来函数功能的一种函数,目的是在不改变原函数名(或类名)的情况下,给函数增加新的功能。
这个函数的特殊之处在于它的返回值也是一个函数,这个函数内嵌原函数。
一般情况下,我们要拓展原来函数代码,最直接的方法就是在原来代码里面修改,比如:
def hello():  print(“hello world”)
这是我们最早一个函数,就是打印一个hello world。
然后我们如果想打印一个我是扶程星云hello world 的话,怎么办?
第一种:修改原来函数
def hello():  print(“hello world”)  print(“我是扶程星云”)
但是实际工作中,很多时候核心代码是大家公用的,不能你加点东西我加点东西。
第二种:
def hello():  print("hello world")def speak():  hello()s = speaks()
这种方法会导致很多新的函数名,调用的时候还要根据情况调用不同的函数。
有没有更好的方法呢?让我们继续,以下是一个简单的装饰器函数。
def speak(func):  def sayName():    print("我是扶程星云")    return func  return sayName()def sayHello():  print("hello world")  s = speak(sayHello)s() 
美中不足,每次给hello函数增加功能都要用到类似s=speak(sayHello)的调用方法。Python为了简化这种情况,提供了一个语法糖”@”。
语法糖(Syntactic sugar),也译为糖衣语法,是由英国计算机科学家彼得·约翰·兰达(Peter J. Landin)发明的一个术语,指计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用。通常来说使用语法糖能够增加程序的可读性,从而减少程序代码出错的机会。
代码如下:
def speak(func):  def sayName():    print("我是扶程星云")    return func  return sayName()@speakdef sayHello():  print("hello world")sayHello()
大家可以看到,在给sayHello()函数装上speak()函数后,sayHello函数首先执行speak函数里面的sayName,再执行原sayHello函数。就像孙悟空的眼睛,但是在太上老君的八卦炉里,给装上了火眼金睛功能,平时孙悟空看东西就是和普通猴子一样,看啥是啥,一旦启用火眼金睛功能,同样是看,还能看出妖精来。这就是装饰器的功能,如果读者还有不懂的地方,请在网络上查找更多资料。

最新文章

随机文章