python 装饰器

本文已参与「新人创作礼」活动,一起开启掘金创作之路

• 闭包:是由函数及其相关的引用环境组合而成的实体。

• 不同编程语言实现闭包的方式是不同的,Python中闭包从表现形式 上看,如果在一个内部函数里,对在外部作用域(不是在全局作用 域)的变量进行引用,那么内部函数就被认为是闭包。

• 闭包中不可以直接修改外部函数的局部变量。

– 类似于不能直接在函数中修改全局变量(可变类型除外),需要使用关键 字nonlocal。

• 闭包的作用:

– 当闭包执行完后,仍然能够保持住当前的运行环境

– 闭包可以根据外部作用域的局部变量来得到不同的结果

装饰器

• 装饰器本质上是一个Python函数,它可以在不改变代码结构的情况 下给代码添加新的功能。

• 装饰器的工作过程:将被装饰的函数当作参数传递给装饰器函数 (名称相同的函数),并返回装饰后被装饰的函数。

• 装饰器是闭包的一种应用。

• 装饰器的使用:

py @装饰器函数 def func(): pass

• 装饰器的作用:

```py def light(func): print("获得神光棒x1") def tiga(): func() print("叮~,\n我是光之巨 人") return tiga @light def person(): print("我是某胜利队队员大骨") person()

```

```py

def light(func): print("获得神光棒x1") def tiga(): func() print("叮~,\n我是光之巨 人") return tiga def person(): print("我是某胜利队队员大骨") light(person)() ``` • 装饰器不会改变原有函数代码,但是会丢失一部分信息:

– 被装饰函数的元信息会丢失,如:名字、文档字符串、注解和参数签名。

• 为了保留因为使用装饰器而丢失的信息,可以使用Python中本身提 供的装饰器@warps来解决。

在类中使用装饰器

```py

def singleton(cls, args, *kw): instance={} def singleton(): if cls not in instance: instance[cls]=cls(*args, **kw) return instance[cls] return _singleton @singleton class Singleton(object): def init(self): self.numsum=0 def add(self): self.num_sum=100 ```

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宋小童

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值