1、什么是模块?
常见的场景: 一个模块就是一个包含了一组功能的集合体,比如spam.py(任意的名字,但是前提是不要和内置函数一样),模块名为spam,可以通过import spam使用。 在python中,模块的使用方式都是一样的,但其实细说的话,模块可以分为四个通用类别: 1、使用python编写的.py文件 2、已被编译为共享库或DLL的C或C++扩展 3、把一系列模块组织到一起的文件夹(注:文件夹下有一个__init__.py文件,该文件夹称之为包) 4、使用C编写并链接到python解释器的内置模块2、为何要使用模块?
1、从文件级别组织程序,更方便管理
2、拿来主义,提升开发效率
1、import的使用
模块可以包含可执行的语句和函数的定义,这些语句的目的是初始化模块,它们只在模块名第一次遇到导入import语句时才执行
import语句是可以在程序中的任意位置使用的,且针对同一个模块很import多次,为了防止你重复导入,
python的优化手段是:第一次导入后就将模块名加载到内存了,后续的import语句仅是对已经加载到内存中的模块对象增加了一次引用,不会重新执行模块内的语句)
2、在第一次导入模块时会做三件事,重复导入会直接引用内存中已经加载好的结果
1、为源文件创建新的名称空间
2、执行模块对应文件,将产生的名字存放于1中的名称空间
3、在当前执行文件中拿到一个模块名,该模块名指向1的名称空间
3、被导入模块有独立的名称空间
每个模块都是一个独立的名称空间,定义在这个模块中的函数,把这个模块的名称空间当做全局名称空间,
这样我们在编写自己的模块时,就不用担心我们定义在自己模块中全局变量会在被导入时,与使用者的全局变量冲突
4、为模块名起别名
为已经导入的模块起别名的方式对编写可扩展的代码很有用,在被导入函数后加as再加上新起的别名
1、from...import...的使用
from 模块名字 import 具体的函数名,或者变量名字2、from...import 与import的对比
唯一的区别就是:使用from...import...则是将spam中的名字直接导入到当前的名称空间中,所以在当前名称空间中,直接使用名字就可以了、无需加前缀:spam. from...import...的方式有好处也有坏处 好处:使用起来方便了 坏处:容易与当前执行文件中的名字冲突3、也支持as,一行导入多个名字跟上一样
4、from...import *
#from 模块名字 import * 把模块中所有的不是以下划线(_)开头的名字都导入到当前位置 #大部分情况下我们的python程序不应该使用这种导入方式,因为*你不知道你导入什么名字,很有可能会覆盖掉你之前已经定义的名字。而且可读性极其的差,在交互式环境中导入时没有问题。可以使用__all__来控制*(用来发布新版本)
__all__=[常用的函数名] #你自己的模块方法,想规定别人导入多少,就可以导入多少模块的查找顺序是:内存中已经加载的模块->内置模块->sys.path路径中包含的模块
官网解释:
#官网链接:https://docs.python.org/3/tutorial/modules.html#the-module-search-path 搜索路径: 当模块被导入时 解释器首先会从内建模块中寻找该名字 找不到,则去sys.path中找该名字 sys.path从以下位置初始化 1 执行文件所在的当前目录 2 PTYHONPATH(包含一系列目录名,与shell变量PATH语法一样) 3 依赖安装时默认指定的 注意:在支持软连接的文件系统中,执行脚本所在的目录是在软连接之后被计算的,换句话说,包含软连接的目录不会被添加到模块的搜索路径中 在初始化后,我们也可以在python程序中修改sys.path,执行文件所在的路径默认是sys.path的第一个目录,在所有标准库路径的前面。这意味着,当前目录是优先于标准库目录的,需要强调的是:我们自定义的模块名不要跟python标准库的模块名重复。转载于:https://www.cnblogs.com/ManyQian/p/8709699.html
相关资源:JAVA上百实例源码以及开源项目