学习笔记-Python基础10-包、模块的引入

一、模块

  

  1、以下是在p02文件中调用p01模块:

2、以下是在02文件中调用01模块:

3、以下是给以导入模块起别名的方式在p03文件中导入p01模块:

4、以下是p04中导入模块时有选择性的只导入p01模块中自己要用的内容而不导入其他:

 

5、from module_name import *

    导入模块所有内容,与直接使用import导入,这种导入不需要使用模块名前缀

 其他知识点:模块中,__name__ == __main__,表示代码在模块内执行的时候其名字是主进程,当在其他文件中被import引入的时候其名字是模块名

  1、可以有效避免模块代码被导入的时候被动执行问题

  2、这句话建议作为程序的入口

6、模块的搜索路径和存储

    什么事模块的搜索路径:加载模块的时候,系统会在哪些地方寻找此模块

  系统默认的模块搜索路径,此处注意这是系统默认的模块搜索路径

    import sys

    sys.path 属性可以获取路径列表

    

    添加自定义搜索路径:sys.path.append(dir)

    模块的加载顺序:

      1、先搜索内存中已经加载好的模块

      2、搜索python的内置模块

      3、搜索sys.path路径

二、包

  包是一种组织管理代码的方式,包里面存放的是模块

  把模块包含在一起的文件夹就是包

  自定义包的结构:

    | --- 包

      | --- __init__.py  包的标志文件

      | --- 模块1

      | --- 模块2

      | ---- 子包(子文件夹)

        | --- __init__.py  包的标志文件

        | --- 子包模块1

        | --- 子包模块2

  包的导入操作

    1、import package_name

        直接导入一个包,便可以使用__init__.py中的内容,使用方法:

          package_name.func_name()

          package_name.class_name.func_name()

      import package_name as 包别名

      上述两种方法默认是对__init__.py内容的导入

      下面的例子是在p07文件中引入pkg01包:

    

    2、import package.module,导入包中某个具体的模块

       使用方法:

        package.module.func_name()

        package.module.class.func()

        package.module.class.var

      import package.module as 包下模块的别名

      

    3、from ... import ...

      from backage import module1, module2  这种导入方法不执行__init__的内容

        实例写法:from bkg01 import p01

             p01.sayHello()

      from backage import *  只导入当前包里__init__.py中的所有函数和类,特别注意此导入方法不导入当前包里的其他模块

        写法:func_name()

           class_name.func_name()

           class_name.var

      from backage.module import *  导入包中指定模块里的所有内容

        写法:func_name()

           class_name.func_name()

     其他导入:在开发环境中经常会用到其他模块,可以再当前文件中直接导入其他模块,写法是import 完整的包或者模块的路径

     __all__的用法:

      在使用from backage import * 的时候,* 可以导入的内容

      __init__.py文件中如果内容为空,或者没有__all__,那么只可以把__init__.py里的内容导入,说白了导入也是空

      __init__.py文件中如果设置了__all__的值,那么则按照__all__指定的子包或者模块导入,而不会再载入__init__中的内容

      写法:__all__=['module1', 'module2', 'backage1', ...]

      

     命名空间:用于区分不同位置、不同功能,但有相同名称的函数或者变量的一个特定前缀(此处理解为包),用于防止命名冲突

        setName()、Student.setName()、Dog.setName()

        

原文地址:https://www.cnblogs.com/Cloudloong/p/9707025.html