zoukankan      html  css  js  c++  java
  • 模块 包

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

    模块可以包含可执行的语句和函数的定义,这些语句的目的是初始化模块,它们只在模块名第一次遇到导入import语句时才执行
    我们可以从sys.modules中找到当前已经加载的模块,sys.modules是一个字典,内部包含模块名与模块对象的映射,该字典决定了导入模块时是否需要重新导入。

    冲突问题
    每个模块都是一个独立的名称空间,定义在这个模块中的函数,把这个模块的名称空间当做全局名称空间,
    这样我们在编写自己的模块时,就不用担心我们定义在自己模块中全局变量会在被导入时,与使用者的全局变量冲突

    首次导入模块my_module时会做三件事
    1为源文件创建名称空间
    2在新创建的命名空间中执行模块中包含的代码
    3创建变量指向该空间

    为模块起别名
    if file_format == 'xml':
         import xmlreader as reader
    elif file_format == 'csv':
         import csvreader as reader
    data=reader.read_date(filename)
    示范

    一行可以导入多个模块,但不建议这么做

    from  ... import  ...

    from 语句相当于import,也会创建新的名称空间,但是将my_module中的名字直接导入到当前的名称空间中,

    在当前名称空间中,直接使用名字就可以了

    python中的变量赋值不是一种存储操作,而只是一种绑定关系

    注意   *  与  __all__['字符串类型的变量名']

    模块的循环引用问题  可以循环 但不建议,会出问题

    我们可以通过模块的全局变量__name__来查看模块名:
    当做脚本运行:
    __name__ 等于'__main__'
    当做模块导入:
    __name__= 模块名
    作用:用来控制.py文件在不同的应用场景下执行不同的逻辑
    if __name__ == '__main__':

    模块的查找顺序是:内存中已经加载的模块->内置模块->sys.path路径中包含的模块

  • 相关阅读:
    如何设计一个安全的对外接口?
    Java架构师必须知道的 6 大设计原则
    Spring Boot 如何快速改造老项目?
    Java 类中可以覆盖静态方法吗?
    Dubbo 的心跳设计,值得学习!
    在滴滴和头条干了 2 年后端开发,太真实…
    别乱提交代码了,看下大厂 Git 提交规范是怎么做的!
    3种骚操作,教你查看 Java 字节码!
    sysbench测试服务器性能
    mysql DDL时出现的锁等待状态
  • 原文地址:https://www.cnblogs.com/XLHIT/p/10656414.html
Copyright © 2011-2022 走看看