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模块的导入操作的更多相关文章

  1. 浅谈Python时间模块

    浅谈Python时间模块 今天简单总结了一下Python处理时间和日期方面的模块,主要就是datetime.time.calendar三个模块的使用.希望这篇文章对于学习Python的朋友们有所帮助 ...

  2. 浅谈Python在信息学竞赛中的运用及Python的基本用法

    浅谈Python在信息学竞赛中的运用及Python的基本用法 前言 众所周知,Python是一种非常实用的语言.但是由于其运算时的低效和解释型编译,在信息学竞赛中并不用于完成算法程序.但正如LRJ在& ...

  3. 开发技术--浅谈python数据类型

    开发|浅谈python数据类型 在回顾Python基础的时候,遇到最大的问题就是内容很多,而我的目的是回顾自己之前学习的内容,进行相应的总结,所以我就不玩基础了,很多在我实际生活中使用的东西,我会在文 ...

  4. 【ASP.NET MVC系列】浅谈Google Chrome浏览器(操作篇)(下)

    ASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作 ...

  5. 浅谈splay(点的操作)

    浅谈splay(点的操作) 一.基本概念 splay本质:二叉查找树 特点:结点x的左子树权值都小于x的权值,右子树权值都大于x的权值 维护信息: 整棵树:root 当前根节点  sz书上所有结点编号 ...

  6. 浅谈python字符串存储形式

    http://blog.csdn.net/zhonghuan1992 钟桓 2014年8月31日 浅谈python字符串存储形式 记录一下自己今的天发现疑问而且给出自己现有知识有的回答. 长话短说,用 ...

  7. 开发技术--浅谈Python函数

    开发|浅谈Python函数 函数在实际使用中有很多不一样的小九九,我将从最基础的函数内容,延伸出函数的高级用法.此文非科普片~~ 前言 目前所有的文章思想格式都是:知识+情感. 知识:对于所有的知识点 ...

  8. 开发技术--浅谈python基础知识

    开发|浅谈python基础知识 最近复习一些基础内容,故将Python的基础进行了总结.注意:这篇文章只列出来我觉得重点,并且需要记忆的知识. 前言 目前所有的文章思想格式都是:知识+情感. 知识:对 ...

  9. 11、python模块的导入

    前言:本文主要介绍python模块的导入,包括模块的定义.模块的作用.导入方式以及模块的搜索路径. 一.模块的定义 python模块(module),简单来说就是一个python文件,以.py结尾,文 ...

随机推荐

  1. CTF---密码学入门第四题 困在栅栏里的凯撒

    困在栅栏里的凯撒分值:10 来源: 北邮天枢战队 难度:易 参与人数:4531人 Get Flag:2124人 答题人数:2285人 解题通过率:93% 小白发现了一段很6的字符:NlEyQd{sef ...

  2. hdu_1573 X问题(不互素的中国剩余定理)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1573 X问题 Time Limit: 1000/1000 MS (Java/Others)    Me ...

  3. 阻止安卓实体返回键后退的网页js实现

    提供两种解决方法吧,都是网上来的,侵权删,毕竟我等只是搞后端的-- 第一种方法: // 阻止安卓实体键后退 // 页面载入时使用pushState插入一条历史记录 history.pushState( ...

  4. 关于STM32驱动DS1302实时时钟的一点思考

    之前用51驱动过DS1302,没用多久就输出了正确的时间.当时以为这块芯片其实没啥,很简单.但是现在用STM32做项目,用到同样的芯片,以为这有何难,只要把那个程序拿过来复制黏贴改一下IO设置不就行了 ...

  5. Angular 4+ HttpClient

    个人博客迁移至 http://www.sulishibaobei.com  处: 这篇,算是上一篇Angular 4+ Http的后续: Angular 4.3.0-rc.0 版本已经发布

  6. Java并发编程:Thread类的使用(转载)

    一:线程的状态: 在正式学习Thread类中的具体方法之前,我们先来了解一下线程有哪些状态,这个将会有助于后面对Thread类中的方法的理解. 线程从创建到最终的消亡,要经历若干个状态.一般来说,线程 ...

  7. 基础数据类型的补充和深浅copy

    一:关于str 的操作方法补充 1,s.isspace()   判断字符串是否只由空格组成,是,为True,否则,为False. s = ' ' #只能是以至少一个空格组成的字符串(全空格) prin ...

  8. Linux - ubuntu vMwareTools安装

    ubuntu vMwareTools安装 不安装很麻烦,虚拟机中的内容,包括文件.无法复制到pc端.同样的pc端的内容也无法复制到虚拟机中. 1.点击虚拟机,选择安装VMwareTools 这个时候就 ...

  9. linux 动态库的符号冲突问题

    最近,给同事定位了一个符号表的冲突问题,简单记录一下. A代码作为静态链接库,被包含进了B代码,然后编译成了动态链接库,B.so A代码同时作为静态链接库,被编译进入了main的主代码. main函数 ...

  10. C语言知识点总结

    本文采用思维导图的方式撰写,更好的表述了各知识点之间的关系,方便大家理解和记忆.这个总结尚未包含C语言数据结构与算法部分,后续会陆续更新出来,文中有漏掉的知识点,还请大家多多指正.