今天在學習python多線程的時候出現了一些錯誤,我用的版本是3.x 在 import thread中出現了一些錯誤,提示module中沒有這個版塊,啥情況呢,經過一番在度娘上翻來覆去的搜索,終於是發現了問題,對了版本問題 在2.x中 import thread 是正確的,在3.x中因爲版本的改變就必須 import _thread 在thread前加一個下劃線,這樣錯誤就消失啦O(∩_∩)O~~
在度娘上找到一些分享下給大家:
python 2.4 與 python 3.0 的比較 一、 print 從語句變爲函數 原: print 1, 2+3 改爲: print ( 1, 2+3 ) 二、range 與 xrange 原 : range( 0, 4 ) 結果 是 列表 [0,1,2,3 ] 改爲:list( range(0,4) ) 原 : xrange( 0, 4 ) 適用於 for 循環的變量控制 改爲:range(0,4) 三、字符串 原: 字符串以 8-bit 字符串存儲 改爲: 字符串以 16-bit Unicode 字符串存儲
四、try except 語句的變化 原: try: ...... except Exception, e : ...... 改爲 try: ...... except Exception as e : ...... 五、打開文件 原: file( ..... ) 或 open(.....) 改爲: 只能用 open(.....) 六、從鍵盤錄入一個字符串 原: raw_input( "提示信息" ) 改爲: input( "提示信息" ) 七、bytes 數據類型
A bytes object is an immutable array. The items are 8-bit bytes, represented by integers in the range 0 <= x < 256. bytes 可以看成是“字節數組”對象,每個元素是 8-bit 的字節,取值範圍 0~255。 由於在 python 3.0中字符串以 unicode 編碼存儲,當寫入二進制文件時,字符串無法直接寫入(或讀取),必須以某種方式的編碼爲字節序列後,方可寫入。 (一)字符串編碼(encode) 爲 bytes 例: s = "張三abc12" b = s.encode( 編碼方式) # b 就是 bytes 類型的數據 # 常用的編碼方式爲 : "uft-16" , "utf-8", "gbk", "gb2312", "ascii" , "latin1" 等 # 注 : 當字符串不能編碼爲指定的“編碼方式”時,會引發異常 (二) bytes 解碼(decode)爲字符串 s = "張三abc12" b = s.encode( "gbk") # 字符串 s 編碼爲 gbk 格式的字節序列 s1 = b.decode("gbk") # 將字節序列 b以gbk格式 解碼爲字符串 # 說明,當字節序列不能以指定的編碼格式解碼時會引發異常 (三)使用方法舉例 #coding=gbk
f = open("c:\\1234.txt", "wb") input("?") 讀取該文件的例子: #coding=gbk
f = open("c:\\1234.txt", "rb") 運行後應顯示: 張三李四abcd1234
(四) bytes序列,一但形成,其內容是不可變的 例: s="ABCD" b=s.encode("gbk") print b[0] # 顯示 65 b[0] = 66 # 執行該句,出現異常: 'bytes' object does not support item assignment
八、 chr( K ) 與 ord( c ) python 2.4.2以前 chr( K ) 將編碼K 轉爲字符,K的範圍是 0 ~ 255 ord( c ) 取單個字符的編碼, 返回值的範圍: 0 ~ 255 python 3.0 chr( K ) 將編碼K 轉爲字符,K的範圍是 0 ~ 65535 ord( c ) 取單個字符的編碼, 返回值的範圍: 0 ~ 65535 九、 除法運算符 python 2.4.2以前 10/3 結果爲 3 python 3.0 10 / 3 結果爲 3.3333333333333335 10 // 3 結果爲 3 十、字節數組對象 --- 新增 (一) 初始化 a = bytearray( 10 ) # a 是一個由十個字節組成的數組,其每個元素是一個字節,類型借用 int # 此時,每個元素初始值爲 0 (二) 字節數組 是可變的 a = bytearray( 10 ) a[0] = 25 # 可以用賦值語句更改其元素,但所賦的值必須在 0 ~ 255 之間 (三) 字節數組的切片仍是字節數組 (四) 字符串轉化爲字節數組 #coding=gbk s ="你好" b = s.encode( "gbk") # 先將字符串按某種“GBK”編碼方式轉化爲 bytes c = bytearray( b ) #再將 bytes 轉化爲 字節數組 也可以寫作 c = bytearray( "你好", "gbk")
(五) 字節數組轉化爲字符串 c = bytearray( 4 ) c[0] = 65 ; c[1]=66; c[2]= 67; c[3]= 68 s = c.decode( "gbk" ) print ( s ) # 應顯示: ABCD
(六) 字節數組可用於寫入文本文件 #coding=gbk
f = open("c:\\1234.txt", "wb")
f.write( b ) input("?") |
RookieDong的補充
1,“import thread”問題,2.x中的模塊thread在3.x中編程"_thread"(需要在前面加一個下劃線).否則會出現“ImportError: No module named thread
轉載自:http://rookiedong.iteye.com/blog/1185403
對了今天因爲在線程的學習中,有一個需要解決的問題,跟大家分享一下
if __name__=='__main__'
test()
“Make a script both importable and executable”
讓你寫的腳本模塊既可以導入到別的模塊中用,另外該模塊自己也可執行。
作爲Python新手,常常會遇到 if __name__ == "__main__" 這個問題,下面我就來解釋下它的作用。
比如你編寫一個test.py文件,一個python文件就可以看作是一個python的模塊,這個python模塊(.py文件)有兩種使用方式:直接運行使用和作爲模塊被其他模塊調用。
解釋下__name__:每一個模塊都有一個內置屬性__name__。而__name__的值取決與python模塊(.py文件)的使用方式。如果是直接運行使用,那麼這個模塊的__name__值就是“__main__”;如果是作爲模塊被其他模塊調用,那麼這個模塊(.py文件)的__name__值就是該模塊(.py文件)的文件名,且不帶路徑和文件擴展名。
我看過後仍然是一知半解,等用到實際中就會漸漸的明白了。
雖然這是一個小小的沒有意義的東西,還是要明白是幹嘛的,就像 C++ #include<iostream> using namespace std; Java public static void main(String args) 要明白是幹嘛的對吧。
嘿嘿,今天就到這裏,一起加油,一起努力,for tomorrow!!