Python中的模块、包常识

一、模块的定义

        在 Python 中,模块(module)是一个包含了 Python 定义和语句的文件,一般情况下,是一个以.py为后缀的文件。它可以被其他 Python 程序导入并使用。一个模块可以定义函数、类、变量和常量等,也可以包含可执行代码。一般来说,每个模块都应该独立而且具有明确的功能。module来源有3种:
①Python内置的模块(标准库);
②第三方模块;
③自定义模块。

二、包的定义

        包(package)是一个包含了多个模块的特殊目录。换句话说,包是含有Python模块的文件夹。一个包通常包含   init   .py文件,该文件和其他 Python 模块一样,可以定义变量、类、函数等,并且可以被其他模块或包导入使用。

注意:若想使用from pacakge_1 import *这种形式的写法,需在  init  .py中加上:   all    = [‘file_a’, ‘file_b’] #package_1下有file_a.py和file_b.py,在导入时   init   .py文件将被执行。但是大多数情况下不建议在  init  .py模块中写内容。

三、sys.modules、命名空间、模块内置属性

(一)sys.modules

在 Python 中,sys.modules 是一个字典,它包含了当前系统中所有已经导入过的模块的信息。这个字典的键是模块名称,而值则是对应模块的引用。如果你需要了解已经导入的模块,可以查看 sys.modules 字典。在 Python 中导入一个模块时,解释器会首先检查 sys.modules 字典,如果指定的模块已经存在于字典中,就不会再次导入该模块,而是直接使用已经导入的模块。这样可以减少模块导入的时间和内存开销,提高程序的性能。      

(二) 命名空间

  • 每个函数function 有自己的命名空间,称local namespace,记录函数的变量。
  • 每个模块module 有自己的命名空间,称global namespace,记录模块的变量,包括functions、classes、导入的modules、module级别的变量和常量
  • build-in命名空间,它包含build-in function和exceptions,可被任意模块访问。

某段Python代码访问 变量x 时,Python会所有的命名空间中查找该变量,顺序是:

  1. local namespace 即当前函数或类方法。若找到,则停止搜索;
  2. global namespace 即当前模块。若找到,则停止搜索;
  3. build-in namespace Python会假设变量x是build-in的函数函数或变量。若变量x不是build-in的内置函数或变量,Python将报错NameError。
  4. 对于闭包,若在local namespace找不到该变量,则下一个查找目标是父函数的local namespace。

(三)模块内置属性

  1. __name__: 模块名,如果直接运行该模块,则该属性值为 "__main__",否则为模块的文件名(不含扩展名)。
  2. __file__: 模块文件的绝对路径(包括文件名和扩展名)。
  3. __doc__: 模块文档字符串。
  4. __package__: 模块所在的包名,如果模块不在包中则该属性值为 None
  5. __loader__: 加载该模块的 loader 对象。
  6. __spec__: 描述该模块的规范对象,包含了模块的元数据信息。
  7. __path__: 模块所在的包的路径列表,如果模块不在包中则该属性值为 None

四、绝对导入、相对导入

  (一)绝对导入      

        绝对导入是指从根目录开始的导入。使用绝对导入时,需要明确指定模块所在的完整路径,例如:import foo.bar.baz

例1:c.py中导入B包/B1子包/b1.py模块

import sys,os
BASE_DIR = os.path.dirname(os.path.abspath(__file__))#存放c.py所在的绝对路径

sys.path.append(BASE_DIR)

from B.B1 import b1#导入B包中子包B1中的模块b1

例2:b1.py中导入b2.py模块

from B.B1 import b2#从B包中的子包B1中导入模块b2

(二)相对导入

        相对导入是指从当前模块开始的导入。使用相对导入时,可以使用点号.表示当前模块,以及使用双点号..表示从当前模块的上一级目录开始导入。例如:from . import baz 或 from ..foo import bar


参考:
官方规范

资料来源Python 3.x | 史上最详解的 导入(import)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DXM0521

你的支持是我最大的幸运

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值