python自學篇十一[ 模塊簡介+模塊製作+dir()函數+標準模塊+包]

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標準模塊庫目錄
文本
  1. string:通用字符串操作

  2. re:正則表達式操作

  3. difflib:差異計算工具

  4. textwrap:文本填充

  5. unicodedata:Unicode字符數據庫

  6. stringprep:互聯網字符串準備工具

  7. readline:GNU按行讀取接口

  8. rlcompleter:GNU按行讀取的實現函數

二進制數據
  1. struct:將字節解析爲打包的二進制數據

  2. codecs:註冊表與基類的編解碼器

數據類型
  1. datetime:基於日期與時間工具

  2. calendar:通用月份函數

  3. collections:容器數據類型

  4. collections.abc:容器虛基類

  5. heapq:堆隊列算法

  6. bisect:數組二分算法

  7. array:高效數值數組

  8. weakref:弱引用

  9. types:內置類型的動態創建與命名

  10. copy:淺拷貝與深拷貝

  11. pprint:格式化輸出

  12. reprlib:交替repr()的實現

數學
  1. numbers:數值的虛基類

  2. math:數學函數

  3. cmath:複數的數學函數

  4. decimal:定點數與浮點數計算

  5. fractions:有理數

  6. random:生成僞隨機數

函數式編程
  1. itertools:爲高效循環生成迭代器

  2. functools:可調用對象上的高階函數與操作

  3. operator:針對函數的標準操作

文件與目錄
  1. os.path:通用路徑名控制

  2. fileinput:從多輸入流中遍歷行

  3. stat:解釋stat()的結果

  4. filecmp:文件與目錄的比較函數

  5. tempfile:生成臨時文件與目錄

  6. glob:Unix風格路徑名格式的擴展

  7. fnmatch:Unix風格路徑名格式的比對

  8. linecache:文本行的隨機存儲

  9. shutil:高級文件操作

  10. macpath:Mac OS 9路徑控制函數

持久化
  1. pickle:Python對象序列化

  2. copyreg:註冊機對pickle的支持函數

  3. shelve:Python對象持久化

  4. marshal:內部Python對象序列化

  5. dbm:Unix“數據庫”接口

  6. sqlite3:針對SQLite數據庫的API 2.0

壓縮
  1. zlib:兼容gzip的壓縮

  2. gzip:對gzip文件的支持

  3. bz2:對bzip2壓縮的支持

  4. lzma:使用LZMA算法的壓縮

  5. zipfile:操作ZIP存檔

  6. tarfile:讀寫tar存檔文件

文件格式化
  1. csv:讀寫CSV文件

  2. configparser:配置文件解析器

  3. netrc:netrc文件處理器

  4. xdrlib:XDR數據編碼與解碼

  5. plistlib:生成和解析Mac OS X .plist文件

加密
  1. hashlib:安全散列與消息摘要

  2. hmac:針對消息認證的鍵散列

操作系統工具
  1. os:多方面的操作系統接口

  2. io:流核心工具

  3. time:時間的查詢與轉化

  4. argparser:命令行選項、參數和子命令的解析器

  5. optparser:命令行選項解析器

  6. getopt:C風格的命令行選項解析器

  7. logging:Python日誌工具

  8. logging.config:日誌配置

  9. logging.handlers:日誌處理器

  10. getpass:簡易密碼輸入

  11. curses:字符顯示的終端處理

  12. curses.textpad:curses程序的文本輸入域

  13. curses.ascii:ASCII字符集工具

  14. curses.panel:curses的控件棧擴展

  15. platform:訪問底層平臺認證數據

  16. errno:標準錯誤記號

  17. ctypes:Python外部函數庫

併發
  1. threading:基於線程的並行

  2. multiprocessing:基於進程的並行

  3. concurrent:併發包

  4. concurrent.futures:啓動並行任務

  5. subprocess:子進程管理

  6. sched:事件調度

  7. queue:同步隊列

  8. select:等待I/O完成

  9. dummy_threading:threading模塊的替代(當_thread不可用時)

  10. _thread:底層的線程API(threading基於其上)

  11. _dummy_thread:_thread模塊的替代(當_thread不可用時)

進程間通信
  1. socket:底層網絡接口

  2. ssl:socket對象的TLS/SSL填充器

  3. asyncore:異步套接字處理器

  4. asynchat:異步套接字命令/響應處理器

  5. signal:異步事務信號處理器

  6. mmap:內存映射文件支持

互聯網
  1. email:郵件與MIME處理包

  2. json:JSON編碼與解碼

  3. mailcap:mailcap文件處理

  4. mailbox:多種格式控制郵箱

  5. mimetypes:文件名與MIME類型映射

  6. base64:RFC 3548:Base16、Base32、Base64編碼

  7. binhex:binhex4文件編碼與解碼

  8. binascii:二進制碼與ASCII碼間的轉化

  9. quopri:MIME quoted-printable數據的編碼與解碼

  10. uu:uuencode文件的編碼與解碼

HTML與XML
  1. html:HTML支持

  2. html.parser:簡單HTML與XHTML解析器

  3. html.entities:HTML通用實體的定義

  4. xml:XML處理模塊

  5. xml.etree.ElementTree:樹形XML元素API

  6. xml.dom:XML DOM API

  7. xml.dom.minidom:XML DOM最小生成樹

  8. xml.dom.pulldom:構建部分DOM樹的支持

  9. xml.sax:SAX2解析的支持

  10. xml.sax.handler:SAX處理器基類

  11. xml.sax.saxutils:SAX工具

  12. xml.sax.xmlreader:SAX解析器接口

  13. xml.parsers.expat:運用Expat快速解析XML

