一、數據運算
Python數據運算感覺和C++,Java沒有太大的差異,百度一大堆,這里就不想寫了。比較有意思的是三元運算,記得C++和Java都有這個。。。
1 a,b,c = 1,3,5 2 d = a if a<b else c 3 d
可以看到:如果條件成立返回a,否則返回c。
二、bytes數據類型
原文:http://eli.thegreenplace.net/2012/01/30/the-bytesstr-dichotomy-in-python-3
Python 3 中最重要的新特性可能就是將文本(text)和二進制數據做了更清晰的區分。文本總是用unicode進行編碼,以str類型表示;而二進制數據以bytes類型表示。
Python 3 中不能以任何隱式方式將str和bytes類型二者混合使用。不可以將str和bytes類型進行拼接,不能在str中搜索bytes數據(反之亦然),也不能將str作為參數傳入需要bytes類型參數的函數(反之亦然)。
字符串和字節符之間劃分界線是必然的,圖解要牢記:
二級制數據除了用于保存視頻、音頻等文件外;在Python 3.x 網絡編程中有重要作用,網絡編程數據傳輸使用的正是二級制數據。
1 msg = "我愛你啊,祖國!".encode('utf-8') 2 msg 3 msg.decode('utf-8')
三、.pyc文件是什么鬼,說好的解釋型語言呢?
初學Python時,聽到的關于Python的第一句話就是,Python是一門解釋性語言,直到發現了*.pyc文件的存在。如果是解釋型語言,那么生成的*.pyc文件是什么呢?
其實,隨著Java等基于虛擬機的語言的興起,解釋型和編譯型語言的界限變得越來越模糊。
用Java來舉例,Java首先是通過編譯器編譯成字節碼文件,然后在運行時通過解釋器給解釋成機器文件。所以我們說Java是一種先編譯后解釋的語言。
例如Java執行程序的命令:
javac hello.java
java hello
Python執行的也是類似操作,只不過不需要用戶顯式調用!
Python的大致運行過程如下:
? ? ? ?當Python程序第一次運行時,編譯的結果則是保存在位于內存中的PyCodeObject中,當Python程序運行結束時,Python解釋器則將PyCodeObject寫回到.pyc文件中。
? ? ? ?當Python程序第二次運行時,首先程序會在硬盤中尋找pyc文件,如果找到,則直接載入,否則就重復上面的過程。
? ? ? ?對于程序修改的問題,Python其實是檢查.py文件和.pyc文件的時間戳,已新的為準!(自己沒查過源碼,道聽途說。)
? ? ? ?所以我們應該這樣來定位PyCodeObject和.pyc文件,我們說.pyc文件其實是PyCodeObject的一種持久化保存方式。
?