导入模块因其的导入系列相关部分

 一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀。

   但其实import加载的模块分为四个通用类别: 

  1 使用python编写的代码(.py文件)

  2 已被编译为共享库或DLL的C或C++扩展

  3 包好一组模块的包

  4 使用C编写并链接到python解释器的内置模块

 

首先呢,导入模块会用到import,还会用到from,这两种有什么区别吗?

import意思就是调用,from的意思从...下面看一段调用代码

from time import sleep    #这里的意思是:从time模块当中调用sleep这个变量,接下来就可以

sleep(3)                    #没错,在这里可以直接用了,效果一样停顿三秒

                #但是请注意,如果本文件中有相同的变量名会发生冲突

 

另外,from后面也可以跟上比如(包,类)的名字,import后面也可以跟上模块名字,他们的关系是import后面跟的是from后面的一部分

 

在导入文件时,按照顺序会优先导入本地的模块(文件),比如你自己建了一个文件time.py,接下来导入的time模块就是自己建的这个time文件,原本的time模块的功能都没有了

所以,文件起名需谨慎

 

# 当导入一个模块时会从sys.modules里查看该模块是否被导入,如果没有导入,就依据sys.path路径寻找模块
#并且创建命名空间
# 执行文件,把文件中的名字都放到命名空间里

为已经导入的模块起别名的方式对编写可扩展的代码很有用,假设有两个模块xmlreader.py和csvreader.py,
它们都定义了函数read_data(filename):用来从文件中读取一些数据,
但采用不同的输入格式。可以编写代码来选择性地挑选读取模块,例如
if file_format == 'xml':
import xmlreader as reader #as的意思是把前面的名字类似于赋值给了后面的名字,然后调研破那个后面的名字就可以实现前面模块的功能
elif file_format == 'csv':
import csvreader as reader #两个reader同时兼容着两个模块的功能
data=reader.read_date(filename)

 

from time import  #   *在这里代表time模块下所有的功能都被调用,并且可以被修改,很不安全
在调用的模块里面加__all__= ['这里放名字']
__all__和*相关的,__all__在这里不是变量了,后面必须跟list,list里必须是字符串
放进去之后该模块的功能才能使用
    from 模块名 import * 和 __all__ 是一对
# 没有这个变量,就会导入所有的名字
# 如果有all 只导入all列表中的名字

__name__用法
#在本文件a使用__name__打印结果是__main__
#在b文件调用a时就打印被调用的文件a的名字
#可以通过if判断来控制在a和b文件界面的打印效果

 

 

注意:所有的模块导入都应该尽量往上写,模块不会被重复调用,查看从哪儿调用模块sys.path
    # 内置模块
    # 扩展模块
    # 自定义模块

模块也可以一行导入多个
import time,os,re


 

posted on 2018-01-11 16:28  杜杜精灵  阅读(145)  评论(0编辑  收藏  举报

导航