目录

  • 一、前言
  • 二、import 工作原理
    • 1、import 执行过程
    • 2、import 执行失败
    • 3、import 执行成功
  • 三、from...import... 工作原理
    • 1、from...import... 执行流程
    • 2、from...import * 补充说明
    • 3、from . import mod 补充说明

一、前言

今天在看复刻transformer代码时突然对import头文件有了想法。

于是就查找官方手册学习并记录下来。

二、import 工作原理

1、import 执行过程

基本的 import 语句(不带 from 子句)会分两步执行:

  1. 查找一个模块,如果有必要还会加载并初始化模块。
  2. 在局部命名空间中为 import 语句发生位置所处的作用域定义一个或多个名称。

当语句包含多个子句(由逗号分隔)时这两个步骤将对每个子句分别执行,如同这些子句被分成独立的 import 语句一样。

import jieba,math# 等价于import jieba
import math

2、import 执行失败

如果这一步失败,则可能说明模块无法找到(没有安装三方库),或者是在初始化模块,包括执行模块代码期间发生了错误。

3、import 执行成功

如果成功获取到请求的模块,则可以通过以下三种方式一之在局部命名空间中使用:

  • 如果模块名称之后带有 as,则跟在 as 之后的名称将直接绑定到所导入的模块。import numpy as np

  • 如果没有指定其他名称,且被导入的模块为最高层级模块,则模块的名称将被绑定到局部命名空间作为对所导入模块的引用。import jieba

  • 如果被导入的模块 不是最高层级模块,则包含该模块的最高层级包的名称将被绑定到局部命名空间作为对该最高层级包的引用。所导入的模块必须使用其完整限定名称来访问而不能直接访问。import matplotlib.pyplot as plt

三、from…import… 工作原理

1、from…import… 执行流程

from 使用的过程繁复些:

  1. 查找 from 子句中指定的模块,如有必要还会加载并初始化模块;

  2. 对于 import 子句中指定的每个标识符:

    • 检查被导入模块是否有该名称的属性

    • 如果没有,尝试导入具有该名称的子模块,然后再次检查被导入模块是否有该属性

    • 如果未找到该属性,则引发 ImportError。

    • 否则的话,将对该值的引用存入局部命名空间,如果有 as 子句则使用其指定的名称,否则使用该属性的名称

2、from…import * 补充说明

如果标识符列表改为一个星号 (’*’),则在模块中定义的全部公有名称都将按 import 语句所在的作用域被绑定到局部命名空间。

当指定要导入哪个模块时,你不必指定模块的绝对名称。 当一个模块或包被包含在另一个包之中时,可以在同一个最高层级包中进行相对导入,而不必提及包名称。

from nltk import download_shellfrom nltk import *

3、from . import mod 补充说明

通过在 from 之后指定的模块或包中使用(’.’),可以在不指定确切名称的情况下指明在当前包层级结构中要上溯多少级。

一个(’.’) 表示是执行导入的模块所在的当前包。

from . import mod
# 则导入pkg.mod

两个(’. .’)表示上溯一个包层级。

from ..subpkg1 import mod
# 则导入pkg.subpkg1.mod

三个(’…’)表示上溯两级,依此类推。

 from ...subpkg2 import mod # 则导入pkg.subpkg1.subpkg2.mod

