【廖雪峰python進階筆記】模組
1. 匯入模組
要使用一個模組,我們必須首先匯入該模組。Python使用import
語句匯入一個模組。例如,匯入系統自帶的模組 math:
import math
你可以認為math就是一個指向已匯入模組的變數
,通過該變數,我們可以訪問math模組
中所定義的所有公開的函式、變數和類:
>>> math.pow(2, 0.5) # pow是函式
1.4142135623730951
>>> math.pi # pi是變數
3.141592653589793
如果我們只希望匯入用到的math模組的某幾個函式
,而不是所有函式,可以用下面的語句:
from math import pow, sin, log
這樣,可以直接引用 pow, sin, log 這3個函式,但math的其他函式沒有匯入進來:
>>> pow(2, 10)
1024.0
>>> sin(3.14)
0.0015926529164868282
如果遇到名字衝突怎麼辦?比如math模組有一個log函式,logging模組也有一個log函式,如果同時使用,如何解決名字衝突?
如果使用import匯入模組名,由於必須通過模組名引用函式名,因此不存在衝突:
import math, logging
print math.log(10) # 呼叫的是math的log函式
logging.log(10, 'something') # 呼叫的是logging的log函式
如果使用 from…import 匯入 log 函式,勢必引起衝突。這時,可以給函式起個“別名”
來避免衝突:
from math import log
from logging import log as logger # logging的log現在變成了logger
print log(10) # 呼叫的是math的log
logger(10, 'import from logging') # 呼叫的是logging的log
2. 動態匯入模組
如果匯入的模組不存在,Python直譯器會報 ImportError 錯誤:
>>> import something
ImportError: No module named something
有的時候,兩個不同的模組提供了相同的功能,比如 StringIO 和 cStringIO 都提供了StringIO
這個功能。
這是因為Python是動態語言
,解釋執行
,因此Python程式碼執行速度慢。
如果要提高Python程式碼的執行速度,最簡單的方法是把某些關鍵函式用 C 語言重寫,這樣就能大大提高執行速度。
同樣的功能,StringIO
是純Python程式碼編寫的,而 cStringIO
部分函式是 C 寫的,因此 cStringIO 執行速度更快。
利用ImportError錯誤,我們經常在Python中動態匯入模組:
try:
from cStringIO import StringIO
except ImportError:
from StringIO import StringIO
上述程式碼先嚐試從cStringIO匯入,如果失敗了(比如cStringIO沒有被安裝),再嘗試從StringIO匯入。這樣,如果cStringIO模組存在,則我們將獲得更快的執行速度,如果cStringIO不存在,則頂多程式碼執行速度會變慢,但不會影響程式碼的正常執行。
try
的作用是捕獲錯誤,並在捕獲到指定錯誤時執行 except
語句。
3. 使用future
Python的新版本會引入新的功能,但是,實際上這些功能在上一個老版本中就已經存在了。要“試用”某一新的特性,就可以通過匯入future模組的某些功能來實現。
例如,Python 2.7的整數除法運算結果仍是整數:
>>> 10 / 3
3
但是,Python 3.x已經改進了整數的除法運算,“/”除將得到浮點數,“//”除才仍是整數:
>>> 10 / 3
3.3333333333333335
>>> 10 // 3
3
要在Python 2.7中引入3.x的除法規則,匯入future的division:
>>> from __future__ import division
>>> print 10 / 3
3.3333333333333335
當新版本的一個特性與舊版本不相容時,該特性將會在舊版本中新增到__future__
中,以便舊的程式碼能在舊版本中測試新特性。
4. 安裝第三方模組
pip install
相關文章
- 【廖雪峰python進階筆記】定製類Python筆記
- 【廖雪峰python進階筆記】類的繼承Python筆記繼承
- 【廖雪峰python進階筆記】物件導向程式設計Python筆記物件程式設計
- 【廖雪峰python進階筆記】函數語言程式設計Python筆記函數程式設計
- 【廖雪峰python入門筆記】dictPython筆記
- 【廖雪峰python入門筆記】setPython筆記
- 【廖雪峰python入門筆記】切片Python筆記
- 【廖雪峰python入門筆記】迭代Python筆記
- 廖雪峰Git教程筆記Git筆記
- 【廖雪峰python入門筆記】函式Python筆記函式
- 【廖雪峰python入門筆記】變數Python筆記變數
- 【廖雪峰python入門筆記】if語句Python筆記
- 【廖雪峰python入門筆記】for迴圈Python筆記
- 【廖雪峰python入門筆記】列表生成式Python筆記
- 【廖雪峰python入門筆記】list_建立Python筆記
- 【廖雪峰python入門筆記】tuple_建立Python筆記
- 【廖雪峰python入門筆記】while迴圈Python筆記While
- 【廖雪峰python入門筆記】多重迴圈Python筆記
- 【廖雪峰python入門筆記】break和continuePython筆記
- 【廖雪峰python入門筆記】list刪除元素_pop()Python筆記
- 【廖雪峰python入門筆記】list_替換元素Python筆記
- 【廖雪峰python入門筆記】tuple_“元素可變”Python筆記
- 【廖雪峰python入門筆記】tuple_建立單元素Python筆記
- 【廖雪峰python入門筆記】字串_轉義字元的使用Python筆記字串字元
- 【廖雪峰python入門筆記】raw 字串和多行字串表示Python筆記字串
- 【廖雪峰python入門筆記】整數和浮點數Python筆記
- 【廖雪峰python入門筆記】list_按照索引訪問Python筆記索引
- 【廖雪峰python入門筆記】list_倒序訪問Python筆記
- 【廖雪峰python入門筆記】布林運算和短路計算Python筆記
- 【廖雪峰python入門筆記】list新增元素_append()和insert()Python筆記APP
- 廖雪峰Git學習筆記1-Git簡介Git筆記
- 跟著廖雪峰學python 005Python
- 【廖雪峰python入門筆記】Unicode編碼_UnicodeDecodeError處理Python筆記UnicodeError
- 廖雪峰《Python3 基礎教程》讀書筆記——第一、第二章Python筆記
- 20190228 學習筆記——廖雪峰 git筆記Git
- Python進階03 模組Python
- 【模組二】Python進階Python
- python進階學習筆記(一)Python筆記