模块导入

有两个文件,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()来获得返回值并打印

posted on 2018-09-07 13:46  偷悄悄的放个屁  阅读(60)  评论(0编辑  收藏  举报

导航