摘要: 协程的实现为协作式而非抢占式的,这是和进程线程的最大区别。在Python中,利用yield和send可以很容易实现协程。 首先复习下生成器。 如果一个函数使用了yield语句,那么它就是一个生成器函数。当调用这个函数时,它返回一个迭代器。当第一次调用__next__()时候,生成器函数主体开始执行, 阅读全文
posted @ 2017-01-11 22:55 wilderness 阅读(1117) 评论(0) 推荐(0) 编辑
摘要: 0/1背包问题:在能承受一定重量的背包中,放入重量不同,价值不同的几件物品,怎样放能让背包中物品的价值最大? 比如,有三件物品重量w,价值v分别是 w=[5,3,2] v=[9,7,8] 包的容量是5,也就是我们要求得 maxVal=v1+v2+v3…… 约束条件为:ws=w1+w2+w3…… 我们 阅读全文
posted @ 2017-01-02 19:29 wilderness 阅读(4785) 评论(1) 推荐(1) 编辑
摘要: 初始化超类的传统方式,在子类的实例中调用超类的__init__()方法。 但是传统的方法有两个问题,比如: 问题1: 结果为: 从结果可以看出,即使改变了子类的继承顺序,调用的顺序并没有改变。 问题2: 如果子类继承自两个单独的超类,而那两个超类又继承自同一个公共基类,那么就构成了钻石型继承。 这种 阅读全文
posted @ 2016-12-31 23:15 wilderness 阅读(3105) 评论(0) 推荐(0) 编辑
摘要: 使用生成器的好处是显而易见的,可以使代码更加清晰,同时减小内存的消耗,当函数需要返回列表,把函数改写为生成器是相对容易的。 下面这两个函数返回字符串中每个单词的索引: 参考资料:Effective Python 阅读全文
posted @ 2016-12-31 22:26 wilderness 阅读(241) 评论(0) 推荐(0) 编辑
摘要: 如果要达到多个迭代器的效果,__iter__()只需替迭代器定义新的状态对象,而不是返回self 参考资料:Python学习手册 阅读全文
posted @ 2016-12-31 22:05 wilderness 阅读(643) 评论(0) 推荐(0) 编辑
摘要: 对迭代器和生成器的概念一直很混乱,总结一下: 迭代器: 1.所谓的迭代器,就是具有__next__()方法的对象; 2.__iter__()方法返回一个迭代器对象,这个对象必须具有__next__()方法; 3.一个实现了__iter__()方法的对象是可迭代的,一个实现了__next__()方法的 阅读全文
posted @ 2016-12-31 21:48 wilderness 阅读(187) 评论(0) 推荐(0) 编辑
摘要: 第一次见到functools.wraps是在 Flask Web开发 中,一直不明白怎么回事。 装饰器(decorator)是干嘛的?对于受到封装的原函数来说,装饰器能够在那个函数执行前或者执行后分别运行一些代码,使得可以再装饰器里面访问并修改原函数的参数以及返回值,以实现约束定义、调试程序、注册函 阅读全文
posted @ 2016-12-31 18:16 wilderness 阅读(14556) 评论(1) 推荐(0) 编辑
摘要: 首先判断一个字符串是否回文: 阅读全文
posted @ 2016-12-27 12:32 wilderness 阅读(617) 评论(0) 推荐(0) 编辑
摘要: Implement strStr(). Returns the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack. 题意:返回在字符串中子字符串出现的第一个位置,没 阅读全文
posted @ 2016-12-24 13:39 wilderness 阅读(134) 评论(0) 推荐(0) 编辑
摘要: Given an array and a value, remove all instances of that value in place and return the new length. Do not allocate extra space for another array, you 阅读全文
posted @ 2016-12-24 13:24 wilderness 阅读(156) 评论(0) 推荐(0) 编辑