Python包和模块的导入 - QLGQ/learning-python GitHub Wiki

模块和命名空间

一般来说,Python程序往往由多个模块文件构成,通过import语句连接在一起。每个模块文件是一个独立完备的变量包,即一个命名空间。一个模块文件不能看到其他文件定义的变量名,除非它显示地导入了那个文件,所以模块文件在代码文件中起到了最小化命名冲突的作用。因为每个文件都是一个独立完备的命名空间,即使在他们拼写相同的情况下,一个文件的变量名是不会与另一个文件中的变量冲突的。

注意:import VS from:应该指出,from语句在某种意义上战胜了模块的名称空间分割的目的,因为from把变量从一个文件复制到另一个文件,这可能导致在导入的文件中相同名称的变量被覆盖(并且,如果发生这种情况的话,不会为你给出警告)。这根本上会导致名称空间重叠到一起,至少在复制的变量上会重叠。

模块和包

模块:用来从逻辑上组织Python代码(变量,函数,类,逻辑:实现一个功能),本质就是.py结尾的Python文件(文件名:test.py,对应的模块名:test)。
:用来从逻辑上组织模块的,本质就是一个目录(必须带有一个__init__.py文件)。
模块的分类: * 内置模块 * 自定义模块 * 第三方模块(需要安装才能使用)

注意:Python中的模块,在其他语言中叫做类库。

模块和包导入的方式

导入模块中函数的方式

  1. import 模块名
    • 使用时:模块名.函数名()
  2. from 模块名 import 函数名
    • 使用时:函数名()
  3. from 模块名 import *
    • 使用时:函数名()
  4. from 模块名 import 函数名 as 新函数名(自定义)
    • 使用时: 新函数名() # 原来的函数名将失效

可以在模块中定义一个变量__all__:
使用__all__的影响:后面的[]里面写什么函数名,使用from 模块名 import *方式导入时导入什么,如果没有定义__all__这个变量,将全部导入。(__all__仅限于from 模块名 import *这种导入方式)

导入包中函数以及模块的方式

  1. from 包名 import 模块名
    • 使用时:模块名.函数名()
  2. from 包名.模块名 import 函数名
    • 使用时:函数名()
  3. import 包名.模块名
    • 使用时:包名.模块名.函数名()
  4. from 包名 import *
    • 前提是:将__init__文件中写入__all__变量(写入方式同模块导入的写入方式),变量当中写入哪个模块则导入哪个模块,不写则什么都不会导入。
    • 使用时:模块名.函数名()
  5. import 包名
    • 前提是:在包里面的__init__.py文件里写入from . import 模块名,__init__.py里面导入哪个模块,通过本方式就能使用哪个模块。
    • 使用时:模块名.函数名()
  6. import 包名
    • Python2当中可以在__init__.py文件中写入import 模块名,通过 import 包名 就可以导入__init__.py文件中写入的那个模块名。(此方法仅限于Python2)
    • 使用时4:模块名.函数名()

目录

  • .:代表当前目录
    • from . import 模块名 代表的意思是:从当前目录中导入模块
    • from .模块名 import 函数名 代表的意思是:从当前目录中的模块中导入函数
  • ..:代表父目录
  • /:代表根目录