我对python的理解_python之我对装饰器的理解

从一开始学习python的时候,就一直不是很理解装饰器是个什么东东,再看了很多篇博文和自己动手敲了好多代码后,算是略有了解。

我理解的装饰器是: 在不改变原有函数调用的情况下,对其进行包装,使其变成另外一种函数来使用,一般的用途是 插入日志、性能测试、事务处理等。def host_restrict(tags=[], names=[]):

def decorator(f):

@functools.wraps(f)

def decorated(*args, **kwargs):

host_info = hosts.get(env.host)

if not host_info:

return f(*args, **kwargs)

if tags and host_info[0] not in tags:

raise StandardError('Tag %s not in %s' % (host_info[0], tags))

if names and not set(names).intersection(

set([s for s in host_info[1].split(' ') if s.strip()])):

raise StandardError(

'Name %s not in %s' % (host_info[1], names))

return f(*args, **kwargs)

return decorated

return decorator

公司的这个装饰器是用来约束 用户输入的信息的。

特此记录装饰器的用法,把装饰器分为 有参数的装饰器、无参数的装饰器和functions模块。

1 无参数的装饰器def foo1(func):

def decorator():

print '一些列相关操作'

return func()

return decorator

2 有参数的装饰器

2.1 原函数带参数def foo1(func):

def decorator(*args,**kwargs):

print '一些列相关操作'

return func(*args,**kwargs)

return decorator

2.2 装饰器带参数# arg为装饰器的参数

def foo3(arg):

def decorator(func):

def decoratod(*args,**kwargs):

print '可以对arg进行判断,计算等相关操作'

return func(*args,**kwargs)

return decoratod

return decorator

3 functions 模块

这个装饰器能将装饰过的函数的特殊属性保留。一般在使用反射的使用会很有用。# arg为装饰器的参数

def foo4(arg):

def decorator(func):

@functools.wraps(func)

def decoratod(*args,**kwargs):

print '可以对 arg 进行一些判断等相关操作'

return func(*args,**kwargs)

return decoratod

return decorator

下面是参考资料,当初有不少地方没看明白,真正练习后才明白些:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python装饰器是一种特殊的Python函数,它可以在不修改被装饰函数源代码的情况下,为被装饰函数添加额外的功能。装饰器本质上是一个闭包,它接收一个函数作为参数,并返回一个新的函数对象。这个新的函数对象包装了原始函数,并在其前后执行额外的代码。通过使用装饰器,我们可以在不改变原函数结构的情况下,扩展函数的功能,比如添加日志记录、性能计时、权限验证等功能。 装饰器的返回值也是一个函数对象,所以它可以像普通函数一样被调用。装饰器可以用来装饰函数、方法或者类,使其拥有额外的功能。装饰器的语法是在被装饰函数定义的上方加上@符号,后面紧跟装饰器函数的名称。 装饰器可以分为函数装饰器和类装饰器两种类型。函数装饰器是最常见的一种形式,它是一个函数,接收一个函数作为参数,并返回一个新的函数对象。类装饰器是指以类的形式实现的装饰器,它必须实现`__call__`方法,并接收一个函数作为参数。 装饰器可以带有参数,这时候需要编写一个返回装饰器的高阶函数。高阶函数接收装饰器参数,并返回一个装饰器函数,装饰器函数再接收被装饰的函数,并返回一个新的函数对象。通过这种方式,我们可以传递不同的参数给装饰器,实现不同的功能。 在使用装饰器时,为了保留原函数的元信息,如函数名、文档字符串等,可以使用`functools.wraps`修饰内部新函数,将新函数的属性设置为原始函数的属性,以便更好地还原被装饰函数的原始属性。 总结一下,Python装饰器是一种为函数或类添加额外功能的机制,它可以在不修改原函数源代码的情况下,通过闭包的方式实现功能的扩展。装饰器可以带有参数,并且可以用来装饰函数、方法或类。通过使用装饰器,我们可以更加灵活地扩展和改变函数的行为。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值