python学习九:SocektServer学习、bisect、list的sort详解、清空字典的两种方法、zip初探
2013-08-31 21:27
966 查看
1. SocketServer学习
SocketServer基于socket提供一套快速建立socket服务器的框架,并可以通过Mix-in的技巧让单线程服务器进化为多线程或多进程服务器。
Socketserver.py里面的类很多,下面一个一个介绍并介绍它们之间关系。
BaseServer、TCPServer、UDPServer,前者是后两者的父类。在父类中实现了TCP与UDP服务器可以共用的方法,并留下了需要在子类中实现的函数。因此在实际工作中,我们一般不应该继承BaseServer类,除非你是为了自己去实现或重载某些方法。另外,还有UnixStreamServer和UnixDatagramServer分别继承自TCPserver和UDPServer。这两个带Unix字样的类是用来构建*nix下本地socket的服务器(本地socket访问速度更快,但只能用在本机的进程间通信)
接下来是ForkingMixIn和ThreadingMixIn两个混合类,它们都提供Server类中process_request方法的新实现,前者在处理每次用户连接的时候都会开启新的进程,而后者会开启新的线程。想要让Server类实现并发处理,只用利用多重继承即可。或者直接使用已经混合好的
class ForkingUDPServer(ForkingMixIn, UDPServer): pass
class ForkingTCPServer(ForkingMixIn, TCPServer): pass
class ThreadingUDPServer(ThreadingMixIn, UDPServer): pass
class ThreadingTCPServer(ThreadingMixIn, TCPServer): pass
最后没有介绍的是BaseRequestHandler、StreamRequestHandler、DatagramRequestHandler,同Server一样,前者是后两者的父类用来提供公用的方法
通常在使用SocketServer的时候我们只用自己实例化一个合适的Server类,并在实例化时传递其监听的IP、端口,以及之前继承自某个RequestHandler的类(需要自行实现hanle方法,作为server的请求处理器)
2. bisect
This module provides support for maintaining a list in sorted order without having to sort the list after each insertion.
The module is called bisect because it uses a basic bisection algorithm to do its work.
bisect.bisect_left(a, x, lo=0, hi=len(a))
列表a默认升序排列,若a中含有一个或多个x元素,则返回最左边x元素的index,表征插入位置,lo和hi指定作用长度。
bisect.bisect_right(a, x, lo=0, hi=len(a))
bisect.bisect(a, x, lo=0, hi=len(a))
功能同bisect.bisect_left(),但返回最右边x元素的index+1,表征插入位置。
bisect.insort_left(a, x, lo=0, hi=len(a))
执行插入操作,相当于a.insert(bisect.bisect_left(a, x, lo, hi), x)
bisect.insort_right(a, x, lo=0, hi=len(a))
bisect.insort(a, x, lo=0, hi=len(a))
功能同bisect.insort_left
3. list的sort详解
s.sort([cmp[, key[, reverse]]])
4. 清空字典的两种方法
5. zip初探
SocketServer基于socket提供一套快速建立socket服务器的框架,并可以通过Mix-in的技巧让单线程服务器进化为多线程或多进程服务器。
Socketserver.py里面的类很多,下面一个一个介绍并介绍它们之间关系。
BaseServer、TCPServer、UDPServer,前者是后两者的父类。在父类中实现了TCP与UDP服务器可以共用的方法,并留下了需要在子类中实现的函数。因此在实际工作中,我们一般不应该继承BaseServer类,除非你是为了自己去实现或重载某些方法。另外,还有UnixStreamServer和UnixDatagramServer分别继承自TCPserver和UDPServer。这两个带Unix字样的类是用来构建*nix下本地socket的服务器(本地socket访问速度更快,但只能用在本机的进程间通信)
接下来是ForkingMixIn和ThreadingMixIn两个混合类,它们都提供Server类中process_request方法的新实现,前者在处理每次用户连接的时候都会开启新的进程,而后者会开启新的线程。想要让Server类实现并发处理,只用利用多重继承即可。或者直接使用已经混合好的
class ForkingUDPServer(ForkingMixIn, UDPServer): pass
class ForkingTCPServer(ForkingMixIn, TCPServer): pass
class ThreadingUDPServer(ThreadingMixIn, UDPServer): pass
class ThreadingTCPServer(ThreadingMixIn, TCPServer): pass
最后没有介绍的是BaseRequestHandler、StreamRequestHandler、DatagramRequestHandler,同Server一样,前者是后两者的父类用来提供公用的方法
通常在使用SocketServer的时候我们只用自己实例化一个合适的Server类,并在实例化时传递其监听的IP、端口,以及之前继承自某个RequestHandler的类(需要自行实现hanle方法,作为server的请求处理器)
2. bisect
This module provides support for maintaining a list in sorted order without having to sort the list after each insertion.
The module is called bisect because it uses a basic bisection algorithm to do its work.
bisect.bisect_left(a, x, lo=0, hi=len(a))
列表a默认升序排列,若a中含有一个或多个x元素,则返回最左边x元素的index,表征插入位置,lo和hi指定作用长度。
bisect.bisect_right(a, x, lo=0, hi=len(a))
bisect.bisect(a, x, lo=0, hi=len(a))
功能同bisect.bisect_left(),但返回最右边x元素的index+1,表征插入位置。
bisect.insort_left(a, x, lo=0, hi=len(a))
执行插入操作,相当于a.insert(bisect.bisect_left(a, x, lo, hi), x)
bisect.insort_right(a, x, lo=0, hi=len(a))
bisect.insort(a, x, lo=0, hi=len(a))
功能同bisect.insort_left
3. list的sort详解
s.sort([cmp[, key[, reverse]]])
# list.sort() a = [('apple', '4s', 4488), ('apple', '4', 3088), ('samsung', 's4', 5200), ('nokia', '1020', 5999)] a.sort() print a a.sort(key=lambda x: x[2]) print a # cmp=lambda x,y: cmp(x.lower(), y.lower()
4. 清空字典的两种方法
# clear dict d = {'name': 1, 'age': 2} d2 = d d = {} print "d2:", d2 d3 = d2 d2.clear() print "d3:", d3
5. zip初探
# zip() x = [1,2,3] y = [4,5,6] zipped = zip(x, y) print zipped matrix = [[1,2,3], [4,5,6], [7,8,9]] zipped = zip(*matrix) print zipped roll_matrix = map(list, zipped) print roll_matrix
相关文章推荐
- Python学习笔记(七)—— List.sort 与二进制搜索bisect
- python学习五:执行linux命令的两种方法、提高运行效率、进制转换、切片详解、ip和mac获取
- python清空字典的两种方法比较
- Collections.sort对List排序的两种方法
- python中的sort方法使用详解
- Python 列表排序方法reverse、sort、sorted详解
- Collections.sort方法对list排序的两种方式
- Python语言学习讲解三:详解Python中的split()函数的使用方法
- python中List的sort方法(或者sorted内建函数)的用法
- [Python3]创建多维list并赋值的两种方法
- Python语言学习讲解五:列表(List)操作方法详解
- 判断python字典中key是否存在的两种方法
- 用Java集合中的Collections.sort方法对list排序的两种方法
- Python学习笔记--表list, 元组tuple, 字典dict
- python学习笔记(二)列表(List)操作方法详解
- c#范型List的Sort方法详解
- python中List的sort方法(或者sorted内建函数)的用法
- Python3学习笔记之列表方法示例详解
- 详解使用python的logging模块在stdout输出的两种方法
- python中List的sort方法(或者sorted内建函数)的用法