1
import my_module
  1. 寻找my_module.py文件
  2. 将my_module.py文件执行后放进缓存中,形成一个命名空间,并在主程序中生成一个变量命名为my_module,指向该命名空间
  3. 然后就能通过命名空间的方式使用里面的变量、函数或者类

import01

import00

1
from my_module import test1
  1. 运行my_module.py文件
  2. 从my_module.py文件里导入函数test1(),赋值给变量test1
  3. 但是my_module的命名空间并不会生成,也就没有my_module变量

import02

import03

1
import package

首先,package即包是一种特殊的模块,在进行导入时

  1. 搜索是否有__init__.py文件
  2. 如果有,将该文件运行后生成有关该文件的命名空间,然后以package命名一个module变量指向这个命名空间,这个命名空间中不会有任何该包下的模块信息,也就是module1和module2,如果涉及这两个,程序会报错,找不到这两个变量
  3. 如果没有,那就啥事没有

import04

import05

import06

1
import package.module1
  1. 运行__init__.py和该包下的module1.py文件后生成2个命名空间
  2. 由package做为主程序的变量指向__init__.py所生成的命名空间,而在init生成的命名空间中会多出一个module1变量,指向module1.py生成的命名空间

import08

import07

1
from package import module1
  1. 运行init.py文件和module1.py文件,但是只生成一个由module1.py组成的命名空间
  2. 在主程序也只会有生成一个module1变量指向module1.py生成的命名空间
  3. 并不会有package变量的命名空间

import09

import10

1
from package.module1 import test
  1. 运行init.py和module1.py文件后不生成命名空间
  2. 将module1.py里的test()函数导入后生成test变量来指向这个函数

import11

总结:导入包或者模块,执行文件后生成module变量指向命名空间

导入变量、函数、或者类执行文件后会直接生成对应的变量

关于as

1
import module as m

就是将导入的变量换个名称,比如将module变量改名为m,指向的对象还是一样的

不过

1
import package.module1 as m

会直接将m指向package.module1所指向的命名空间,并不会生成init.py的空间,也就不会有package变量