Python编写Phidget Relay控制
首先Manager是models 模块里面的一个类
管理器是Django 的模型进行数据库查询操作的接口
Django 应用的每个模型都拥有至少一个管理器,默认为objects
在Django Book提到的Manager有以下两个用处:
以最近的看的案子中代码为例:1
2
3
4
5
6
7
8
9
10
11
12
13class TestManager(models.Manager):
class Meta:
abstract = True
def is_existing(self, username):
try:
return self.get(username= username)
except:
return None
class UserInfo(models.Model):
email = models.EmailField(blank=False, null=False, unique=True)
objects = TestManager()
Python中有很多函数式编程的方法,本文介绍的是最常见的几个函数
注:本文基于python2.7.不同的版本可能会导致差异
标准格式zip(seq[, seq[, seq]])
举个栗子:1
2
3
4a = (i for i in range(3))
b = [4, 5, 6]
c = (7, 8, 9)
abc = zip(a, b, c)
abc的结果为[(0, 4, 7), (1, 5, 8), (2, 6, 9)]
所以zip函数的作用已经很明显了,它就好比abc三家集资,一家出一个.
那当c家很富,a家没那么富怎么办呢?1
2
3
4a = (i for i in range(2))
b = [4, 5, 6]
c = (7, 8, 9, 10)
abc = zip(a,b,c)
abc三家集资的结果为[(0, 4, 7), (1, 5, 8)]
,说好的一家出一个,你家没有了,那我也就不出了(你看,代码也这么现实…)
之所以举的栗子不全是list,就是想说明一个小的注意点,zip接受的都是具有迭代的属性的参数(__iter__
),这个后面会讲
前前后后在苏州出差好多次了,即使不爱拍照的我也留了不少图片。人生的一个阶段吧!
EIK的这个动作我是理解成在警告我,一定要把他放到封面啊!!!
例如下面这段代码:1
2
3
4
5def node._get_child_candidates(self, distance, min_dist, max_dist):
if self._leftchild and distance - max_dist < self._median:
yield self._leftchild
if self._rightchild and distance + max_dist >= self._median:
yield self._rightchild
下面是调用它:1
2
3
4
5
6
7
8result, candidates = list(), [self]
while candidates:
node = candidates.pop()
distance = node._get_dist(obj)
if distance <= max_dist and distance >= min_dist:
result.extend(node._values)
candidates.extend(node._get_child_candidates(distance, min_dist, max_dist))
return result
虽然这里不会有太多人来看,文章大多数也是自己的个人看法,鉴于自己的阅历和技术水平,难免会有纰漏。
但是每一篇原创文章自己都有花心思在上面,所以我会在每篇原创的文章最后添加<<<<<原创 装载请注明出处>>>>>
的信息(虽然到现在也没发现被别人转载过什么T_T)
鉴于每次POST文章都要手动添加那一行,这个操作感觉有点反人类,所以决定添加自动在文章底部添加版权信息的功能。
这里要感谢培豪的文章 - Hexo - 文章版权追加,里面为我提供了漂亮的css模板和处理的方法。
但是可能是因为使用的主题有差(我用的是Jacman-master主题),所以还要做部分的修改。
前面有学习了SocketServer模块,之前说过SocketServer
算是最基本的python服务器框架,那本文讲的BaseHTTPServer
模块就是基于SocketServer
,而SimpleHTTPServer
模块则是基于BaseHTTPServer
模块,所以他们的继承关系就很明了了.本文还是会以一个小栗子开始,结合类继承图和程式执行过程图来学习原码.
注:本文基于python2.7,不同的版本可能会导致差异.
图中用不同颜色来划分不同类的方法,有方法重写的部分则是将该方法归于重写方法的类.
之前看python网络编程那一块的时候,有学习SocketServer的代码,上网有查过这个lib的用法,但是发觉不看source code的话很难真正厘清内部的运作.所以这篇博文主要从一个简单的例子从原码的角度做分析整个SocketServer类的解析.
注:本文基于python2.7,SocketServer的版本为0.4.不同的版本可能会导致差异
我们首先先要厘清一下SocketServer里面基本的类的关系,我将大体的继承关系用下图表示:
可以看到,SocketServer主要包含4个基本类:BaseServer
(socket server建立的基类,主要的方法:serve_forever),BaseRequestHandler
(request的处理类,主要的方法:handle方法的重写),还有两个使用分叉和线程来处理异步通信的类:ForkingMixIn
和ThreadingMixIn
其他的类都是在以上四个基类的基础上延伸出来的.我们用到的最多的是针对TCP流式套接字的类:TCPServer
.后面的简单例子也是基于此
另外看source code的时候有一个关于多个类同时继承的地方需要多注意,也就是关于新式类和经典类的继承区别.详情请参考Python新式类和经典类的继承区别