zoukankan      html  css  js  c++  java
  • 走进模块

    一, 模块

     1. 梗概

      什么是模块

        有的功能开发者无法自己完成,需要借助已经实现的函数/类来完成这些功能

      为什莫要有模块

        节省内存 ; 管理分类方法 ; 提供更多功能

      模块分为哪几种

        内置模块:安装python解释器的时候跟着装上去的那些功能

        第三方模块/扩展模块:没在安装python解释器的时候安装的那些功能

        自定义模块:自己写的一个通用的功能,就可以把它当做一个模块

      import :  import 的时候发生了什么  在import的时候命名空间的变换

           重命名  一行导入多个模块

      from...import... :  from  import  的时候发生了什么  在import的时候命名空间的变换

           重命名  一行导入多个..  from 模块 import *  * 和__all__的相关性

     2. 模块的创建和导入

      模块的名字必须要满足变量名的命名规范

      import 文件名  要导入一个py文件的名字,但是不加 .py 后缀名

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

       一个模块不可以重复次导入

      导入和使用模块的过程:  

      模块的重命名:

       import  文件名 as 新文件名  (此处并非把改变这个模块的模块名,只是改变了引用的名字)

      导入多个模块  需用 , 隔开  (此方式不符合PEP8规范)

      导入顺序 : 内置模块  第三方模块  自定义模块

     3.  from 文件名 import 方法名(from my_module import login)

      from import 仍然相当于执行了整个py文件

      导入了什么就执行什么,不导入的变量不能使用,但是不导入并不意味着不存在,而是没有建立

       文件到模块中其他名字的引用

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

      的那个方法或者变量

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

      导入多个再重命名 : from 文件名 import 方法名 as 新方法名 , 方法名/变量名 as 新name

      from 文件名 import * : 模块内所有的名字都会同名引用

     

     4. __all__ = [' ']  可以控制 * 导入的内容,该内容应写在引号内,(因为此方法需要写在文件首,

      所有变量都未定义)

     5. 把模块当成脚本运行

      运行py文件的两种方式 : 1.以模块的形式运行  2. 直接运行 / 以脚本的形式运行

      在编写py文件的时候所有不在函数和类中封装的内容都应该写在

        if __name__ == '__main__' : 下面

      "__main__" : 获取当前文件的内存地址

    import sys
    import my_module
    
    #sys.modules
    #{'sys':文件的内存地址, 'my_module':my_module的地址,
    #   '__main__':当前执行文件所在地址}    
    #存储了所有导入的文件的名字和这个文件的内存地址
     

       

     6. 在使用反射自己模块中的内容的时候:

          import sys

          sys.module[__name__](这句话写在哪个文件里就代表着哪个文件的命名空间)

      7. sys.path

        一个模块能不能被导入,就看sys.path中是否有这个模块所在的绝对路径

        导入不成功:

          print(sys.path)

          import  模块

          修改sys.path

          修改 import 语句

    import sys
    lst = __file__.split('/')
    base_path = '/'.join(lst[:-2])
    sys.path.append(base_path)    #Python解释器相关
    from core import main
    
    if __name__ '__main__'
       
    
    启动一个文件,这个文件通过启动导入其他文件,所有导入的文件是一个程序
    由一个Python解释器来解释,
    
    所有的文件都加载到一块内存空间中一些解释器中的全局变量,应该是这个
    程序共享

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

       当一个文件作为一个脚本被导入时就会在这个文件所在目录的__pycache__下生成一个

        编译好的文件为了之后导入这个文件的时候直接读这个编译好的pyc文件就可以节省一

        些导入时候的时间

       在import 之后再修改被导入的模块程序感知不到,导入文件的行为不会因为源文件的改动

        而改变

        (importlib.reload()  表示重新加载)

     8. 模块的循环引用

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

      如果发生循环导入就会发现明明写在这个模块的方法,显示找不到

    二, 包

      什么是包  : 集合了一组py文件 提供了一组复杂功能

      为什莫要有包  : 当提供的功能 比较复杂,一个py文件写不下的时候

      包中有什么

        至少拥有一个__init__.py

      导入模块

        import 包.包.模块

        包.包.模块 import 模块

        from 包.包 import 模块

      导入包(相当于执行了包下面的 __init__.py)

        如果希望导入包之后模块能够正常的使用 那么需要自己在init文件中做一些导入,才能保证导入包时能够

        使用这个包中的模块

        绝对导入;

        相对导入

          使用了相对导入的模块只能被当做模块执行不能被当做脚本执行

        

      

  • 相关阅读:
    git常用命令
    Expected Conditions的常用函数
    Docker(二十)-Docker容器CPU、memory资源限制
    Docker(十九)-Docker监控容器资源的占用情况
    ubuntu制作本地源
    ubuntu下安装软件的三种方法
    把windows的bat用好了,也很不错
    escape()、encodeURI()、encodeURIComponent()区别详解
    如何解决Ajax跨域问题-1
    五种开源协议的比较(BSD,Apache,GPL,LGPL,MIT) – 整理
  • 原文地址:https://www.cnblogs.com/panda-pandeyong/p/9395040.html
Copyright © 2011-2022 走看看