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__赋值控制导入的所有变量
    
  • 相关阅读:
    去除 SQL Server 查询结果中的两边空格
    Ubuntu 中安装 Oracle 10g
    不同格式的下拉列表框
    闲来无趣,写了个简单的JavaScript验证码
    Ubuntu 任务前后台调度管理
    C#数据类型转换,Convert
    OleDbType,C#,access 对应数据类型,互相对应
    SQL 将查询出的表当做 value 插入到表中
    asp.net mvc && asp.net 页面跳转
    asp.net mvc 与 asp.net结合(asp.net mvc 技巧)
  • 原文地址:https://www.cnblogs.com/achai222/p/12592591.html
Copyright © 2011-2022 走看看