飞道的博客

Python3中的模块和包

478人阅读  评论(0)

目录

1:模块介绍

2:模块的导入方式及过程

2.1:import,from xx  import yy

2.2:imp.reload 动态导入

2.3:模块导入过程

3:Python中的包


 

1:模块介绍

在Python中,每一个文件都是一个模块,模块是最高级别的程序组织单元,它将程序代码和数据封装起来以便再次利用,同时提供自包含的命名空间以便避免程序出现变量名冲突。模块在导入其他模块之后就可以使用被导入模块中定义的名称。

2:模块的导入方式及过程

2.1:import,from xx  import yy

import:把一个模块整体导入:


  
  1. import random
  2. print(random.randint( 1, 20))
  3. # 也可以取别名
  4. # import random as aaa
  5. # print(aaa.randint(1,20))

from  :从一个模块中获得特定的名称


  
  1. # 导入模块中的多个个属性,方法等,
  2. from random import randint,randrange
  3. print(randint( 1, 20))
  4. #也可以取别名
  5. # from random import randint as aaa
  6. # print(aaa(1,20))

2.2:imp.reload 动态导入

     在不终止Python程序的情况下,重新载入模块文件代码的方法。

2.3:模块导入过程

import和from都是隐式的赋值语句:

import将整个模块对象赋值给一个单独的名称。

from将一个或多个名称赋值给另一个模块中的同名对象。

每个进程中的单个模块(文件)只做一次导入:模块在第一次import或from时被载入并执行,在第二次及以后的导入时不会加载及运行,但会进行赋值操作。模块在每次导入时会先去sys.modules中查找被导入的模块是否存在于sys.modules中,如果存在说明已经导入过,不会做加载及运行操作,如果不存在,则对导入的模块进行加载,并创建模块中的对象,运行模块中的调用的方法,完了之后把模块信息写入sys.modules中。因此模块中的变量是全局的,可以在不同的模块中进行共享,不会在每次导入中创建一个副本。

下面来验证下:
fileA.py


  
  1. lst = [ 1, 2, 3, 4]
  2. print( "in fileA.py")

fileB.py  :导入模块fileA


  
  1. import fileA
  2. fileA.lst.append( "fileB")
  3. print( "in fileB.py")

fileC.py :导入模块fileA


  
  1. import fileA
  2. fileA.lst.append( "fileC")
  3. print( "in fileC.py")
test.py

  
  1. print( '--0001--')
  2. from xmodule import fileB
  3. print( '--0002--')
  4. from xmodule import fileC
  5. print( '--0003--')
  6. import fileA
  7. print( '--0004--')
  8. print(fileA.lst)
  9. print( '--0005--')
  10. import imp
  11. imp.reload(fileA)
  12. print( '--0006--')
  13. print(fileA.lst)
  14. print( '--0007--')
  15. /*
  16. # 输出结果:
  17. - -0001-- # 导入模块B,模块B中又导入模块A,模块A是本进程中第一次导入,故输出如下:
  18. in fileA.py
  19. in fileB.py
  20. - -0002-- # 导入模块C,模块C中又导入模块A,但模块A已被导入,故输出如下:
  21. in fileC.py
  22. - -0003-- # 导入模块A,但模块A已被导入,故没有输出;还是会给fileA赋值,
  23. - -0004-- # 打印 fileA.lst
  24. [ 1, 2, 3, 4, 'fileB', 'fileC']
  25. - -0005-- # imp.reload(fileA) 重新加载模块fileA,lst被重新赋值
  26. in fileA.py
  27. - -0006-- # 重新加载之后,lst被重新赋值
  28. [ 1, 2, 3, 4]
  29. - -0007--
  30. */

3:Python中的包

    Python代码的目录被称为包,除模块名之外,导入还可以指定目录路径,因此这样的导入就称之为包导入。

    导入格式:
      import dir1.dir2.mod1
      from dir1.dir2.mod1 import a

      其中目录dir1,dir2下需要有__init__.py文件

 

 

 


转载:https://blog.csdn.net/ixusy88/article/details/106164661
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场