互聯網協議與支持
  1. webbrowser:簡易Web瀏覽器控制器

  2. cgi:CGI支持

  3. cgitb:CGI腳本反向追蹤管理器

  4. wsgiref:WSGI工具與引用實現

  5. urllib:URL處理模塊

  6. urllib.request:打開URL連接的擴展庫

  7. urllib.response:urllib模塊的響應類

  8. urllib.parse:將URL解析成組件

  9. urllib.error:urllib.request引發的異常類

  10. urllib.robotparser:robots.txt的解析器

  11. http:HTTP模塊

  12. http.client:HTTP協議客戶端

  13. ftplib:FTP協議客戶端

  14. poplib:POP協議客戶端

  15. imaplib:IMAP4協議客戶端

  16. nntplib:NNTP協議客戶端

  17. smtplib:SMTP協議客戶端

  18. smtpd:SMTP服務器

  19. telnetlib:Telnet客戶端

  20. uuid:RFC4122的UUID對象

  21. socketserver:網絡服務器框架

  22. http.server:HTTP服務器

  23. http.cookies:HTTPCookie狀態管理器

  24. http.cookiejar:HTTP客戶端的Cookie處理

  25. xmlrpc:XML-RPC服務器和客戶端模塊

  26. xmlrpc.client:XML-RPC客戶端訪問

  27. xmlrpc.server:XML-RPC服務器基礎

  28. ipaddress:IPv4/IPv6控制庫

多媒體
  1. audioop:處理原始音頻數據

  2. aifc:讀寫AIFF和AIFC文件

  3. sunau:讀寫Sun AU文件

  4. wave:讀寫WAV文件

  5. chunk:讀取IFF大文件

  6. colorsys:顏色系統間轉化

  7. imghdr:指定圖像類型

  8. sndhdr:指定聲音文件類型

  9. ossaudiodev:訪問兼容OSS的音頻設備

國際化
  1. gettext:多語言的國際化服務

  2. locale:國際化服務

編程框架
  1. turtle:Turtle圖形庫

  2. cmd:基於行的命令解釋器支持

  3. shlex:簡單詞典分析

Tk圖形用戶接口
  1. tkinter:Tcl/Tk接口

  2. tkinter.ttk:Tk主題控件

  3. tkinter.tix:Tk擴展控件

  4. tkinter.scrolledtext:滾軸文本控件

開發工具
  1. pydoc:文檔生成器和在線幫助系統

  2. doctest:交互式Python示例

  3. unittest:單元測試框架

  4. unittest.mock:模擬對象庫

  5. test:Python迴歸測試包

  6. test.support:Python測試工具套件

  7. venv:虛擬環境搭建

調試
  1. bdb:調試框架

  2. faulthandler:Python反向追蹤庫

  3. pdb:Python調試器

  4. timeit:小段代碼執行時間測算

  5. trace:Python執行狀態追蹤

運行時
  1. sys:系統相關的參數與函數

  2. sysconfig:訪問Python配置信息

  3. builtins:內置對象

  4. main:頂層腳本環境

  5. warnings:警告控制

  6. contextlib:with狀態的上下文工具

  7. abc:虛基類

  8. atexit:出口處理器

  9. traceback:打印或讀取一條棧的反向追蹤

  10. future:未來狀態定義

  11. gc:垃圾回收接口

  12. inspect:檢查存活的對象

  13. site:址相關的配置鉤子(hook)

  14. fpectl:浮點數異常控制

  15. distutils:生成和安裝Python模塊

解釋器
  1. code:基類解釋器

  2. codeop:編譯Python代碼

導入模塊
  1. imp:訪問import模塊的內部

  2. zipimport:從ZIP歸檔中導入模塊

  3. pkgutil:包擴展工具

  4. modulefinder:通過腳本查找模塊

  5. runpy:定位並執行Python模塊

  6. importlib:import的一種實施

Python語言
  1. parser:訪問Python解析樹

  2. ast:抽象句法樹

  3. symtable:訪問編譯器符號表

  4. symbol:Python解析樹中的常量

  5. token:Python解析樹中的常量

  6. keyword:Python關鍵字測試

  7. tokenize:Python源文件分詞

  8. tabnany:模糊縮進檢測

  9. pyclbr:Python類瀏覽支持

  10. py_compile:編譯Python源文件

  11. compileall:按字節編譯Python庫

  12. dis:Python字節碼的反彙編器

  13. pickletools:序列化開發工具

其它
  1. formatter:通用格式化輸出
Windows相關
  1. msilib:讀寫Windows Installer文件

  2. msvcrt:MS VC++ Runtime的有用程序

  3. winreg:Windows註冊表訪問

  4. winsound:Windows聲音播放接口

Unix相關
  1. posix:最常用的POSIX調用

  2. pwd:密碼數據庫

  3. spwd:影子密碼數據庫

  4. grp:組數據庫

  5. crypt:Unix密碼驗證

  6. termios:POSIX風格的tty控制

  7. tty:終端控制函數

  8. pty:僞終端工具

  9. fcntl:系統調用fcntl()和ioctl()

  10. pipes:shell管道接口

  11. resource:資源可用信息

  12. nis:Sun的NIS的接口

  13. 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)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章