python筆記(持續更新)

一、編譯python遇到下面的編碼問題:
    SyntaxError: Non-ASCII character '\xe9' in file E:\projects\learn.py on line 3, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details
    解決方法:解決方法:源代碼文件第一行添加:#coding:utf-8
三、is表示引用是不是指向同一個對象,==表示引用指向對象的內容是否相同。
四、globals函數能夠查看變量的引用狀況,getrefcount能夠得到一個對象被引用的次數。
五、struct.calcsize():用來計算特定格式的輸出的大小,是幾個字節
六、inspect模塊功能:

(1).對是不是模塊,框架,函數等進行類型檢查。html

(2).獲取源碼python

(3).獲取類或函數的參數的信息windows

(4).解析堆棧併發

七、python標準庫:http://python.usyiyi.cn/python_278/library/index.htmlapp

八、對於處理非ASCII字符的字符串,最好在輸入時轉換爲unicode編碼,在輸出的時候使用對應的編碼進行編碼後再輸出。
九、能夠將zip文件加入sys.path,而後能夠經過import導入zip文件中的.py文件模塊。讀取zip文件能夠用zipfile模塊。直接處理zip文件字符串,能夠直接用cStringIO中的StringIO模塊,而不用先將字符串存到一個臨時的zip文件中,再進行處理。StringIO能夠看作是一個放在內存中的文件對象,適合於文件的操做均可以用在StringIO模塊上。
十、能夠用tarfile模塊將一個目錄樹歸檔到一個壓縮的tar文件。
十一、判斷當前系統:sys.platform。
十二、fnmath能夠用來檢測文件名匹配模式,os.walk能夠用來遍歷目錄。
1三、xlwt、xlrd和xlutils.copy用來處理excel。
1四、當你以爲直接改變某列表而不是某列表時,列表推導經常是最好的方法。例如:假設須要將某列表L中的大於100的元素設置爲100,最好的方法以下:
L[ : ] = [min(x, 100) for x in L]
此時的L並無從新綁定一個新的列表,而是修改了原來列表的內容。
1五、把列表推導的[]改爲()就是生成器表達式了。生成器表達式最好的一點就是不用一次性將全部數據加載如內存種。
1六、遍歷列表並得到索引,最好用enumerate包裝下。
1七、建立二維列表應該用列表推導,而不是用*,*只會複製引用。
multilist = [[0 for col in range(5)] for row in range(3)]
multilist2 = [[0] * 5] * 3
雖然上面這個很簡潔,不過會出現共享引用問題,即multilist2[0] == multilist2[1]
1八、給字典添加一個條目,d.setdefault(word, []).append(pagenumber)。
1九、itertools模塊主要用來作產生器的,可使數據不用一次性加載進入內存。
20、random.choice隨機獲取列表中的元素。
2一、bisect二分查找。
2三、greenlet用協程實現併發: http://greenlet.readthedocs.org/en/latest/

2四、 循環import模塊會怎樣?框架

    python中循環導入不會怎麼樣,由於每一個模塊被import的時候只會執行一次,而且該模塊的引用會存放在sys.modules中,後面若是再import該模塊時,虛擬機會查看sys.modules是否存在該模塊,若是存在則不導入。看看下面一個例子就一目瞭然了:dom

    test.py:函數

1 import sys
2 print 'test module'
3 print 'before import test2', sys.modules.keys()
4 import test2
5 print 'after import test2', sys.modules.keys()
6 if __name__ == 'main':
7     import test

    test2.pyui

