Python import 过程解析
● 模块与包
模块:一个.py文件
包:一个文件夹,里面一定包括一个__init__.py文件,可能包括子包和模块
● import module
# module.py
a = 1
print('module.py')
# test.py
import module
print(module.a)
执行test.py,运行结果:
module.py
1
结论:import module 即运行模块里的全部代码
● from module import var/class
# module.py
a = 1
print(module.py)
class c:
def __init__(self):
print('class init')
# test.py
from module import a
print(a)
from module import c
c()
执行test.py,运行结果:
1
class init
结论:from module import var/class 就是从模块里单独引入一个变量/类,而不执行模块内其他语句
● import package
# package/module.py
a = 1
print('module.py')
class c:
def __init__(self):
print('class init')
# package/__init__.py
print('__init__.py')
var_in_init = 2
# test.py
import package
print(package.var_in_init)
执行test.py,运行结果:
__init__.py
2
结论:import package 就相当于引入包内的__init__模块
● from package import module
# package/module.py
a = 1
print('module.py')
class c:
def __init__(self):
print('class init')
# package/__init__.py
print('__init__.py')
var_in_init = 2
# test.py
from package import module
print(module.a)
module.c()
执行test.py,运行结果:
module.py
1
class init
结论:from package import module 相当于上面说的引入模块
● from package(.sub_package).module import var/class
# package/module.py
a = 1
print('module.py')
class c:
def __init__(self):
print('class init')
# package/__init__.py
print('__init__.py')
var_in_init = 2
# test.py
from package.module import a
print(a)
from package.module import c
c()
执行test.py,运行结果:
1
class init
结论:from package(.sub_package).module import var/class 就相当于上面说的 from module import var/class
● 错误用法
经过测试,以下语句执行时会发生错误:
import package; print(package.module.var/class)