Python装饰器@的用法(类与函数)

最近在学习一个开源工程文件,作者在许多定义的类之前使用了@符号。所以比较好奇它的功能,了解之后,举例记录一下。

@语法对应的是装饰器(decorator),是 Python 中一个非常强大的功能,它允许你在不修改函数或类代码的前提下,给它们添加额外的功能。

比如下面的代码,在不改变Tokyo的类代码情况下,为类增加了一个“打招呼”功能。

def add_greeting(cls):
    cls.greet = lambda self: print("Hello from",cls.__name__)
    return cls

@add_greeting
class Tokyo():
    pass

obj = Tokyo()
obj.greet()

运行上面的程序,输出的结果如下:

Hello from Tokyo

关于这个代码,由于本人基础一般,所以做几点解释:

1.lambda是用来创建匿名函数的一种方式。

lambda 参数列表: 表达式
  • 参数列表:是传递给函数的参数,类似于普通函数的参数。
  • 表达式:是函数体,lambda 表达式只能包含一个表达式,计算结果就是返回值。

2.self是访问实例(对象)的属性和方法,在类的方法中是必须的参数,指向当前的实例对象。

3.cls 通常可以访问类的属性和方法,这是python命名的习惯。

装饰器的一个应用就是:在可扩展的深度学习框架中,写好一个注册函数,然后每定义一个损失函数或检测头等类,就可以调用注册函数进行注册。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值