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
posted @ 2019-03-10 21:46  你厉害。  阅读(442)  评论(0编辑  收藏  举报