zoukankan      html  css  js  c++  java
  • python包(模块包) package

    1、包(模块包) package

      包是将模块以文件夹的组织形式进行分组管理的方法

      作用:
      将一系列模块进行分类管理,有利于防止命名冲突
      可以在需要时加载一个或部分模块,则不是全部模块

      包示例:
      mypack/
        __init__.py
        menu.py
        games/
          __init__.py
          contra.py
          supermario.py
          tanks.py
        office/
          __init__.py
          excel.py
          word.py
    View Code

    2、包的导入:
      同模块的导入规则
      import 包名 [as 包别名]
      import 包名.模块名 [as 模块新名]
      import 包名.子包名.模块名 [as 模块新名]

      from 包名 import 模块名 [as 模块新名]
      from 包名.子包名 import 模块名 [as 模块新名]
      from 包名.子包名.模块名 import 属性名 [as 属性新名]

      from 包名 import *
      from 包名.模块名 import *
      ...

    3、import 语句搜索包的路径的顺序
      1. 搜索程序的运行时路径(当前工作目录)
      2. sys.path提供的路径

    4、包的 __init__.py 文件
      __init__.py 是常规包内必须存在的文件
      __init__.py 会在包加载时被自动调用

      __init__.py 内的__all__ 列表
        作用:
          用来记录此包中有哪儿些子包或模块需要导入当用from 包 import * 语句导入模块时,只查找__all__中所有模块或子包

        说明:
          __all__ 列表只对 from xxx import *语句起作用

    __all__ = ['contra', 'tanks']
    # 此示列会影响
    # from mypack.games import * 导入时,会导入contra 模块
    # 和 tanks 模块
    
    print("mypack.games里的__init__.py 被调用")
    View Code

    5、包的相对导入
      包的相对导入是指包内模块的相互导入

      语法:
        from 相对路径包或模块 import 属性或模块名
        或
        from 相对路径包或模块 import *
      相对路径:
        在 from import 语句和 from import *语句中可以使用相对导入from 和 import 间可以用相对路径
        . 代表当前目录
        .. 代表上一级目录
        ... 代表上二级目录
        .... 以此类推
        注: 相对导入时不能超出包的外部

        # file: mypack/games/contra.py

        def play():
          print("正在玩魂斗罗!")
    
        def game_over():
          print("游戏结束!")
          # 用绝对导入
          # from mypack.menu import show_menu
    
          # 相对导入
          from ..menu import show_menu
    
          show_menu()
          # 调用tanks里的play函数
          # from .tanks import play
          from ..games.tanks import play
          # 如下是错的, ... 已经超出的包的最外部
          # from ...mypack.game.tanks import play
          play()
    
        print("魂斗罗模块被加载!!!")
    View Code
  • 相关阅读:
    离散数学期中复习
    计算机组成原理实验_算术逻辑运算器的实现
    数值分析第一章插值方法
    数值分析绪论
    数值分析第三章 常微分方程的差分方法
    数值分析第二章 数值积分
    数据库删除信息后,再次加入信息ID不再从1开始的解决办法
    Codeforces Round #670 (Div. 2)(树的重心,dfs求子树大小)
    Codeforces Round #670 (Div. 2)B. Maximum Product(5个数乘积最大)
    Codeforces Round #668 (Div. 2)A->C
  • 原文地址:https://www.cnblogs.com/zhaoyang1997/p/10507428.html
Copyright © 2011-2022 走看看