python學習九:SocektServer學習、bisect、list的sort詳解、清空字典的兩種方法、zip初探

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]]])
# 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


發佈了30 篇原創文章 · 獲贊 1 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章