有两个文件,file1为 1.py,file2为module.py
1.py:
import module module.read2()
module.py
print('Helloworld') def read2(): print('in module')
在1.py中运行,结果为
Helloworld in module
如果更改1.py,如
import module import module import module import module
运行结果为:
Helloworld
所有的模块导入都应该往程序往上面写, 先内置模块,后扩展模块,最后自定义模块
一个模块被导入为什么不会多次重复?
1. 先从sys.modules里查看是否已经被导入 (因为在里面已经有了,所以就不会继续导入)
2. 如果没有被导入,就依据sys.path路径去寻找模块 如果找到了就导入
3. 创建这个模块的命名空间
4. 执行文件, 把文件中的名字都放到命名空间里面
形式:
import 模块名
1. 模块名.变量名 和本文件中的变量名完全不冲突
2. 模块不会重复被导入
import 模块名 as 重命名的模块名
1.提高代码兼容性
from 模块名 import 变量名
1. 直接使用变量名就可以完成操作
2. 如果本文件中有相同的变量名会发生冲突
from 模块名 import 变量名 as 重命名的变量名
from 模块名 import 变量名1,变量名2,.....
from 模块名 import *
1. 将模块中所有变量名都放入内存
2. 如果本文件中有相同的变量名会发生冲突
from 模块名 import * 和__all__ 是一对
1. 如果没有 __all__就会导入所有的名字
2. 如果有__all__,只导入列表中的名字(只能约束该导入形式)
module.py
__all__ = ['s','read2']
s = 'Helloworld'
print(s)
def read2():
print('in module read2')
def read3():
return 'in module read3'
如果在别的文件中调用module,调用read3()会报错:NameError: name 'read3' is not defined
但是依然可以使用module.read3()来获得返回值并打印