模块与包

发布时间 2023-12-05 02:37:37作者: 我才是最帅的那个男人

一,模块的介绍

  模块就是一些功能的集合。如何自己写一个模块创建一个py文件,给它起一个 符合变量名命名规则的名字,这个名字就是模块名。

二,导入模块的过程

  • 找到这个模块
  • 判断这个模块是否被导入过了
  • 如果没有被导入过
  • 创建一个属于这个模块的命名空间
  • 执行这个模块中的代码
  • 让模块的名字 指向 这个空间

三,给模块起别名

  起别名之后可以简化一些代码量。

改进前:

1 def func(dic,t = 'json'):
2     if t == 'json':
3         import json
4         return json.dumps(dic)
5     elif t == 'pickle':
6         import pickle
7         return pickle.dumps(dic)

改进后:

1 def func(dic, t='json'):
2     if t == 'json':
3         import json as aaa
4     elif t == 'pickle':
5         import pickle as aaa
6     return aaa.dumps(dic)

四,导入多个模块

  • 建议导入模块时,一行一行的导入。
  • 规范建议 模块应该一个一个的导入 : 自定义模块,第三方模块,内置模块(已经是约定成俗的东西了。)
    1 内置模块
    2 扩展(第三方)模块
    3 自定义模块
    4 
    5 import os
    6 
    7 import django
    8 
    9 import my_module

五,from import

  form import可以导入模块的个别功能,不用一下子都导入。

导入过程:

  • 找到要被导入的模块
  • 判断这个模块是否被导入过
  • 如果这个模块没被导入过
    • 创建一个属于这个模块的命名空间(如果已经导入的话直接跳过)
    • 执行这个文件(如果已经导入的话,直接跳过)
    • 找到你要导入的变量
    • 给你要导入的变量创建一个引用,指向要导入的变量

导入多个模块的名字

from my_module import read1,read2
read1()
read2()

给导入的起别名

1 from my_module import read1,read2
2 read1()
3 read2()

六,from my_module import * 

  此时,会导入模块所有的功能,并且名字也一块导入。

     * 和 __all__ __all__能够约束*导入的变量的内容

 __all__ ,会以列表的形式越是*的导入量。

七,模块的循环引用问题

  尽量不要形成a引用b的同时b引用a,容易报错。

八,模块的加载与修改

  如果导入一个模块后,导入的模块内容会引入你的内存之中。这样的话,如果这时候改变你的模块的话,不会改变到内存之中。

可以引用importlib模块,达到更新内存的效果。

1 import time,importlib
2 import aa
3  
4 time.sleep(20)
5 # importlib.reload(aa) #更新内存。
6 aa.func1()