淺談python模塊的導入操做

 

 

1.什麼是模塊

在Python中有一個概念叫作模塊(module).
所謂模塊,就是將代碼量較大的程序分割成多個有組織的,彼此獨立但雙能互相交互的代碼片斷,
這些自我包含的有組織的代碼段就是模塊。javascript

2.模塊的特色

python中的模塊有如下特色:css

1.python中,一切皆對象,模塊也是對象 2.模塊在物理形式上表現爲以.py結尾的代碼文件。 3.一個模塊也能夠被看做是一個文件,一個文件也能夠被看成一個獨立的模塊被別的程序導入調用。 4.模塊的文件名就是模塊的名字加上擴展名.py 5.每一個模塊都有本身的名稱空間

python容許"導入"其它的模塊以實現代碼重用,從而也實現了將獨立的代碼文件組織成
更大的程序系統的做用。一個模塊在被導入後,在一個模塊的頂層定義的全部變量都在
被導入時成爲了被導入模塊的屬性html

python中的每個模塊就是一個名稱空。一個模塊的名稱空間能夠經過dict 或
dir(M)獲取,模塊屬性能夠經過點號(.)運算符獲取,格式爲M.attr,而且每
個模塊都是一個獨立的做用域(本地變量就是全局變量)。java

3.python程序的組成

一個python程序一般包括一個頂層程序文件和其它的模塊文件:python

頂層文件:包含了程序的主要控制流程
    模塊文件:爲頂層文件或其它模塊提供各類功能性組件

模塊首次導入(或重載)時,python會當即執行模塊文件的頂層程序代碼(也即不在函數內的代碼),而位於函數主體內的直到函數被調用後纔會執行ios

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語句只導入一個模塊git

語法:web

import module1[,module2[,....moduleN]]

若是被導入的模塊名字太長時,能夠爲被導入的模塊設定一個別名,可是要注意所起的別名不要與系統或者是本身設定的變量重名sql

語法:django

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會選擇在搜索路徑中的第一個符合導入文件名的文件
相關文章
相關標籤/搜索