淺談python模組的匯入操作
1.什麼是模組
在Python中有一個概念叫做模組(module).
所謂模組,就是將程式碼量較大的程式分割成多個有組織的,彼此獨立但雙能互相互動的程式碼片段,
這些自我包含的有組織的程式碼段就是模組。
2.模組的特點
python中的模組有以下特點:
1.python中,一切皆物件,模組也是物件
2.模組在物理形式上表現為以.py結尾的程式碼檔案。
3.一個模組也可以被看作是一個檔案,一個檔案也可以被當作一個獨立的模組被別的程式匯入呼叫。
4.模組的檔名就是模組的名字加上副檔名.py
5.每個模組都有自己的名稱空間
python允許”匯入”其它的模組以實現程式碼重用,從而也實現了將獨立的程式碼檔案組織成
更大的程式系統的作用。一個模組在被匯入後,在一個模組的頂層定義的所有變數都在
被匯入時成為了被匯入模組的屬性
python中的每一個模組就是一個名稱空。一個模組的名稱空間可以通過dict 或
dir(M)獲取,模組屬性可以通過點號(.)運算子獲取,格式為M.attr,並且每
個模組都是一個獨立的作用域(本地變數就是全域性變數)。
3.python程式的組成
一個python程式通常包括一個頂層程式檔案和其它的模組檔案:
頂層檔案:包含了程式的主要控制流程
模組檔案:為頂層檔案或其它模組提供各種功能性元件
模組首次匯入(或過載)時,python會立即執行模組檔案的頂層程式程式碼(也即不在函式內的程式碼),而位於函式主體內的直到函式被呼叫後才會執行
4.模組的執行環境
模組是被匯入的,但模組內部也可以匯入和使用其它模組,這些模組可以用python或其它程式語言寫成
模組可內含變數,函式以及類來進行工作,而函式和類可以包含變數和其它元素
5.模組的匯入
在匯入模組時只能使用模組名,而不能使用帶.py字尾的模組檔名
在python直譯器下,輸入
help("modules")
命令可以列出系統上已經安裝的所有的模組
>>> help("modules")
Please wait a moment while I gather a list of all available modules...
CDROM atexit importlib select
DLFCN attr incremental selectors
IN audioop inspect setuptools
IPython automat io shelve
TYPES autoreload ipaddress shlex
__future__ base64 ipython_genutils shutil
_ast bdb itertools signal
_bisect binascii jedi simplegeneric
_bootlocale binhex json site
_bz2 bisect keyword six
_codecs builtins lib2to3 smtpd
_codecs_cn bz2 linecache smtplib
_codecs_hk cProfile locale sndhdr
_codecs_iso2022 calendar logging socket
_codecs_jp cgi lzma socketserver
_codecs_kr cgitb macpath spwd
_codecs_tw chunk macurl2path sqlite3
_collections class mailbox sre_compile
_collections_abc cmath mailcap sre_constants
_compat_pickle cmd marshal sre_parse
_compression code math ssl
_crypt codecs mimetypes stat
_csv codeop mmap statistics
_ctypes collections modulefinder storemagic
_curses colorsys multiprocessing string
_curses_panel compileall netrc stringprep
_datetime concurrent nis struct
_dbm configparser nntplib subprocess
_decimal constantly ntpath sunau
_dummy_thread contextlib nturl2path symbol
_elementtree copy numbers sympyprinting
_functools copyreg numpy symtable
_gdbm crypt opcode sys
_hashlib csv operator sysconfig
_heapq ctypes optparse syslog
_imp curses os tabnanny
_io cythonmagic ossaudiodev tarfile
_json datetime packaging telnetlib
_locale dbm parser tempfile
_lsprof decimal pathlib termios
_lzma decorator pdb test
_markupbase difflib pexpect tests
_multibytecodec dis pickle textwrap
_multiprocessing distutils pickleshare this
_opcode django pickletools threading
_operator doctest pip time
_osx_support dummy_threading pipes timeit
_pickle easy_install pkg_resources token
_posixsubprocess else_exp pkgutil tokenize
_pydecimal email platform tornado
_pyio encodings plistlib trace
_random ensurepip poplib traceback
_signal enum posix tracemalloc
_sitebuiltins errno posixpath traitlets
_socket exampleproj pprint tty
_sqlite3 faulthandler profile twisted
_sre fcntl prompt_toolkit types
_ssl filecmp pstats typing
_stat fileinput psutil unicodedata
_string fnmatch pty unittest
_strptime formatter ptyprocess urllib
_struct fractions pwd uu
_symtable ftplib py_compile uuid
_sysconfigdata functools pyclbr venv
_testmultiphase gc pydoc virtualenv
_thread genericpath pydoc_data virtualenv_support
_threading_local getopt pyexpat warnings
_tracemalloc getpass pygments wave
_warnings gettext pyparsing wcwidth
_weakref glob pytz weakref
_weakrefset grp queue webbrowser
abc gzip quopri wsgiref
aifc hashlib random xdrlib
antigravity heapq re xml
appdirs hmac readline xmlrpc
argparse html reprlib xxlimited
array http resource xxsubtype
ast idlelib rlcompleter zipapp
asynchat imaplib rmagic zipfile
asyncio imghdr runpy zipimport
asyncore imp sched zlib
使用import語句可以匯入一個或多個指定的模組,但是建議一個import語句只匯入一個模組
語法:
import module1[,module2[,....moduleN]]
如果被匯入的模組名字太長時,可以為被匯入的模組設定一個別名,但是要注意所起的別名不要與系統或者是自己設定的變數重名
語法:
import module as module_alias
使用from-import語句只匯入指定模組的部分屬性至當前名稱空間
語法:
from module import name1[,name2[,....nameN]]
import語句和from-import語句的不同點:
1.import和from-import都是賦值語句,
import和from是可執行語句,類似於def,因此可以巢狀在if測試中,出現於def中等等,python執行到這些語句時才會對其進行解析,這樣所有來自模組的屬性僅在import語句執行後才能使用
2.import和from都是隱性賦值語句
import將整個模組物件賦值給一個變數名
from將一個或多個變數名賦值給匯入此模組的模組中的同名物件
6.import的工作機制
import語句匯入指定的模組時會執行三個步驟
1.在指定路徑下搜尋模組檔案,找到模組檔案
2.指定的模組在被匯入時就會被編譯成位元組碼,即編譯成.pyc檔案
3.依靠模組的程式碼中的定義來建立其所定義的物件,模組檔案中的所的語句會依次執行,從頭至尾,而此步驟中任何對變數名的賦值運算,都會產生所得到的模組檔案的屬性
但是請注意:模組只在第一次匯入時才會執行如上步驟,後續的匯入操作只不過是提取記憶體中已載入的模組物件
可以使用reload()命令重新載入指定的模組
7.模組搜尋
python直譯器在import模組時查詢模組的順序:
1.程式的主目錄,
2.python的PATH目錄(如果設定了此變數)
可以使用以下命令檢視python的PATH目錄:
>>> import sys
>>> sys.path
3.標準連結庫目錄,就是python安裝目錄下的lib資料夾這個目錄
4.任何.pth檔案的內容(如果存在.pth檔案)
這四個元件組合起來即為sys.path所包含的路徑,而python會選擇在搜尋路徑中的第一個符合匯入檔名的檔案
相關文章
- Python 模組匯入方式Python
- python之匯入模組的方法Python
- 淺談模組化
- python如何匯入自定義模組Python
- python3匯入paramiko模組Python
- 淺談前端模組化前端
- Python種匯入模組的三種方式總結Python
- 【python3】匯入zip 檔案裡的模組Python
- Python中匯入模組或包語句Python
- ES模組化的匯入和匯出
- 淺談模組化開發
- 「Python實用秘技12」像匯入模組一樣匯入ipynb檔案Python
- es6模組化的匯入匯出
- Python學習筆記_函式_匯入模組Python筆記函式
- python中如何新增模組匯入路徑?Python
- py模組匯入示例
- 模組匯入小結
- Python:檢視已安裝模組 和 檢視可匯入模組Python
- Java API 操作Docker淺談JavaAPIDocker
- Python中匯入模組中的物件常見的三種方式!Python物件
- Python程式設計時候,匯入模組失敗Python程式設計
- 淺談 Python 的 with 語句Python
- Java進行excel的匯入匯出操作JavaExcel
- Python集合淺談Python
- tsc、babel、webpack對模組匯入匯出的處理BabelWeb
- 淺談Node.js中ES6匯入語法的使用方法Node.js
- Python中使用語句匯入模組或包的機制研究Python
- 轉java操作excel匯入匯出JavaExcel
- Python之外掛模式(使用import_module匯入子模組)Python模式Import
- VSCode中解決python模組匯入問題VSCodePython
- Python培訓教程分享:Python模組如何匯入__all__屬性?Python
- Django之模組的繼承和匯入Django繼承
- 【Python】淺談python中的jsonPythonJSON
- python 入門學習---模組匯入三種方式及中文註釋Python
- 淺談Abp vNext的模組化設計
- 淺談自動化測試功能模組的分解
- 淺談python中的xpath用法Python
- go 語言模組匯入importGoImport