python基礎系列:
python自學篇一[ Anaconda3安裝 ]
python自學篇二[ pycharm安裝及使用 ]
python自學篇三[ 判斷語句if的使用 ]
python自學篇四[ 基本數據類型和字符串常用處理 ]
python自學篇五[ 列表 ]
python自學篇六[ 元組 ]
python自學篇七[ 字典+深拷貝與淺拷貝 ]描述
python自學篇八[ 循環:while+for+pass+range()+推導式 ]
python自學篇九[ 函數(一):參數+對象 ]
python自學篇九[ 函數(二):返回值return+yield+迭代器+生成器 ]
python自學篇九[ 函數(三):變量作用域+ATM+5個小練習 ]
python自學篇九[ 函數(四):遞歸函數+匿名函數+內置函數+高階函數 ]
python自學篇十[ 面向對象 (一) :面向對象概念+定義類+練習一]
python自學篇十[ 面向對象 (二) :繼承+多繼承+類屬性+實例屬性]
python自學篇十[ 面向對象 (三) :訪問限制+類方法+靜態方法]
python自學篇十[ 面向對象 (四) :王者榮耀小遊戲+模擬一個簡單的銀行進行業務辦理的類]
python自學篇十一[ 模塊簡介+模塊製作+dir()函數+標準模塊+包]
python自學篇十二[ 文件:打開+讀取+寫入+3個習題]
python自學篇十一[ 模塊簡介+模塊製作+dir()函數+標準模塊+包]
一.模塊簡介
- 在實際開發中我們不可能不用到系統的標準模塊,或第三方模塊。
- 實現與時間有關的功能,就需要調用系統的time模塊。
#導入整個模塊
import time
- 調用模塊中的函數時,必須加上模塊名調用,因爲可能存在多個模塊中含有相同名稱的函數,此時,如果只是通過函數名來調用,解釋器無法知道到底要調用哪個函數。爲了避免這樣的情況,調用函數時,必須加上模塊名
#導入整個模塊
import time
time.sleep(5)#睡眠5秒
- 指定的模塊中導入指定的部分
#from 模塊名 import 函數名
from time import sleep
- 導入模塊中的所有內容
from math import *
print(ceil(1.1)) #向上取整
print(floor(1.1)) #向下取整
- 給導入的模塊取別名
import math as m
from math import ceil as c #不建議使用
-
實現與文件和文件夾有關的操作,就需要要用到os模塊。
-
通過Selenium實現的Web自動化測試,那麼Selenium對於Python來說就是一個第三方擴展模塊。
- 每一個 Python 腳本文件都可以被當成是一個模塊。
- 模塊以磁盤文件的形式存在。
- 當一個模塊變得過大,並且驅動了太多功能的話,就應該考慮拆一些代碼出來另外建一個模塊。
- 模塊裏的代碼可以是一段直接執行的腳本,也可以是一堆類似庫函數的代碼,從而可以被別的模塊導 入(import)調用。
- 模塊可以包含直接運行的代碼塊、類定義、 函數定義或這幾者的組合。
-
推薦所有的模塊在Python模塊的開頭部分導入。而且最好按照這樣的順序:
-
Python標準庫模塊
-
Python第三方模塊
-
應用程序自定義模塊
二.模塊製作
既然可調用系統模塊,那麼也可以自己創建一個模塊,然後通過另一個程序調用
當你導入一個模塊,Python解析器對模塊位置的搜索順序是:
- 當前目錄
- 如果不在當前目錄,Python則搜索在環境變量PYTHONPATH下的每個目錄
- 如果都找不到,Python會察看默認路徑。UNIX下,默認路徑一般爲/usr/local/lib/python/
- 模塊搜索路徑存儲在system模塊的sys.path變量中。變量裏包含當前目錄,PYTHONPATH和由安裝過程決定的默認目錄。
1.同級目錄下模塊引入:
import test #引入同級目錄中的test.py這個文件模塊
print(test.add(2,3))#調用同級目錄中的test.py模塊中的add()方法
2.跨模塊引入(不在同級目錄下):
import study.test2 #模塊名.函數名【引入study目錄下的test.py這個文件模塊】
print(study.test2.test2_add(2,3))#調用study目錄下的test.py模塊中的add()方法
3.回到上一級目錄下,再導入模塊
import sys #查看路徑變量
print(sys.path)# 添加目標路徑導當前環境中
sys.path.append('..\\') #返回上一級目錄
import msg.send #引入msg目錄下的send.py這個文件模塊
msg.send.sendMsg()#調用msg目錄下的send.py模塊中的sendMsg()方法
4.覆蓋標準模塊
調用自己的模塊,覆蓋標準模塊(系統的)
from msg import math #自定義的模塊
print(math.ceil(1.1)) #向上取整
print(math.floor(1.1))
三.dir()函數
用於按模塊名搜索模塊定義,它返回一個字符串類型的存儲列表該列表列出了所有類型的名稱:變量,模塊,函數,等等
print(dir())
print(dir(math))
四.標準模塊
有些模塊直接被構建在解析器裏,這些雖然不是一些語言內置的功能,但是他卻能很高效的使用,甚至是系統級調用也沒問題。這些組件會根據不同的操作系統進行不同形式的配置,比如 winreg (Windows註冊表訪問)這個模塊就只會提供給 Windows 系統。應該注意到這有一個特別的模塊 sys ,它內置在每一個 Python 解析器中。
Python 3.x標準模塊庫目錄
文本
-
string:通用字符串操作
-
re:正則表達式操作
-
difflib:差異計算工具
-
textwrap:文本填充
-
unicodedata:Unicode字符數據庫
-
stringprep:互聯網字符串準備工具
-
readline:GNU按行讀取接口
-
rlcompleter:GNU按行讀取的實現函數
二進制數據
-
struct:將字節解析爲打包的二進制數據
-
codecs:註冊表與基類的編解碼器
數據類型
-
datetime:基於日期與時間工具
-
calendar:通用月份函數
-
collections:容器數據類型
-
collections.abc:容器虛基類
-
heapq:堆隊列算法
-
bisect:數組二分算法
-
array:高效數值數組
-
weakref:弱引用
-
types:內置類型的動態創建與命名
-
copy:淺拷貝與深拷貝
-
pprint:格式化輸出
-
reprlib:交替repr()的實現
數學
-
numbers:數值的虛基類
-
math:數學函數
-
cmath:複數的數學函數
-
decimal:定點數與浮點數計算
-
fractions:有理數
-
random:生成僞隨機數
函數式編程
-
itertools:爲高效循環生成迭代器
-
functools:可調用對象上的高階函數與操作
-
operator:針對函數的標準操作
文件與目錄
-
os.path:通用路徑名控制
-
fileinput:從多輸入流中遍歷行
-
stat:解釋stat()的結果
-
filecmp:文件與目錄的比較函數
-
tempfile:生成臨時文件與目錄
-
glob:Unix風格路徑名格式的擴展
-
fnmatch:Unix風格路徑名格式的比對
-
linecache:文本行的隨機存儲
-
shutil:高級文件操作
-
macpath:Mac OS 9路徑控制函數
持久化
-
pickle:Python對象序列化
-
copyreg:註冊機對pickle的支持函數
-
shelve:Python對象持久化
-
marshal:內部Python對象序列化
-
dbm:Unix“數據庫”接口
-
sqlite3:針對SQLite數據庫的API 2.0
壓縮
-
zlib:兼容gzip的壓縮
-
gzip:對gzip文件的支持
-
bz2:對bzip2壓縮的支持
-
lzma:使用LZMA算法的壓縮
-
zipfile:操作ZIP存檔
-
tarfile:讀寫tar存檔文件
文件格式化
-
csv:讀寫CSV文件
-
configparser:配置文件解析器
-
netrc:netrc文件處理器
-
xdrlib:XDR數據編碼與解碼
-
plistlib:生成和解析Mac OS X .plist文件
加密
-
hashlib:安全散列與消息摘要
-
hmac:針對消息認證的鍵散列
操作系統工具
-
os:多方面的操作系統接口
-
io:流核心工具
-
time:時間的查詢與轉化
-
argparser:命令行選項、參數和子命令的解析器
-
optparser:命令行選項解析器
-
getopt:C風格的命令行選項解析器
-
logging:Python日誌工具
-
logging.config:日誌配置
-
logging.handlers:日誌處理器
-
getpass:簡易密碼輸入
-
curses:字符顯示的終端處理
-
curses.textpad:curses程序的文本輸入域
-
curses.ascii:ASCII字符集工具
-
curses.panel:curses的控件棧擴展
-
platform:訪問底層平臺認證數據
-
errno:標準錯誤記號
-
ctypes:Python外部函數庫
併發
-
threading:基於線程的並行
-
multiprocessing:基於進程的並行
-
concurrent:併發包
-
concurrent.futures:啓動並行任務
-
subprocess:子進程管理
-
sched:事件調度
-
queue:同步隊列
-
select:等待I/O完成
-
dummy_threading:threading模塊的替代(當_thread不可用時)
-
_thread:底層的線程API(threading基於其上)
-
_dummy_thread:_thread模塊的替代(當_thread不可用時)
進程間通信
-
socket:底層網絡接口
-
ssl:socket對象的TLS/SSL填充器
-
asyncore:異步套接字處理器
-
asynchat:異步套接字命令/響應處理器
-
signal:異步事務信號處理器
-
mmap:內存映射文件支持
互聯網
-
email:郵件與MIME處理包
-
json:JSON編碼與解碼
-
mailcap:mailcap文件處理
-
mailbox:多種格式控制郵箱
-
mimetypes:文件名與MIME類型映射
-
base64:RFC 3548:Base16、Base32、Base64編碼
-
binhex:binhex4文件編碼與解碼
-
binascii:二進制碼與ASCII碼間的轉化
-
quopri:MIME quoted-printable數據的編碼與解碼
-
uu:uuencode文件的編碼與解碼
HTML與XML
-
html:HTML支持
-
html.parser:簡單HTML與XHTML解析器
-
html.entities:HTML通用實體的定義
-
xml:XML處理模塊
-
xml.etree.ElementTree:樹形XML元素API
-
xml.dom:XML DOM API
-
xml.dom.minidom:XML DOM最小生成樹
-
xml.dom.pulldom:構建部分DOM樹的支持
-
xml.sax:SAX2解析的支持
-
xml.sax.handler:SAX處理器基類
-
xml.sax.saxutils:SAX工具
-
xml.sax.xmlreader:SAX解析器接口
-
xml.parsers.expat:運用Expat快速解析XML
互聯網協議與支持
-
webbrowser:簡易Web瀏覽器控制器
-
cgi:CGI支持
-
cgitb:CGI腳本反向追蹤管理器
-
wsgiref:WSGI工具與引用實現
-
urllib:URL處理模塊
-
urllib.request:打開URL連接的擴展庫
-
urllib.response:urllib模塊的響應類
-
urllib.parse:將URL解析成組件
-
urllib.error:urllib.request引發的異常類
-
urllib.robotparser:robots.txt的解析器
-
http:HTTP模塊
-
http.client:HTTP協議客戶端
-
ftplib:FTP協議客戶端
-
poplib:POP協議客戶端
-
imaplib:IMAP4協議客戶端
-
nntplib:NNTP協議客戶端
-
smtplib:SMTP協議客戶端
-
smtpd:SMTP服務器
-
telnetlib:Telnet客戶端
-
uuid:RFC4122的UUID對象
-
socketserver:網絡服務器框架
-
http.server:HTTP服務器
-
http.cookies:HTTPCookie狀態管理器
-
http.cookiejar:HTTP客戶端的Cookie處理
-
xmlrpc:XML-RPC服務器和客戶端模塊
-
xmlrpc.client:XML-RPC客戶端訪問
-
xmlrpc.server:XML-RPC服務器基礎
-
ipaddress:IPv4/IPv6控制庫
多媒體
-
audioop:處理原始音頻數據
-
aifc:讀寫AIFF和AIFC文件
-
sunau:讀寫Sun AU文件
-
wave:讀寫WAV文件
-
chunk:讀取IFF大文件
-
colorsys:顏色系統間轉化
-
imghdr:指定圖像類型
-
sndhdr:指定聲音文件類型
-
ossaudiodev:訪問兼容OSS的音頻設備
國際化
-
gettext:多語言的國際化服務
-
locale:國際化服務
編程框架
-
turtle:Turtle圖形庫
-
cmd:基於行的命令解釋器支持
-
shlex:簡單詞典分析
Tk圖形用戶接口
-
tkinter:Tcl/Tk接口
-
tkinter.ttk:Tk主題控件
-
tkinter.tix:Tk擴展控件
-
tkinter.scrolledtext:滾軸文本控件
開發工具
-
pydoc:文檔生成器和在線幫助系統
-
doctest:交互式Python示例
-
unittest:單元測試框架
-
unittest.mock:模擬對象庫
-
test:Python迴歸測試包
-
test.support:Python測試工具套件
-
venv:虛擬環境搭建
調試
-
bdb:調試框架
-
faulthandler:Python反向追蹤庫
-
pdb:Python調試器
-
timeit:小段代碼執行時間測算
-
trace:Python執行狀態追蹤
運行時
-
sys:系統相關的參數與函數
-
sysconfig:訪問Python配置信息
-
builtins:內置對象
-
main:頂層腳本環境
-
warnings:警告控制
-
contextlib:with狀態的上下文工具
-
abc:虛基類
-
atexit:出口處理器
-
traceback:打印或讀取一條棧的反向追蹤
-
future:未來狀態定義
-
gc:垃圾回收接口
-
inspect:檢查存活的對象
-
site:址相關的配置鉤子(hook)
-
fpectl:浮點數異常控制
-
distutils:生成和安裝Python模塊
解釋器
-
code:基類解釋器
-
codeop:編譯Python代碼
導入模塊
-
imp:訪問import模塊的內部
-
zipimport:從ZIP歸檔中導入模塊
-
pkgutil:包擴展工具
-
modulefinder:通過腳本查找模塊
-
runpy:定位並執行Python模塊
-
importlib:import的一種實施
Python語言
-
parser:訪問Python解析樹
-
ast:抽象句法樹
-
symtable:訪問編譯器符號表
-
symbol:Python解析樹中的常量
-
token:Python解析樹中的常量
-
keyword:Python關鍵字測試
-
tokenize:Python源文件分詞
-
tabnany:模糊縮進檢測
-
pyclbr:Python類瀏覽支持
-
py_compile:編譯Python源文件
-
compileall:按字節編譯Python庫
-
dis:Python字節碼的反彙編器
-
pickletools:序列化開發工具
其它
- formatter:通用格式化輸出
Windows相關
-
msilib:讀寫Windows Installer文件
-
msvcrt:MS VC++ Runtime的有用程序
-
winreg:Windows註冊表訪問
-
winsound:Windows聲音播放接口
Unix相關
-
posix:最常用的POSIX調用
-
pwd:密碼數據庫
-
spwd:影子密碼數據庫
-
grp:組數據庫
-
crypt:Unix密碼驗證
-
termios:POSIX風格的tty控制
-
tty:終端控制函數
-
pty:僞終端工具
-
fcntl:系統調用fcntl()和ioctl()
-
pipes:shell管道接口
-
resource:資源可用信息
-
nis:Sun的NIS的接口
-
syslog:Unix syslog程序庫
寧靜的天空:http://www.cnblogs.com/ribavnu/p/4886472.html
五.包
什麼是包
- 包是一種管理 Python 模塊命名空間的形式,採用"點模塊名稱"。比如一個模塊的名稱是 A.B, 那麼他表示一個包 A中的子模塊B
- 目錄中只有包含一個叫做__init__.py的文件纔會被認作是一個包
- 在導入包的時候,Python會從sys.path中的目錄來尋找這個包中包含的子目錄
導入包
現有兩個模塊功能有些聯繫,所以將其放到同一個文件夾下,一個文件中的類繼承另一個問文件中的類。
- 使用import文件.模塊的方式導入
- 使用from文件夾import模塊的方式導入
創建__init__.py
目錄中只有包含了叫做__init__.py的文件,才能被程序認作是包,模塊才能被導入成功。現在我們就在msg文件夾下創建一個__init__.py文件,並且一定要在文件中寫入__all__
__init__.py 控制着包的導入行爲。如果__init__.py文件爲空的話,僅僅是把這個包導入,不會導入包中的模塊。__init__.py中的__all__變量,是用來控制from包名import * 時導入的模塊。
可以在__init__.py中編寫其他內容,在導入時,這些編寫的內容就會被執行。
可以在__init__.py中向sys.path添加當前被調用模塊路徑。
__all__總結
1.編寫Python代碼(不建議在__init__中寫python模塊,可以在包中在創建另外的模塊來寫,儘量保證__init__.py簡單)
2.模塊中不使用__all__屬性,則導入模塊內的所有公有屬性,方法和類 。 模塊中使用__all__屬性,則表示只導入__all__中指定的屬性,因此,使用__all__可以隱藏不想被import的默認值。 __all__變量是一個由string元素組成的list變量。 它定義了當我們使用 from <module> import * 導入某個模塊的時候能導出的符號(這裏代表變量,函數,類等)。
3.from <module> import * 默認的行爲是從給定的命名空間導出所有的符號(當然下劃線開頭的變量,方法和類除外)。 需要注意的是 __all__ 隻影響到了 from <module> import * 這種導入方式, 對於 from <module> import <member> 導入方式並沒有影響,仍然可以從外部導入。
- 創建__init__.py總結
1.包將有聯繫的模塊組織在一個,即放到同一個文件夾下,並且在這個文件夾創建一個名字爲__init__.py文件,那麼這個文件夾就稱之爲包
2.有效避免模塊名稱衝突問題,讓應用組織結構更加清晰
imp.reload()簡介
默認情況下,模塊在第一次被導入之後,其他的導入都不再有效。如果此時在另一個窗口中改變並保存了模塊的源代碼文件,也無法更新該模塊。這樣設計原因在於,導入是一個開銷很大的操作(導入必須找到文件,將其編譯成字節碼,並且運行代碼),以至於每個文件、每個程序運行不能夠重複多於一次。
當一個模塊被導入到一個腳本,模塊頂層部分的代碼只會被執行一次。因此,如果你想重新執行模塊裏頂層部分的代碼,可以用reload()函數。該函數會重新導入之前導入過的模塊。
語法如下:
reload(module_name)