1 導入模塊 1.1 問題 本案例要求先編寫一個star模塊,主要要求如下: 建立工作目錄 ~/bin/ 創建模塊文件 ~/bin/star.py 模塊中創建pstar函數,實現列印50個星號的功能 然後練習導入模塊,調用模塊中的函數: 在交互解釋器中導入模塊 調用模塊的函數 1.2 方案 使用vi ...
1 導入模塊
1.1 問題
本案例要求先編寫一個star模塊,主要要求如下:
- 建立工作目錄 ~/bin/
- 創建模塊文件 ~/bin/star.py
- 模塊中創建pstar函數,實現列印50個星號的功能
然後練習導入模塊,調用模塊中的函數:
- 在交互解釋器中導入模塊
- 調用模塊的函數
1.2 方案
使用vim當作文本編輯器編寫python腳本,使用RHEL6系統中自帶的python解釋器載入模塊。
註意,模塊及函數在後續課程中有詳細介紹,這裡只是因為經常要用到導入模塊,所以需要大致瞭解一下。
模塊支持從邏輯上組織python代碼。當代碼量變得相當大的時候,最好把代碼分成一些有組織的代碼段,前提是保證它們的彼此交互。
這些代碼段是共用的,所以python允許調入一個模塊,允許使用其他模塊的屬性來利用之前的工作成果,實現代碼重用。這個把其他模塊中屬性附加到你的模塊中的操作叫做導入(import)。
給定一個模塊名之後,只可能有一個模塊被導入到python解釋器中,所以在不同模塊間不會出現名稱交叉現象;每個模塊都定義了它自己的唯一的名稱空間,訪問一個模塊的屬性可以使用句點表示法,比訪問star模塊中的pstar函數的寫法為:star.pstar()。
1.3 步驟
實現此案例需要按照如下步驟進行。
步驟一:創建目錄結構
Linux在執行命令時,它會到PATH環境變數定義的路徑中去查找,如果查到則執行,如果查不到則提示命令找不到。
為了使得編寫的腳本在任意位置可以直接執行,並支持按TAB鍵補齊,最好將命令放到PATH環境變數定義的路徑中。
在Linux系統中,每個用戶的家目錄下的bin目錄,預設在PATH環境變數中,但是系統預設並沒有創建該目錄。
- [root@py01 ~]# echo $PATH
- /usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/root/bin
2)根據PATH變數內容創建bin目錄
- [root@py01 ~]# mkdir /root/bin
步驟二:創建模塊文件
1)創建模塊文件
python的模塊名就是腳本文件名去掉.py的擴展名,所以star模塊的文件名就是star.py。
在創建文件時,不要使用python已有的模塊名。因為在import模塊時,如果自己創建的模塊文件和python自帶的模塊重名,那麼,用戶自己創建的模塊將被導入,用戶也就無法使用python自身的模塊了。
判斷python是否擁有某個模塊,最簡單的辦法就是,進入到python交互解釋器中,然後執行import命令,如果提示ImportError則表示python預設沒有該模塊。
- [root@py01 ~]# cd bin
- [root@py01 ~]# vim star.py
2)編寫pstar函數
像shell本一樣,python腳本文件的第一行也是解釋器。
在python中,使用def定義函數,def後面緊跟函數名,函數名後面是一對圓括弧,圓括弧包含可選的參數。
需要註意的是,()並不是函數名的一部分,另外最後不要丟掉冒號。在python中,如果一個關鍵字後面有子語句塊,那麼該關鍵字的行尾都需要加冒號。
函數體部分(代碼組)必須縮進,一般縮進4個空格,而且所有的子語句必須縮進相同的空白。
函數定義只是說有這樣的功能,並不執行。所以該程式文件如果直接以腳本的方式執行,那麼它不會產生任何輸出。
- #!/usr/bin/env python
- def pstar():
- print '*' * 50
步驟三:導入模塊並測試
在這裡需要註意的是,需要在模塊文件所在的目錄下打開交互解釋器。因為python在導入模塊時會在固定的幾個位置去搜索模塊,如果找到則導入,否則將出錯。當前的工作目錄也是python在搜索模塊時會查找的路徑。
- [root@py01 bin]# python
- Python 2.6.6 (r266:84292, Oct 12 2012, 14:23:48)
- [GCC 4.4.6 20120305 (Red Hat 4.4.6-4)] on linux2
- Type "help", "copyright", "credits" or "license" for more information.
- >>> import star
解釋器需要知識執行的是哪個模塊中的函數,所以寫法應該是:“模塊.函數”。
註意,函數名後面的圓括弧不要丟掉,python調用函數使用圓括弧,表示執行該函數的意思。如果沒有圓括弧,只是引用,不調用,也就是不會執行該函數。
- >>> star.pstar()
- **************************************************