美文网首页
Python装饰器

Python装饰器

作者: FangHao | 来源:发表于2017-02-08 23:51 被阅读0次

装饰器

Python代码要符合一个开放封闭的原则,所谓开放封闭就是指的,对于之前的带么功能需要进行封闭,即不能随便的修改,但是可以进行添加新功能,这就是开放,所以有了装饰器这个东西
几个示例代码如下:

#coding=utf-8

def make(name='laowang'):
def make_fun(func):
def make_fun_in(*args,**kwargs):
print('hello world %s!'%name)
func(*args,**kwargs)
#直接打印出参数,但是并不是解包,所以会返回元组或者字典
#print(args,kwargs)
#同那个*或者**进行解包
#print(*args,**kwargs)
return make_fun_in
return make_fun

@make('xiaohua')
def test(a,b,c):
print('hello test%s,%s,%s'%(a,b,c))

test('shandong','zibo','zhangdian')


"""
可以通过上述方法进行调用,也可以通过下面方法
在这里make方法将test函数作为参数传入,整个make('xiaohua')(test)会将
make_fun_in返回过来,make_fun_in中需要的参数,也就是往test(a,b,c)的参数
"""
# def test(a,b,c):
# print('hello test%s,%s,%s'%(a,b,c))
# make('xiaohua')(test)('shandong','zibo','zhangdian')
#coding=utf-8

def make1(func):
def make_in():
return '<h1>'+func()+'</h1>'
return make_in

def make2(func):
def make_in():
return '<h2>'+func()+'</h2>'
return make_in


# 会按照就近原则,先使用靠近test函数的装饰器进行装饰(make2),
# 再使用make1进行装饰
@make1
@make2
def test():
return 'hello world'

print(test())
#coding=utf-8

class make_fun(object):
def __init__(self,func):
self.func = func

def __call__(self):
#print(self.func())
return self.func()

@make_fun
def test():
return 'hello world'

# test()
reuslt = test()
# reuslt = test.__call__()
print(reuslt)

"""
test = make_fun(test)
此时等号左边test是一个对象,其中make_fun类对__call__方法做了重写,当执行test()
的时候会调用它的__call__方法,当然也可以通过test.__call__()进行方法调用
"""
#coding=utf-8
def make(username):
def make_fun(func):
def make_fun_in(*args,**kwargs):
print(username)
print('hello make_fun')
for key,value in kwargs.items():
'''
python3运行下面print代码会展示 name = python
但是python2运行的话会展示('name','=','python')
将会是一个元组

'''
print(key,'=',value)
print(key,value)
print(key)
return func(*args,**kwargs)
return make_fun_in
return make_fun

# 为了展示装饰器的原理,故将下面给注释
# @make('Laowang')
# def test(a,b,c,name = 123):
# return '%s,%s,%s,'%(a,b,c)
# result = test(1,2,3,name = 'python')
# print(result)

def test(a,b,c,name = 123):
return '%s,%s,%s,'%(a,b,c)
result = make('Laowang')(test)(1,2,3,name = 'python')
print(result)

相关文章

  • 装饰器模式

    介绍 在python装饰器学习 这篇文章中,介绍了python 中的装饰器,python内置了对装饰器的支持。面向...

  • python中的装饰器

    python装饰器详解 Python装饰器学习(九步入门) 装饰器(decorator) 就是一个包装机(wrap...

  • [译] Python装饰器Part II:装饰器参数

    这是Python装饰器讲解的第二部分,上一篇:Python装饰器Part I:装饰器简介 回顾:不带参数的装饰器 ...

  • Python中的装饰器

    Python中的装饰器 不带参数的装饰器 带参数的装饰器 类装饰器 functools.wraps 使用装饰器极大...

  • Python进阶——面向对象

    1. Python中的@property   @property是python自带的装饰器,装饰器(decorat...

  • Python 装饰器填坑指南 | 最常见的报错信息、原因和解决方

    Python 装饰器简介装饰器(Decorator)是 Python 非常实用的一个语法糖功能。装饰器本质是一种返...

  • Python装饰器

    Python装饰器 一、函数装饰器 1.无参装饰器 示例:日志记录装饰器 2.带参装饰器 示例: 二、类装饰器 示例:

  • python3基础---详解装饰器

    1、装饰器原理 2、装饰器语法 3、装饰器执行的时间 装饰器在Python解释器执行的时候,就会进行自动装饰,并不...

  • 2019-05-26python装饰器到底是什么?

    装饰器例子 参考语法 装饰器是什么?个人理解,装饰器,是python中一种写法的定义。他仍然符合python的基本...

  • 2018-07-18

    Python装饰器 装饰,顾名思义,是用来打扮什么东西的。Python装饰...

网友评论

      本文标题:Python装饰器

      本文链接:https://www.haomeiwen.com/subject/iuabittx.html