python學習筆記04-python模組
1.介紹
一個.py檔案就稱之為一個模組(Module)
Python按目錄來組織模組——包(Package)
每一個包目錄下必須有一個init.py的檔案,可以是空檔案,也可以有Python程式碼。因為init.py本身就是一個模組,而它的模組名就是包名。
2.第一個模組
任何模組程式碼的第一個字串都被視為模組的文件註釋
sys模組有一個argv變數,用list儲存了命令列的所有引數。argv至少有一個元素,因為第一個引數永遠是該.py檔案的名稱#!/usr/bin/env python # -*- coding: utf-8 -*- #文件註釋 'a test module' #特殊變數,宣告作者 __author__ = "ybf326" #匯入sys模組 import sys def test(): #利用sys模組的argv方法,獲取所有引數(包括執行的py指令碼檔名) args = sys.argv if len(args)==1: print 'Hello,world!' elif len(args)==2: print 'Hello,%s!' % args[1] else: print 'Too many arguments!' #判斷如果是直接執行這個檔案,則__name__為__main__,於是執行test方法 if __name__=='__main__': test()
3.別名
#!/usr/bin/env python # -*- coding: utf-8 -*- 'a test module' __author__ = "ybf326" try: #匯入cStringIO模組,取別名為StringIO import cStringIO as StringIO print 'cStringIO' except ImportError: # 匯入失敗會捕獲到ImportError #當系統平臺上沒有提供cStringIO模組,就使用StringIO模組程式碼 import StringIO print 'StringIO'
4.作用域
類似xxx這樣的變數是特殊變數,可以被直接引用,但是有特殊用途,比如上面的author,name就是特殊變數,hello模組定義的文件註釋也可以用特殊變數doc訪問,我們自己的變數一般不要用這種變數名
類似xxx和xxx這樣的函式或變數就是非公開的(private),不應該被直接引用,比如abc,__abc
之所以我們說,private函式和變數“不應該”被直接引用,而不是“不能”被直接引用,是因為Python並沒有一種方法可以完全限制訪問private函式或變數,但是,從程式設計習慣上不應該引用private函式或變數。
5.安裝第三方模組
在Python中,安裝第三方模組,是通過setuptools這個工具完成的。Python有兩個封裝了setuptools的包管理工具:easy_install和pip。目前官方推薦使用pip。
一般來說,第三方庫都會在Python官方的pypi.python.org網站註冊,要安裝一個第三方庫,必須先知道該庫的名稱,可以在官網或者pypi上搜索,比如Python Imaging Library的名稱叫PIL,因此,安裝Python Imaging Library的命令就是:pip install PIL
有了PIL,處理圖片易如反掌。隨便找個圖片生成縮圖:
>> import Image >> im = Image.open('test.png') >> print im.format, im.size, im.mode PNG (400, 300) RGB >> im.thumbnail((200, 100)) >> im.save('thumb.jpg', 'JPEG')
其他常用的第三方庫還有MySQL的驅動:MySQL-python,用於科學計算的NumPy庫:numpy,用於生成文字的模板工具Jinja2,等等
6.模組搜尋路徑
預設情況下,Python直譯器會搜尋當前目錄、所有已安裝的內建模組和第三方模組,搜尋路徑存放在sys模組的path變數中
>> import sys >> sys.path ['', '/usr/lib64/python26.zip', '/usr/lib64/python2.6', '/usr/lib64/python2.6/plat-linux2', '/usr/lib64/python2.6/lib-tk', '/usr/lib64/python2.6/lib-old', '/usr/lib64/python2.6/lib-dynload', '/usr/lib64/python2.6/site-packages', '/usr/lib/python2.6/site-packages']
如果我們要新增自己的搜尋目錄,有兩種方法:
一是直接修改sys.path,新增要搜尋的目錄。這種方法是在執行時修改,執行結束後失效。>> import sys >> sys.path.append('/Users/michael/my_py_scripts')
第二種方法是設定環境變數PYTHONPATH,該環境變數的內容會被自動新增到模組搜尋路徑中。
7.使用future
Python提供了future模組,把下一個新版本的特性匯入到當前版本,於是我們就可以在當前版本中測試一些新版本的特性
#!/usr/bin/env python # -*- coding: utf-8 -*- from __future__ import unicode_literals print '\'xxx\' is unicode?',isinstance('xxx',unicode) print 'u\'xxx\' is unicode?',isinstance(u'xxx',unicode) print '\'xxx\' is str?',isinstance('xxx',str) print 'b\'xxx\' is str?',isinstance(b'xxx',str)