python装饰器的理解
首先从定义和功能说吧
装饰器是不改变原有功能的情况下添加新的功能,感觉就是避孕套吧!粗熟理解,不喜勿喷,
而且还不改变原有代码的情况下哦
再从根本来说吧
得搬出我们得廖雪峰大大了,不知道得请百度 ,代码如下
def log(func):
def wrapper(*args, **kwargs):
print('call %s():'% func.__name__)
return func(*args, **kwargs)
return wrapper
@log
def now():
print('2015-3-25')
本质就是一行代码,我每次搞不清思路时,都是用这么一行代码来思考的
now = log(now)
这就是本质,如果里面还有嵌套函数,无非就是多加个括号
不懂好好回头看看廖大的博客把
丢出链接吧
python中装饰器的六种形态,有点变形金刚的感觉,有点自嗨
https://www.jianshu.com/p/a405814f8786
这个简书讲得很好,我就不误人耳闻了
最后说下我项目中遇到的问题
_instance = {}
def _singleton(*args, **kargs):
if cls not in _instance:
_instance[cls] = cls(*args, **kargs)
return _instance[cls]
return _singleton
class A(object):
a = 1
def __init__(self, x=0):
self.x = x
c = Singleton(cls=A)
z = c(1)
y = c(2)
print(id(z))
print(id(y))
总结下问题也算是一种积累和成长把,在我的第一份工作和任务中,
解决一个线程冗余问题,开始本地跑不了,连debug都不行,着实让我难受了好一阵子,
好不容易本地能跑了,还是继续蒙蔽,多线程,debug还是没卵用,上面是原理把,
后来自己一直各种蒙,各种改,多线程和多进程看了,发现压根就没问题,看了感觉
一个文件用了递归,感觉问题可能就在这里,递归调用出现的线程问题就在这,然后也是瞎改,随便抄着改了一下,就好了,那真的叫开心啊,然后看了下python的单例模式,发现我还是太浅薄了,只知道自己最简单的单例模式,后来看到装饰器,也行,但这个原理记得不是很清楚,毕竟要改写嘛,琢磨了单例装饰器的原理,然后就写了这篇博客。
最后附上恩人链接,第一次用markdown写博客,不是很会玩,我的表演完毕,谢谢大家
https://www.cnblogs.com/huchong/p/8244279.html