Python中模块和包有关内容

Python模块与包详解
本文详细介绍了Python中模块和包的概念、定义方法及使用技巧。包括如何创建和使用模块、包的组织结构、导入包的不同方式及其执行原理,以及如何避免命名冲突等问题。
模块
  • 一个模块就是一个包含python代码的文件,后缀名是 .py

  • 为什么用模块

    • 程序太大,编写维护非常不方便,需要拆分
    • 模块可以增加代码重复利用
    • 当作命名空间使用,避免命名冲突
  • 如何定义一个模块

    • 模块就是一个普通文件,所以任何代码可以直接书写
    • 不过根据模块的规范,最好在模块中编写以下内容
      • 函数(单一功能)
      • 类(相似功能的组合,或者类似业务模块)
      • 测试代码
  • 如何使用模块

    • 模块可以直接导入
    • 语法

    import module_name
    module_name.function_name
    module_name.class_name

    • import 模块 as 别名

      • 导入的同时给模块起一个别名
      • 其余用法和上面的一样
    • from module_name import func_name, class_name

      • 按上述方法有选择性的导入
      • 使用的时候可以直接导入要使用的类或者方法,不需要前缀
    • from module_name import *

      • 导入模块的所有内容
  • if __name__ == “__main__” 的使用

    • 可以有效避免模块代码被导入的时候被动执行的问题
    • 建议所有程序的入口都以次代码为入口
模块的搜索路径和存储
  • 什么是模块的搜索路径
    • 加载模块的时候,系统会在哪些地方寻找模块
  • 系统默认的模块搜索路径

import sys
sys.path

  • 添加搜索路径

      sys.path.append(dir)
    
  • 模块的加载顺序

    • 上搜索内存中已经加载好的模块
    • 搜索python的内置模块
    • 搜索sys.path路径
  • 包是一种组织管理代码的方式,包里面存放的是模块

  • 用于将模块包含在一起的文件夹就是包

  • 自定义包的结构

      |---包
      |---|--- __init__.py   包的标志文件
      |---|--- 模块1
      |---|--- 模块2
      |---|--- 子包(子文件夹)
      |---|---|--- __init__.py 包的标志文件
      |---|---|--- 子包模块1
      |---|---|--- 子包模块2
    
  • 包的导入操作

      import package_name
      直接导入一个包,可以使用__init__.py中的内容
      使用方式
      package_name.func_name
      package_name.class_name.func_name()
      此种方式的访问内容是
    
    • import package_name as p

      • 具体做法跟上述简单导入一致
      • 注意的是此种方法是默认对__init__.py内容的导入
    • import package.module

      • 导入包中某一个具体的模块

      • 方法

          package.module.func_name
          package.module.class.fun()
          package.module.class.var
        
    • import package.module as p

  • from… import…导入

    • from package import module1, module2…

    • 此种方法导入不执行__init__.py中的内容

        from pkg01 import p01
        p01.sayHello()
      
    • from package import *

      • 导入当前包 __init__.py 文件中所有函数和类

      • 使用方法

          func_name()
          class_name.func_name()
          class_name.var
        
  • from pakcage.module import *

    • 导入包中指定模块的所有模块

    • 使用方法

        func_name()
        class_name.func_name()
      
  • 在开发环境中经常会引用其他模块,可以在当前包中直接导入其他模块中的内容

    • import 完整的包或者模块的路径
  • __all__的用法

    • 在使用from package import * 的时候,* 可以当如的内容
    • __inti__.py中如果文件为空,或者没有__all__,那么只可以把__init__中的内容导入
    • __init__如果设置了__all__的值,那么则按照__all__指定的子包或者模块进行导入,如此就不会载入__init__中的内容
    • ‘__all__=[‘module1’, ‘module2’, ‘packkage1’, …]’
命名空间
  • 用于区分不同位置不同功能单相同名称的函数或者变量的一个特定前缀

  • 作用是防止命名冲突

      setName()
      Student.setName()
      Dog.setName()
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值