1 import sys
2 print 'test2 module'
3 print 'before import test', sys.modules.keys()
4 import test
5 print 'after import test', sys.modules.keys()

    運行結果:this

 1 test module
 2 before import test2 ['copy_reg', 'sre_compile', 'locale', '_sre', 'functools', 'encodings', 'site', '__builtin__', 'sysconfig', 'operator', '__main__', 'types', 'encodings.encodings', 'encodings.gbk', 'abc', '_weakrefset', 'encodings._codecs_cn', 'errno', 'encodings.codecs', 'sre_constants', 're', '_abcoll', 'ntpath', '_codecs', 'encodings._multibytecodec', 'nt', '_warnings', 'genericpath', 'stat', 'zipimport', 'encodings.__builtin__', 'warnings', 'UserDict', '_multibytecodec', 'sys', 'codecs', 'os.path', '_functools', '_codecs_cn', '_locale', 'signal', 'traceback', 'linecache', 'encodings.aliases', 'exceptions', 'sre_parse', 'os', '_weakref']
 3 test2 module
 4 before import test ['test2', 'copy_reg', 'sre_compile', 'locale', '_sre', 'functools', 'encodings', 'site', '__builtin__', 'sysconfig', 'operator', '__main__', 'types', 'encodings.encodings', 'encodings.gbk', 'abc', '_weakrefset', 'encodings._codecs_cn', 'errno', 'encodings.codecs', 'sre_constants', 're', '_abcoll', 'ntpath', '_codecs', 'encodings._multibytecodec', 'nt', '_warnings', 'genericpath', 'stat', 'zipimport', 'encodings.__builtin__', 'warnings', 'UserDict', '_multibytecodec', 'sys', 'codecs', 'os.path', '_functools', '_codecs_cn', '_locale', 'signal', 'traceback', 'linecache', 'encodings.aliases', 'exceptions', 'sre_parse', 'os', '_weakref']
 5 test module
 6 before import test2 ['test2', 'copy_reg', 'sre_compile', 'locale', '_sre', 'functools', 'encodings', 'site', '__builtin__', 'sysconfig', 'operator', '__main__', 'types', 'encodings.encodings', 'encodings.gbk', 'abc', '_weakrefset', 'encodings._codecs_cn', 'errno', 'encodings.codecs', 'sre_constants', 're', '_abcoll', 'ntpath', '_codecs', 'test', 'encodings._multibytecodec', 'nt', '_warnings', 'genericpath', 'stat', 'zipimport', 'encodings.__builtin__', 'warnings', 'UserDict', '_multibytecodec', 'sys', 'codecs', 'os.path', '_functools', '_codecs_cn', '_locale', 'signal', 'traceback', 'linecache', 'encodings.aliases', 'exceptions', 'sre_parse', 'os', '_weakref']
 7 after import test2 ['test2', 'copy_reg', 'sre_compile', 'locale', '_sre', 'functools', 'encodings', 'site', '__builtin__', 'sysconfig', 'operator', '__main__', 'types', 'encodings.encodings', 'encodings.gbk', 'abc', '_weakrefset', 'encodings._codecs_cn', 'errno', 'encodings.codecs', 'sre_constants', 're', '_abcoll', 'ntpath', '_codecs', 'test', 'encodings._multibytecodec', 'nt', '_warnings', 'genericpath', 'stat', 'zipimport', 'encodings.__builtin__', 'warnings', 'UserDict', '_multibytecodec', 'sys', 'codecs', 'os.path', '_functools', '_codecs_cn', '_locale', 'signal', 'traceback', 'linecache', 'encodings.aliases', 'exceptions', 'sre_parse', 'os', '_weakref']
 8 after import test ['test2', 'copy_reg', 'sre_compile', 'locale', '_sre', 'functools', 'encodings', 'site', '__builtin__', 'sysconfig', 'operator', '__main__', 'types', 'encodings.encodings', 'encodings.gbk', 'abc', '_weakrefset', 'encodings._codecs_cn', 'errno', 'encodings.codecs', 'sre_constants', 're', '_abcoll', 'ntpath', '_codecs', 'test', 'encodings._multibytecodec', 'nt', '_warnings', 'genericpath', 'stat', 'zipimport', 'encodings.__builtin__', 'warnings', 'UserDict', '_multibytecodec', 'sys', 'codecs', 'os.path', '_functools', '_codecs_cn', '_locale', 'signal', 'traceback', 'linecache', 'encodings.aliases', 'exceptions', 'sre_parse', 'os', '_weakref']
 9 after import test2 ['test2', 'copy_reg', 'sre_compile', 'locale', '_sre', 'functools', 'encodings', 'site', '__builtin__', 'sysconfig', 'operator', '__main__', 'types', 'encodings.encodings', 'encodings.gbk', 'abc', '_weakrefset', 'encodings._codecs_cn', 'errno', 'encodings.codecs', 'sre_constants', 're', '_abcoll', 'ntpath', '_codecs', 'test', 'encodings._multibytecodec', 'nt', '_warnings', 'genericpath', 'stat', 'zipimport', 'encodings.__builtin__', 'warnings', 'UserDict', '_multibytecodec', 'sys', 'codecs', 'os.path', '_functools', '_codecs_cn', '_locale', 'signal', 'traceback', 'linecache', 'encodings.aliases', 'exceptions', 'sre_parse', 'os', '_weakref']
10 [Finished in 0.2s]

    從執行結果來看,test先import test2,因爲sys.modules中沒有test2,因此執行test2,並將test2加入sys.modules中;在test2中,import test1,因爲sys.modules中沒有test1,因此執行test1,並將test1加入sys.modules中;執行到import test2時,因爲此時sys.modules中存在了test2,因此不執行test2,等到test1執行完成後回到test2繼續執行;test2繼續執行完成後回到最早的test執行。

2五、pickle對象持久化

    pickle用法很簡單,將一個python對象經過dumps序列化爲字符串,若是經過loads將一個str轉化爲一個python對象。具體例子以下:

1 >>> t1 = ('this string', 42, [1, 2, 3])
2 >>> import pickle
3 >>> p1 = pickle.dumps(t1)
4 >>> p1
5 "(S'this string'\np0\nI42\n(lp1\nI1\naI2\naI3\natp2\n."
6 >>> t2 = pickle.loads(p1)
7 >>> t2
8 ('this string', 42, [1, 2, 3])
9 >>>

2六、 自定義迭代器

    在class中定義__iter__和next函數便可,具體以下:

 1 class Iter(object):
 2     def __init__(self, owner, start, stop):
 3         self.owner = owner
 4         self.value = start - 1
 5         self.stop = stop
 6     def next(self):
 7         if self.value == self.stop:
 8             raise StopIteration
 9         self.value += 1
10         return self.value ** 2
11 
12 class Squares(object):
13 
14     def __init__(self, start, stop):
15         self.start = start
16         self.stop = stop
17     def __iter__(self):
18         return Iter(self, self.start, self.stop)
19 
20 x = Squares(1, 5)
21 for i in x:
22     for j in x:
23         print i, ' ', j

 2七、內置函數locals和globals

主要是語句執行的上下文環境。

2八、文本操做
將製表符轉換爲空格:string.expandtabs
2九、寫操做會屏蔽外部命名空間的搜索,只會搜索當前命名空間。命名空間的搜索是在編譯器進行的。
30、print在windows控制檯輸出須要設置gbk編碼格式:
      print s.encode('gbk')
相關文章
相關標籤/搜索