Python模块导入的相关介绍

发布时间:2023年12月22日

浅谈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会选择在搜索路径中的第一个符合导入文件名的文件。

文章来源:https://blog.csdn.net/hakesashou/article/details/135160121
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。