1. 程式人生 > >python學習筆記04-python模組

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這樣的變數是特殊變數,可以被直接引用,但是有特殊用途,比如上面的authorname就是特殊變數,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)