標籤:lips 效率 oca 相對路徑 apple data 存在 sed art
九、模組初識
Python的強大之處在於他有非常豐富和強大的標準庫和第三方庫,幾乎你想實現的任何功能都有相應的Python庫支援,以後的課程中會深入講解常用到的各種庫,現在,我們先來象徵性的學2個簡單的。
標準庫(無需安裝就可以匯入的庫,使用python一些最常用的功能getpass等)
第三方庫(必須下載下來安裝的庫)
sys:
import sysprint(sys.path)#輸出[‘C:\\Users\\Administrator\\PycharmProjects\\week1\\day1‘, ‘C:\\Users\\Administrator\\PycharmProjects\\week1‘, ‘C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python35\\python35.zip‘,......]
匯入的庫不能和已有的本地庫名字相同。
sys模組必須存在在這幾個路徑中,如果去這些路徑裡面找了沒找到,就會報出sys模組不存在,存在就找出來了,這些環境變數就是放python內部一些檔案或者模組的地方。
第三方庫一般都放在lib\\site-packages裡面。
import sys #print(sys.path)#列印環境變數print(sys.argv)#列印相對路徑#print(sys,argv[2])列表取值 #輸出$ python test.py helo world[‘test.py‘, ‘helo‘, ‘world‘] #把執行指令碼時傳遞的參數擷取到了
以上輸出其實就是列表。
os:
import os os.system("df -h") #調用系統命令
import oscmd_res = os.system("dir") #執行命令,不儲存結果print("-->",cmd_res)
import oscmd_res = os.popen("dir").read()#不加read表示唯讀出一個對象地址print("-->",cmd_res)
#這個操作讀出來以後和上面的不同,非亂碼。
import osos.mkdir("new_dir")#建立目錄
完全結合一下:
import os,sys os.system(‘‘.join(sys.argv[1:])) #把使用者的輸入的參數當作一條命令交給os.system來執行
自己寫個模組
python tab補全模組
1 #!/usr/bin/env python 2 # python startup file 3 import sys 4 import readline 5 import rlcompleter 6 import atexit 7 import os 8 # tab completion 9 readline.parse_and_bind(‘tab: complete‘)10 # history file 11 histfile = os.path.join(os.environ[‘HOME‘], ‘.pythonhistory‘)12 try:13 readline.read_history_file(histfile)14 except IOError:15 pass16 atexit.register(readline.write_history_file, histfile)17 del os, histfile, readline, rlcompleter
for linux
寫完儲存後就可以使用了
1 localhost:~ jieli$ python2 Python 2.7.10 (default, Oct 23 2015, 18:05:06)3 [GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.0.59.5)] on darwin4 Type "help", "copyright", "credits" or "license" for more information.5 >>> import tab
你會發現,上面自己寫的tab.py模組只能在目前的目錄下匯入,如果想在系統的何何一個地方都使用怎麼辦呢? 此時你就要把這個tab.py放到python全域環境變數目錄裡啦,基本一般都放在一個叫 Python/2.7/site-packages目錄下,這個目錄在不同的OS裡放的位置不一樣,用 print(sys.path)可以查看python環境變數列表。
十、.pyc是個什麼鬼?
1. Python是一門解釋型語言?
我初學Python時,聽到的關於Python的第一句話就是,Python是一門解釋性語言,我就這樣一直相信下去,直到發現了*.pyc檔案的存在。如果是解釋型語言,那麼產生的*.pyc檔案是什麼呢?c應該是compiled的縮寫才對啊!
為了防止其他學習Python的人也被這句話誤解,那麼我們就在文中來澄清下這個問題,並且把一些基礎概念給理清。
2. 解釋型語言和編譯型語言
電腦是不能夠識別進階語言的,所以當我們運行一個進階語言程式的時候,就需要一個“翻譯機”來從事把進階語言轉變成電腦能讀懂的機器語言的過程。這個過程分成兩類,第一種是編譯,第二種是解釋。
編譯型語言在程式執行之前,先會通過編譯器對程式執行一個編譯的過程,把程式轉變成機器語言。運行時就不需要翻譯,而直接執行就可以了。最典型的例子就是C語言。
解釋型語言就沒有這個編譯的過程,而是在程式啟動並執行時候,通過解譯器對程式逐行作出解釋,然後直接運行,最典型的例子是Ruby。
通過以上的例子,我們可以來總結一下解釋型語言和編譯型語言的優缺點,因為編譯型語言在程式運行之前就已經對程式做出了“翻譯”,所以在運行時就少掉了“翻譯”的過程,所以效率比較高。但是我們也不能一概而論,一些解釋型語言也可以通過解譯器的最佳化來在對程式做出翻譯時對整個程式做出最佳化,從而在效率上超過編譯型語言。
此外,隨著Java等基於虛擬機器的語言的興起,我們又不能把語言純粹地分成解釋型和編譯型這兩種。
用Java來舉例,Java首先是通過編譯器編譯成位元組碼檔案,然後在運行時通過解譯器給解釋成機器檔案。所以我們說Java是一種先編譯後解釋的語言。
3. Python到底是什麼
其實Python和Java/C#一樣,也是一門基於虛擬機器的語言,我們先來從表面上簡單地瞭解一下Python程式的運行過程吧。
當我們在命令列中輸入python hello.py時,其實是啟用了Python的“解譯器”,告訴“解譯器”:你要開始工作了。可是在“解釋”之前,其實執行的第一項工作和Java一樣,是編譯。
熟悉Java的同學可以想一下我們在命令列中如何執行一個Java的程式:
javac hello.java
java hello
只是我們在用Eclipse之類的IDE時,將這兩部給融合成了一部而已。其實Python也一樣,當我們執行python hello.py時,他也一樣執行了這麼一個過程,所以我們應該這樣來描述Python,Python是一門先編譯後解釋的語言。
4. 簡述Python的運行過程
在說這個問題之前,我們先來說兩個概念,PyCodeObject和pyc檔案。
我們在硬碟上看到的pyc自然不必多說,而其實PyCodeObject則是Python編譯器真正編譯成的結果。我們先簡單知道就可以了,繼續向下看。
當python程式運行時,編譯的結果則是儲存在位於記憶體中的PyCodeObject中,當Python程式運行結束時,Python解譯器則將PyCodeObject寫回到pyc檔案中。
當python程式第二次運行時,首先程式會在硬碟中尋找pyc檔案,如果找到,則直接載入,否則就重複上面的過程。
所以我們應該這樣來定位PyCodeObject和pyc檔案,我們說pyc檔案其實是PyCodeObject的一種持久化儲存方式。
Python之路,Day1 - Python基礎1