python day17

导入模块的两个细节

1、跨文件夹导入模块

  #1)如果a文件夹所在目录在环境变量里,a文件夹中的ma模块可以被以下方式导入

  import a.ma |   from a import ma

  #2)如果a文件夹所在目录在环境变量里,a文件夹中的b文件夹的mb模块可以被以下方式导入

  import a.b.mb |   from a.b import mb

  #3)如果a文件夹所在目录在环境变量里,a文件夹中的b文件夹的mb模块中的bbb名字要被直接导入

  import a.b.mb.bbb  #错误用法,  所有.的左边必须是文件夹

  from a.b import mb.bbb  #也是错误, 所有.的左侧必须是文件夹

  from a.b.mb import bbb  #正确

2、文件被执行的两种方式

  -1、一个py文件作为自执行文件,__name__变量的值为'__main__'

  -2、一个py文件作为模块被导入执行,__name__变量的值为模块的名字

#如何区分两种方式:一个文件可以自执行,也可以被导入执行  共存

#在这个py文件后面加上if判断语句

if __name__ == '__main__'

  #自执行的逻辑代码    #这样的文件作为模块被导入时,__name__为模块名,不满足if条件,

                #就不会执行自执行的逻辑

#一系列模块的集合体,用文件夹来管理一系列有联系功能的模块,该文件夹我们称之为包,文件夹名就是包名

包与普通文件夹的区别:包的文件夹一定存在一个__init__.py文件

  --py2必须创建__init__.py文件

  --py3可以不创建,系统会帮我们创建,但是如果想管理包里的模块,也是必须创建的

#__init__.py文件

1)产生一个全局名称空间,提供给包,就代表包的名称空间

2)管理 包可以直接点出来的使用的 名字

#导包完成的三件事

1)编译形成包中的__init__.py文件的pyc文件

2)执行__init__.py文件,形成一个全局名称空间,将__init__.py文件中所有的名字存放其中,该名称空间就代表包的名称空间

3)在导包的文件中产生一个与包名相同的名字,指向包的名称空间(__init__.py文件的全局名称空间)

直接使用包中的模块

如果只是想作为普通文件夹,py3中可以省路__init__.py文件,本质上文件夹也是包

导入的手段:1、指名道姓到某一个模块  |  2、指名道姓到某一模块中的名字

(直接使用的话就相当于上面的跨文件夹导入模块)

包的管理

#在包中采用相对导入来管理模块或者模块中的名字

  相对导入:导入语句中用.代替某些路径的导入方式就是相对导入

          --相对导入不依赖于sys.path 

#在包的__init__.py文件或是包中任意一个模块中

#.代表的是当前文件所在目录

#..代表的是上一级文件的所在目录,可以通过..在上一级的目录里导模块,但是..不能出包的目录

注:.语法不能出包,因为包外的文件都能自执行,但是拥有.开头导入的文件不能自执行,只能通过别人导入执行

posted @ 2019-05-06 18:46  hesujian  阅读(112)  评论(0编辑  收藏  举报