## 認識模塊
對于模塊,在前面的一些舉例中,已經涉及到了,比如曾經有過:import random (獲取隨機數模塊)。為了能夠對模塊有一個清晰的了解,首先要看看什么模塊,這里選取[官方文檔中](https://docs.python.org/2/tutorial/modules.html)對它的定義:
> A module is a file containing Python definitions and statements. The file name is the module name with the suffix .py appended. Within a module, the module’s name (as a string) is available as the value of the global variable?**name**.
都是洋碼子,翻譯一下不?不!還是只說要點:
* 模塊就是一個含有python語句的文件
* 模塊名就是文件名(不要擴展名.py)
那么,那個import random的文件在哪里呢?
用曾經講過的那個法寶:help()函數看看:
~~~
>>> help(random)
~~~
然后就出現:
~~~
NAME
random - Random variable generators.
FILE
/usr/local/lib/python2.7/random.py
MODULE DOCS
http://docs.python.org/library/random
DESCRIPTION
...
~~~
這里非常明顯的告訴我們,random模塊的文件就是: /usr/local/lib/python2.7/random.py(注意:這個地址是我的計算機中的地址,可能跟看官的不一樣,特別是如果看官用的是windows,肯定跟我這個不一樣了。)
看官這時候可能有疑問了,import是怎么找到那個文件的?類似文件怎么寫?不用著急,這些我都會一一道來。
## 標準庫
看了前面的random這個例子,看官可能立刻想到一個問題:是不是已經有人把很多常用的功能都寫成模塊了?然后使用者只需要用類似方法調用即可。的確是,比如上面顯示的,就不是某個程序員在使用的時候自己編寫的,而是在安裝python的時候,就被安裝在了計算機里面。觀察那個文件存儲地址,就知道了。
我根據上面得到的地址,列出/usr/local/lib/python2.7/里面的文件,這些文件就是類似random的模塊,由于是python安裝就有的,算是標配吧,給它們一個名字“標準模塊庫”,簡稱“標準庫”。
[](https://github.com/qiwsir/ITArticles/blob/master/Pictures/22201.png)
這張圖列出了很少一部分存在這個目錄中的模塊文件。
Python的標準庫(standard library)是Python的一個組成部分,也是Python為的利器,可以讓編程事半功倍。
如果看官有時間,請經常訪問:[https://docs.python.org/2/library/](https://docs.python.org/2/library),這里列出了所有標準庫的使用方法。
有一點,請看官特別注意,對于標準庫而言,由于內容太多,恐怕是記不住的。也不用可以的去記憶,只需要知道有這么一個東西。如果在編寫程序的時候,一定要想到,對于某個東西,是不是會有標準庫支持呢?然后就到google或者上面給出的地址上搜索。
舉例:
~~~
>>> import sys #導入了標準庫sys
>>> dir(sys) #如果不到網頁上看,用這種方法可以查看這個標準庫提供的各種方法(函數)
['__displayhook__', '__doc__', '__egginsert', '__excepthook__', '__name__', '__package__', '__plen', '__stderr__', '__stdin__', '__stdout__', '_clear_type_cache', '_current_frames', '_getframe', '_mercurial', 'api_version', 'argv', 'builtin_module_names', 'byteorder', 'call_tracing', 'callstats', 'copyright', 'displayhook', 'dont_write_bytecode', 'exc_clear', 'exc_info', 'exc_type', 'excepthook', 'exec_prefix', 'executable', 'exit', 'flags', 'float_info', 'float_repr_style', 'getcheckinterval', 'getdefaultencoding', 'getdlopenflags', 'getfilesystemencoding', 'getprofile', 'getrecursionlimit', 'getrefcount', 'getsizeof', 'gettrace', 'hexversion', 'last_traceback', 'last_type', 'last_value', 'long_info', 'maxint', 'maxsize', 'maxunicode', 'meta_path', 'modules', 'path', 'path_hooks', 'path_importer_cache', 'platform', 'prefix', 'ps1', 'ps2', 'py3kwarning', 'setcheckinterval', 'setdlopenflags', 'setprofile', 'setrecursionlimit', 'settrace', 'stderr', 'stdin', 'stdout', 'subversion', 'version', 'version_info', 'warnoptions']
>>> sys.platform #比如這個
'linux2'
>>> sys.version #還有這個
'2.7.6 (default, Nov 13 2013, 19:24:16) \n[GCC 4.6.3]'
>>> help(sys.stdin) #這是查看某個模塊方法具體內容的方式
~~~
標準庫,在編程中經常用到。這里不贅述。只要看官能夠知道在哪里找、如何找所需要的標準庫即可。
## 自己編寫模塊
看官可能比較喜歡“自己動手,豐衣足食”(雖然真的不一定是豐衣足食),在某些必要的時候,還真得自己動手寫一些模塊。那么怎么編寫模塊呢?
前面已經交代,模塊就是.py文件,所以,只要將某些語句寫到一個.py文件中,它就是一個模塊了。沒有什么太多的秘密。
在某個目錄下面建立了一個文件,名稱是:mmmm.py,如下圖所示,然后編輯這個文件內容。編輯好后保存。
代碼是文件內容:
~~~
#!/usr/bin/env python
#coding:utf-8
web = "https://qiwsir.github.io"
def my_name(name):
print name
class pythoner:
def __init__(self,lang):
self.lang = lang
def programmer(self):
print "python programmer language is: ",self.lang
~~~
圖示是文件所在目錄,并且在該目錄下打開了python的交互模式(我這是在ubuntu下,看官是別的操作系統的化,注意路徑,如果遇到問題,可以暫時擱置,看下文)。
[](https://github.com/qiwsir/ITArticles/blob/master/Pictures/22301.png)
從圖中可以看出,當前目錄中有這個文件:mmmm.py
在交互模式下,仿照對標準庫模塊的操作方式:
~~~
>>> import mmmm
>>> dir(mmmm)
['__builtins__', '__doc__', '__file__', '__name__', '__package__', 'my_name', 'pythoner', 'web']
>>> mmmm.__doc__ #這個是空的,正是,因為我未曾寫過任何文檔說明
>>> mmmm.__name__ #名字
'mmmm'
>>> mmmm.__file__ #文件
'mmmm.py'
~~~
再看后面的:my_name,pythoner,web,都是我在內容中自己寫的。
~~~
>>> mmmm.web
'https://qiwsir.github.io'
~~~
web是模塊mmmm中的一個通過賦值語句建立的變量,在這里,它編程了mmmm的屬性,能夠通過點號運算訪問,其實不僅僅是這類型的賦值,其它通過def,class等,都能做為mmmm模塊的屬性。
~~~
>>> mmmm.my_name
<function my_name at 0xb74ceb54>
>>> mmmm.pythoner
<class mmmm.pythoner at 0xb73e6bcc>
~~~
當然,跟操作標準庫一樣,一樣能夠使用help()來看看這些屬性的具體內容:
~~~
>>> help(mmmm.my_name)
Help on function my_name in module mmmm:
my_name(name)
>>> help(mmmm.pythoner)
Help on class pythoner in module mmmm:
class pythoner
| Methods defined here:
|
| __init__(self, lang)
|
| programmer(self)
~~~
怎么調用呢?這樣即可:
~~~
>>> mmmm.my_name("qiwsir")
qiwsir
~~~
當調用模塊中的函數的時候,用模塊的名稱(import mmmm)+點號+函數(注意,函數后面要有括號,如果有參數,括號里面跟參數),即 module_name.funciton(*args)
~~~
>>> py = mmmm.pythoner("c++")
>>> py.programmer()
python programmer language is: c++
~~~
上面兩行,則是演示用綁定的方法調用模塊中的類以及類的實例方法。跟以往的相比較,似乎都是在前面多了一個mmmm.
如果感覺這個mmmm比較麻煩,可以用from,具體是這樣的:
~~~
>>> from mmmm import *
>>> my_name('qiwsir')
qiwsir
>>> web
'https://qiwsir.github.io'
>>> py = pythoner("c++")
>>> py.programmer()
python programmer language is: c++
~~~
這次不用總寫那么mmmm了。兩種方式,哪個更好呢?沒有定論。看官在以后的實踐中體會,什么時候用什么方式。
上面用from mmmm import?_,其中_符號,表示將所有的都import進來,用這個方法,也可以只import一部分,如同:
~~~
>>> from mmmm import my_name #如果看官前面運行了上述操作,需要關閉交互模式,
#再重啟,才能看到下面過程
>>> my_name("qiwsir")
qiwsir
>>> web #沒有import這個,所以報錯。
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'web' is not defined
~~~
這就是基本的import模塊方法。看官的疑問,還要存著。且聽下回分解。
- 第零部分 獨上高樓,望盡天涯路
- 嘮叨一些關于Python的事情
- 為什么要開設本欄目
- 第一部分 積小流,至江海
- Python環境安裝
- 集成開發環境(IDE)
- 數的類型和四則運算
- 啰嗦的除法
- 開始真正編程
- 初識永遠強大的函數
- 玩轉字符串(1):基本概念、字符轉義、字符串連接、變量與字符串關系
- 玩轉字符串(2)
- 玩轉字符串(3)
- 眼花繚亂的運算符
- 從if開始語句的征程
- 一個免費的實驗室
- 有容乃大的list(1)
- 有容乃大的list(2)
- 有容乃大的list(3)
- 有容乃大的list(4)
- list和str比較
- 畫圈還不簡單嗎
- 再深點,更懂list
- 字典,你還記得嗎?
- 字典的操作方法
- 有點簡約的元組
- 一二三,集合了
- 集合的關系
- Python數據類型總結
- 深入變量和引用對象
- 賦值,簡單也不簡單
- 坑爹的字符編碼
- 做一個小游戲
- 不要紅頭文件(1): open, write, close
- 不要紅頭文件(2): os.stat, closed, mode, read, readlines, readline
- 第二部分 窮千里目,上一層樓
- 正規地說一句話
- print能干的事情
- 從格式化表達式到方法
- 復習if語句
- 用while來循環
- 難以想象的for
- 關于循環的小伎倆
- 讓人歡喜讓人憂的迭代
- 大話題小函數(1)
- 大話題小函數(2)
- python文檔
- 重回函數
- 變量和參數
- 總結參數的傳遞
- 傳說中的函數條規
- 關于類的基本認識
- 編寫類之一創建實例
- 編寫類之二方法
- 編寫類之三子類
- 編寫類之四再論繼承
- 命名空間
- 類的細節
- Import 模塊
- 模塊的加載
- 私有和專有
- 折騰一下目錄: os.path.<attribute>
- 第三部分 昨夜西風,亭臺誰登
- 網站的結構:網站組成、MySQL數據庫的安裝和配置、MySQL的運行
- 通過Python連接數據庫:安裝python-MySQLdb,連接MySQL
- 用Pyton操作數據庫(1):建立連接和游標,并insert and commit
- 用Python操作數據庫(2)
- 用Python操作數據庫(3)
- python開發框架:框架介紹、Tornado安裝
- Hello,第一個網頁分析:tornado網站的基本結構剖析:improt模塊、RequestHandler, HTTPServer, Application, IOLoop
- 實例分析get和post:get()通過URL得到數據和post()通過get_argument()獲取數據
- 問候世界:利用GAE建立tornado框架網站
- 使用表單和模板:tornado模板self.render和模板變量傳遞
- 模板中的語法:tornado模板中的for,if,set等語法
- 靜態文件以及一個項目框架
- 模板轉義
- 第四部分 暮然回首,燈火闌珊處
- requests庫
- 比較json/dictionary的庫
- defaultdict 模塊和 namedtuple 模塊
- 第五部分 Python備忘錄
- 基本的(字面量)值
- 運算符
- 常用的內建函數
- 擴展閱讀(來自網絡文章)
- 人生苦短,我用Python