zoukankan      html  css  js  c++  java
  • 1 包的定义

    包就是一个包含有__init__.py文件的文件夹

    2 包的作用

    包是模块的一种形式,包是用来被当做模块导入的

    不同于.py文件形式的模块,包可以使得其中内容较多的模块结构更清晰,便于设计者维护更新

    3 包的使用

    3.1 使用者

    包的使用可以参照模块的使用方法

    模块地址: https://www.cnblogs.com/achai222/p/12577776.html

    3.1.1 设置环境变量

    使用者需要将包放到与执行文件同一个文件夹或者

    将包的路径加入环境变量才能进行导入

    import sys
    sys.path.append('/project') # 直接将项目的根目录加入环境变量
    print(sys.path)
    
    

    3.1.2 导入包的过程

    # 1、产生一个名称空间
    # 2、运行包下的__init__.py文件,将运行过程中产生的名字都丢到1的名称空间中
    # 	 导入包时并不会导入包下所有的子模块与子包,只导入__init__中存在的名字
    # 3、在当前执行文件的名称空间中拿到一个名字mmm,mmm指向1的名称空间
    #	 import导入文件时,产生名称空间中的名字来源于文件,
    # 	 import 包,产生的名称空间的名字同样来源于文件,即包下的__init__.py,导入包本质就是在导入该文件
    

    3.1.3 导入包

    包的使用和.py模块的使用基本相同

    包的导入有import和from ... import ...两种

    注意:

    凡是在导入时带点的,点的左边都必须是一个包,否则非法

    import a.b.c ----->a,b必须为包

    from a.b.c import d ----->a,b必须为包

    3.1.4 使用模块内名字

    引用模块内名字时需要添加模块名+.+名字

    使用时点的左边可以是包,模块,函数,类

    import foo # 相当于导入foo下__init__.py
    
    foo.f1()
    foo.f2()
    foo.f3()
    
    from foo import f1
    
    f1()
    
    from foo import *
    print(f1)
    print(f2)
    print(f3)
    

    3.2 设计者

    3.2.1 设置环境变量

    环境变量是以执行文件为准备的,所有的被导入的模块或者说后续的其他文件

    引用的sys.path都是参照执行文件的sys.path

    import sys
    sys.path.append('/project') # 直接将项目的根目录加入环境变量
    print(sys.path)
    
    sys.path.append(r'/Users/linhaifeng/PycharmProjects/s14/day21/aa')
    

    3.2.2 绝对导入与相对导入

    针对包内的模块之间互相导入,导入的方式有两种

    3.2.2.1 绝对导入

    绝对导入,以包的文件夹作为起始来进行导入

    #pool下的__init__.py
    from pool import versions
    

    3.2.2.2 相对导入

    相对导入:仅限于包内使用,不能跨出包(包内模块之间的导入,推荐使用相对导入)
    .:代表当前文件夹
    ..:代表上一层文件夹

    依此类推

    #pool下的__init__.py
    from . import versions
    

    相对导入只能用from module import symbol的形式,import ..versions语法是不对的,且symbol只能是一个明确的名字

    from pool import futures.process #语法错误
    from pool.futures import process #语法正确
    

    3.2.2.3 两种导入的区别

    相对导入只能在包内部使用,不能跨出包,

    用相对导入不同目录下的模块是非法的,所以相对导入仅限于包内模板彼此之间使用

    而绝对导入是没有任何限制的,所以绝对导入是一种通用的导入方式

    3.2.3 __all__控制导入

    from package import *		# 使用from ... import *形式导入时
    
    __all__=['process','thread']  # 可以通过在__init__.py文件中为__all__赋值控制导入的所有变量
    
  • 相关阅读:
    20145331 《信息安全系统设计基础》实验一 开发环境的熟悉
    201453331 《信息安全系统设计基础》期中总结
    20145331 《信息安全系统设计基础》第7周学习总结
    20145331《信息安全系统设计基础》第六周学习总结
    20145331 《信息安全系统设计基础》第5周学习实践部分总结及代码分析
    20145331 《信息安全系统设计基础》第5周学习总结
    20145331 《信息安全系统设计基础》第3周学习总结
    20145331 《信息安全系统设计基础》第2周学习总结
    20145331 《信息安全系统设计基础》第1周学习总结
    20145330 《信息安全系统设计基础》第10周学习总结
  • 原文地址:https://www.cnblogs.com/achai222/p/12592591.html
Copyright © 2011-2022 走看看