• 模块


    一.什么是模块:

    1.有的功能开发者无法实现时,需要借用已经实现的函数类来完成这个功能,这些被调用的函数类就是模块

    2.你实现不了的功能,别人替你实现了

    3.别人写好的功能包括:文件夹/py文件/c语言编译好的一些文件.

    二.为什么要用模块:

    1,节省内存

    2.可以提供更多的功能

    3.分类管理方法

    三.模块的分类:

    1.内置模块

    2.第三方模块扩展模块

    3.自定义模块

    四.模块怎么用?在哪用?

    模块的创建和导入:

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

              2.文件的命名规范必须是变量的命名规范,一般情况下,模块都是小写字母开头

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

              4.模块不会被重复导入                  

    导入模块的过程:

    :

    模块的重命名  

    import my_module as m
    m.login()

    导入过个模块,可以用逗号隔开(不建议用)

    PEP8规范:
    1.所有的模块都应该尽量放在这个文件的开头
    2.模块的导入有顺序:
        先导入内置模块
        在导入第三方模块
        最后导入自定义模块

      2.from...import... 

        from import的时候发生了什么:

        1.仍然相当于执行了真个py文件

        在from import 的时候命名空间的转换:

     

        注意:导入什么就能使用什么,不导入的变量,不能使用

          不导入并不意味着不存,而是没有建立文件到模块中其他名字的引用

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

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

        重命名: as

    from my_module import login as l
    l()

        导入多个: 用逗号隔开

    from my_module import loain,name

        导入多个之后重命名:用逗号隔开

    from my_module import login as l,name as n

        from 模块 import * 用法 :导入所有的功能

        __all__ 模块中的,可以控制*导入的内容 表现: __all__[  ]

          

    五.模块的其他知识:

    1.把模块当成脚本运行:从本模块中反射本模块中的内容,

    运行一个py文件有两种方式:

    1.以模块的形式运行:

    import my_module

    if __name__ == '__main__':

      my_module.login() #所有不需要调用就能执行的内容

    2.以脚本的形式运行---->直接pycharm运行,cmd运行

    如果不想在被引用时候直接打印出有内容,需要在本文件中直接打印的代码是加上:

    if __name__ == '__main__':

    注意:在编写py文件的时候,所有不在函数和类中封装的内容都应该写在 if__name__ = '__main__'下面

    反射本模块中的内容:固定模式>>>

    import sys
    getattr(sys.modules[__name__],'要反射的变量名')

    __main__ 和 __name__区别

    '__main__':当前执行文件所在的地址,存储了所有导入的文件名字和这个文件的内存地址,不管在哪个文件中运行,都是返回这个文件的内容.不可变的

    __name__:在本文件返回本文件的内容,在其他文件如果引用模块下面执行,就返回模块的内容,是个可变的

    2.模块搜索路径: sys.path   ---> print(sys.path)

    3.pyc编译模块:

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

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

    4.模块探索路径:

    import sys
    print(sys.path)
    sys.path.append('路径')

    解释:模块没导入前在磁盘上,我们在导入模块的时候会去磁盘中的一个固定的文件路径去找,如果所导入的模块没在这个路径下,就会报错,所以这个时候,我们需要通过print(sys.path)来查看模块路径,没有的话,需要用sys.path.append('路径')来添加.

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

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

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

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

    5.重新加载模块:已经导入的模块即便被修改在程序执行过程中也不会生效

    importlib.reload(模块名) #表示重新加载

    注意:reload这种方式可以强制程序在重新导入这个模块一次,但不推荐使用

    6.模块的循环引用:

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

    如果发生循环导入了,就会发现明明写在这个模块中的方法,却找不到而报错

    六.包

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

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

    3.包中都有什么:至少拥有一个__init__.py文件

    4导入包方式:

       1.直接导入模块:

      (1)import 包.包.模块

        包.包.模块.变量

      (2)from 包.包 import 模块

        模块.变量

      2. 导入一个包-----> import 包                读框架源码的时候

      如要希望导入包之后,模块能够正常的使用,那么需要自己去完成init文件的开发

      包中模块的 绝对导入

      包中模块的 相对导入

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

      总结:如果是直接导入一个包,那么相当于执行了这个包中的__init__文件
        并不会帮你把这个包下面的其他包以及py文件自动的导入到内存
        如果你希望直接导入包之后,所有的这个包下面的其他包以及py文件都能直接通过包来引用
        那么你要自己处理__init__文件

      3. 导入包--->另一种方法:  

      知识点了解:__file__ --->print(__file__)当前文件的路径

    import sys
    ret = __file__.split('/')
    base_path = '/'.join(ret[:-2])
    sys.path.append(base_path)
  • 相关阅读:
    【elasticsearch】关于elasticSearch的基础概念了解【转载】
    【docker】docker容器和宿主机之间文件互传,互相拷贝
    【spring cloud】【docker】使用docker在centOS上部署spring cloud微服务架构服务
    【spring cloud】【IDEA】【Maven】spring cloud多模块打包,打包的jar包只有几k,jar包无法运行,运行报错:no main manifest attribute, in /ms-eureka.jar
    【spring cloud】【IDEA】【maven】spring cloud多模块在idea上使用maven插件打包报错:程序包XXX不存在
    【linux】linux重启tomcat + 实时查看tomcat启动日志
    【linux】linux查看文件大小,磁盘大小,ls命令的使用
    【spring cloud】在spring cloud服务中,打包ms-core失败,报错Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:2.0.4.RELEASE:repackage (default) on project
    【微信小程序】微信小程序 文本过长,自动换行的问题
    【linux】centos7终端中文显示乱码,命令返回中文乱码
  • 原文地址:https://www.cnblogs.com/ITdong-1/p/9425280.html
Copyright © 2020-2023  润新知