python中import和from...import...有关头文件的使用方法及工作原理相关推荐

  1. python列表去重函数_对python中两种列表元素去重函数性能的比较方法

    测试函数: 第一种:list的set函数 第二种:{}.fromkeys().keys() 测试代码: #!/usr/bin/python #-*- coding:utf-8 -*- import t ...

  2. Python中NaN、nan和NAN的区别及使用方法

    Python中NaN.nan和NAN的区别及使用方法 Python中的NaN(Not a Number)是一个特殊的浮点数值,用于表示非数值型计算结果或无限大的运算结果,常用于科学计算.数据分析等领域 ...

  3. 【Python中的权限错误:无法访问文件】-- 解决方案

    [Python中的权限错误:无法访问文件]-- 解决方案 在Python编程过程中,我们常常会遇到文件读写.创建.删除等操作.有时候当我们试图进行这些操作时,会出现"PermissionEr ...

  4. Python 中的自动点击器——2 种简单易行的方法

    在本教程中,我们将了解Python 中的自动答题器.我们将首先了解它的含义以及如何在 Python 中实现它.那么,事不宜迟,让我们进入正题. Auto Clicker是一种 Python 软件,允许 ...

  5. python中glob模块怎么下_如何在Python中使用glob.glob模块搜索子文件夹?

    如何在Python中使用glob.glob模块搜索子文件夹? 我想在文件夹中打开一系列子文件夹,找到一些文本文件并打印一些文本文件行. 我用这个: configfiles = glob.glob('C ...

  6. python文件读取方法read(size)的含义是_在Python中可使用read([size])来读取文件中的数据,如果参数size省略,则读取文件中的()。...

    [单选题]李明在他所属的公司工作五年,每天都很认真地处理繁杂的事情,同事们都夸他认真,但是依然没有建树,这是因为: [多选题]品牌标志的作用表现在 [单选题]新产品开发的第一个阶段是_______. ...

  7. python while if 区别_对python中for、if、while的区别与比较方法

    如下所示: if应用举例: #if 若条件成立,只执行一次 #if 条件:如果条件成立,执行条件后的代码块内容,不成立,直接跳过代码块 #判断如果年龄age小于18,输出未成年 #=一个等号表示赋值的 ...

  8. python文件读取方法read(size)的含义是_在Python中可使用read([size])来读取文件中的数据,如果参数size省略,则读取文件中的()。(4.0分)_学小易找答案...

    [单选题]文本文件存储的是(),由若干文本行组成,通常每行以换行符 '\n' 结尾.(4.0分) [单选题]()属性是返回被打开文件的访问模式.(4.0分) [单选题]重力坝是由砼或( )修筑而成的大 ...

  9. python中none算变量吗_在python中对变量判断是否为None的三种方法总结

    三种主要的写法有: 第一种:if X is None; 第二种:if not X: 当X为None,  False, 空字符串"", 0, 空列表[], 空字典{}, 空元组()这 ...

  10. python 中关于无法导入自己写的类。解决方法

    python 中关于无法导入自己写的类.解决方法 参考文章: (1)python 中关于无法导入自己写的类.解决方法 (2)https://www.cnblogs.com/jc-home/p/1209 ...

最新文章

  1. 快速了解Kubernetes微服务中的通信
  2. 深入浅出统计学(十三)假设检验
  3. Ditto剪贴板增强工具 ,方便复制粘贴多条历史记录
  4. Informatica PowerCenter使用介绍-转载
  5. oracle中批量更新,oracle 批量更新
  6. vue seo关键词设置_SEO关键词优化排名的几个技巧
  7. 如何使用ARM创建Teams Bot所需要的Azure资源
  8. python代码大全中文注释_零基础小白必看篇:Python代码注释规范代码实例解析操作(收藏)...
  9. 大数据学习笔记30:搭建高可用Hadoop集群
  10. 2021年软件开发的五大趋势,低代码/无代码得到了验证!
  11. 用AtomicStampedReference/AtomicMarkableReference解决ABA问题
  12. GCC编译器使用简介
  13. C语言 · 字符删除
  14. 二倍图三倍图什么意思_iOS 2倍图 3倍图适配小结
  15. 微信每日早安推送 Windows版
  16. 利用c语言绘制漫天星空-动画
  17. 网页被劫持会造成什么影响
  18. 二次元究竟招惹了谁?谣言煽动背后的文化迷思,警惕有可能发生的思想劫持【文明启示录#01】【补档】
  19. 从龟速 11s 到闪电 1s,详解前端性能优化之首屏加载
  20. windows 下连服务器

热门文章

  1. MySQL中多表的连接
  2. LeetCode_14_python_最长公共前缀
  3. Java-图书管理系统(控制台程序)
  4. 事务的详细讲解,简单易理解,适合小白,无基础也可以懂,什么是事务、事务提交、事务回滚、编程式事务、声明式事务
  5. jenkins使用_Spring Boot 系列:使用 Jenkins 部署 Spring Boot
  6. python模拟足球比赛_博客园仿真足球竞赛平台Python版SDK
  7. linux 删除压缩包_【干货】记住!这些 Linux 命令千万不要运行!
  8. python3编程环境,使用 python3 环境开发。
  9. Uber和Lyft推个人验证PIN码功能降接送混乱
  10. [HNOI2016]树