IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> python中import和from...import...有关头文件的使用方法及工作原理 -> 正文阅读

[Python知识库]python中import和from...import...有关头文件的使用方法及工作原理

一、前言

今天在看复刻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_shell

from 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知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-04-04 12:06:36  更:2022-04-04 12:08:19 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 20:36:31-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码