zoukankan      html  css  js  c++  java
  • 浅谈模块

    浅谈模块

     

    一.定义:

    1.模块的定义:有的功能需要借助已经实现的函数或类来完成

    2.模块:别人写好的一组功能(文件夹/py文件/c语言编译好的一些编译文件)

    3.导入了的变量才可以使用,但不导入不表示不存储,而是没有建立文件到模块中名字的引用

    4.当模块中导入的方法或变量和本文件重名时,那么这个名字仅代表最后一次对他赋值的方法或变量

      在本文对全局变量的修改完全不会影响到模块中的变量引用

    二.模块的导入顺序

      1.先导入内置模块

      2.再导入第三方模块

      3.再导入自定义模块

    模块的分类:
      1.内置模块  2.自定义模块  3.第三方模块(扩展模块)
    模块的作用:

      1.分类管理方法  2.节省内存  3.提供更多的功能

    创建一个模块:

    import aa(遵循变量的命名规则且aa必须是py文件但不加后缀名)
    1.找到aa模块
    2.创建一个属于aa的内存空间
    3.执行aa
    4.将模块所在的命名空间建立一个和aa之间的引用关系

    import  aa这个模块相当于执行了aa这个模块所在的py文件

    相同的模块不会被多次导入

    三.模块的重命名

    from 模块 import  aa  as  bb(把模块名从aa换成bb)

    四.导入多个模块

    例一.

      from 模块 import  aa

      from 模块 import  bb

      放在一个名字用逗号隔开,规范不能放在一行

      所有模块导入都应尽量放在这个文件的开头

    例二.

      from 模块 import *

      __all__可以在*的模块中控制要导入的内容

      尽量少用 * ,因为判定一个特殊的函数或属性是从哪来的有些困难,并且会造成调试和重构都更困难。

    五.导入多个模块之后再重命名

    from 模块 import aa as a,bb as b

    把变量aa改成a bb改成b

    六.pyc编译文件和重新加载模块

      python的执行:解释-编译  当一个文件所在的目录的__pycache__下生成一个编译好的文件,问了之后导入这个文件的时候直接读这个编译好的pyc文件就可以节省一些导入时候的时间.

    七.把模块当成脚本运行

      1.以模块的形式运行

    import my_module
    
    if __name__ == '__main__'
    
      my_module.login()

      2.直接pycharm cmd运行

          ------以脚本的形式运行

        需要在本文件中直接打印的代码上加上 if __name__ == '__main__'

      在编写py文件的时候

        所有不在函数和类中凤凰的内容都应该写在 if __name__ == '__main__':下面

    import sys
    import my_module
    sys.module

    {'sys':文件的内存地址

    'my_module':my_module的地址

    '__main__':当前直接执行文件所在的地址}

    存储了所有导入的文件的名字和这个文件的内存地址

    在使用反射自己模块快中的内容的时候

    import sys

    getattr(sys.modules[__name__],变量名)

    八.模块搜索路径

    #模块没导入之前在硬盘上

    print(sys.path) 打印结果:第一是当前运行的脚本所在的目录,第二个(不可靠)是pycharm在你打开项目的时候给你添加进来的项目,剩余的都是python内置的目录包括(内置函数和第三方函数)

    自定义模块能否被导入要看'sys.path'当中是否存在你要导入的文件所在的目录

      模块的搜索路径全部储存在sys.path列表中

      导入模块的顺序,是从前到后找到一个符合条件的模块就立即停止不再向后寻找

      #如果要导入的模块和当前执行的文件同级--直接导入即可

      #如果要导入的模块和当前执行的文件不同级--需要把要导入模块的绝对路径添加到sys.path列表中

    九.重新加载模块

    importlib.reload(模块名) #表示可以强制程序再重新导入这个模块一次  #非常不推荐使用不常用

    #在import之后 再修改这个被导入的模块 程序感知不到

    十.关于模块的循环引用

    在模块的导入中 不要产生循环引用的问题

    在引用模块时可以先用笔把引用关系画出来,不要连成环即可

  • 相关阅读:
    html <applet>元素属性介绍
    C#内存释放(转)
    mongodb for linux (安装)
    WCF客户端搭建(通过自定义WCF Client封装) wu
    SQL常用语句 wu
    任务调度平台 wu
    将DataSet 纵向显示数据
    关于OP和SI项目的记录点,防止遗忘难以查找
    java进阶
    git代码量统计
  • 原文地址:https://www.cnblogs.com/123zzy/p/9449691.html
Copyright © 2011-2022 走看看