Python装饰器

本文介绍了Python中利用函数属性和装饰器扩展函数功能的方法。通过函数的__name__属性了解函数标识,深入探讨了装饰器的定义、使用及其实现机制,展示了如何不修改原始函数代码的情况下增加额外功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、检视一个函数相同的另一种方法

利用属性:函数._name

def hello():
  print("我是一个测试程序")
f = hello
print(f.__name__)
print(hello.__name__)

从结果来看他们的本体都是hello函数

二、装饰器

1.定义:在不改动代码的基础上无限扩展函数功能的一种机制,本质上来讲,装饰器是一个返回函数的高阶函数。

2.装饰器的使用:使用@愈发,即在每次要扩展到函数定义前使用@+函数名。

import time
#对hello函数进行功能扩展,每次执行hello前打印时间
def printTime(f):
# 高阶函数,以函数作为参数
  def wrapper(*args,**kwargs):
    print("Time:",time.ctime())
    return f(*args,**kwargs)
  return wrapper
#上面定义了装饰器,使用的时候需要用到@符号,此符号是python语法
@printTime
def hello():
  print("Hello World")
hello()

3.装饰器的好处:

(1)装饰器的好处是,一旦定义,则可以装饰任意函数
(2)一旦被其装饰,则把装饰器的功能直接添加在定义函数的功能上

4.上面对函数的装饰使用了系统定义的语法糖,下面开始手动执行一下装饰器


.......复用了上面的代码........
def hello3():
  print("厉害")
hello3 = printTime(hello3)
#这是向printTime传参hello3,然后返回wrapper,也就是hello3 = wrapper
hello3()
#执行了hello3函数,也就是执行了wrapper函数,先打印了“厉害”然后返回了最开始的hello3,但是后面有括号就是执行了最开始的
#hello3(),打印了厉害

5.遗留问题:

aa = printTime(hello3)
aa()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值