事情大概是這樣的,以前我一直覺得python文件在執行過以後就會生成pyc文件,後來一次偶然狀況下,發現仍是本身too young too simple,在看過其餘大神文章而且本身驗證以後,發現仍是有點意思的,權當沒事寫點文章吧。python
簡單來講,pyc文件就是Python的字節碼文件,咱們都知道Python是一種全平臺的解釋性語言,全平臺其實就是Python文件在通過解釋器解釋以後(或者稱爲編譯)生成的pyc文件能夠在多個平臺下運行,這樣一樣也能夠隱藏源代碼。其實,Python是徹底面向對象的語言,Python文件在通過解釋器解釋後生成字節碼對象PyCodeObject,pyc文件能夠理解爲是PyCodeObject對象的持久化保存方式。數據庫
pyc文件只有在文件被當成模塊導入時纔會生成。也就是說,Python解釋器認爲,只有import進行的模塊才須要被重用。 生成pyc文件的好處顯而易見,當咱們屢次運行程序時,不須要從新對該模塊進行從新的解釋。主文件通常只須要加載一次不會被其餘模塊導入,因此通常主文件不會生成pyc文件。
下面來舉個例子說明,見代碼緩存
文件print_hello.py print("hello")
import print_hello
執行python print_hello.py函數
E:\test>python print_hello.py hello E:\test>dir 驅動器 E 中的卷是 文件 卷的序列號是 B612-D1B0 E:\test 的目錄 2017/09/25 21:09 <DIR> . 2017/09/25 21:09 <DIR> .. 2017/09/25 21:08 18 import_hello.py 2017/09/25 21:08 14 print_hello.py 2 個文件 32 字節 2 個目錄 49,367,699,456 可用字節
能夠發現並無pyc文件生成,
執行python import_hello.py設計
E:\test>python import_hello.py hello E:\test>dir 驅動器 E 中的卷是 文件 卷的序列號是 B612-D1B0 E:\test 的目錄 2017/09/25 21:12 <DIR> . 2017/09/25 21:12 <DIR> .. 2017/09/25 21:08 18 import_hello.py 2017/09/25 21:08 14 print_hello.py 2017/09/25 21:12 124 print_hello.pyc 3 個文件 156 字節 2 個目錄 49,367,699,456 可用字節
須要說明兩點的是:code
if __name__ == "__main__": print("hello")
總的來講,瞭解pyc其實對於Python開發者來講並無多大的意義,本着鑽研的精神寫下這篇文章,感受有一下幾點能夠考慮對象