返回顶部
首页 > 资讯 > 后端开发 > Python >Python:import 与__imp
  • 805
分享到

Python:import 与__imp

Pythonimport__imp 2023-01-30 22:01:19 805人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

首先来说一下两者的区别:   import指令做了两件事:1)搜索module,2)绑定到局部变量   内置函数__import__()只做了一件事:搜索module   import指令执行过程中是调用__import__()来

首先来说一下两者的区别:

  import指令做了两件事:1)搜索module,2)绑定到局部变量
  内置函数__import__()只做了一件事:搜索module

  import指令执行过程中是调用__import__()来完成Module检索的。

 

搜索module的过程:

在了解搜索的过程前,先来了解一下内部实现中的几个角色:
         a)已经搜索过的module会存在于一个module缓存(sys.modules)中。
         b)finders | importers: 用于搜索module在哪里,找到后返回的是module-spec (包含Module在哪里,该用那个loader进行加载等信息)。
                    其中finders是从build-in 模块中找,importers是从其他位置找。
                    importers是可扩展的,可以支持文件系统某个路径、zip、urls。
         c)loaders: 依据modulespec 进行加载,生成python中的module
                    module = modulespec.loader.load_module(modulespec.name)

搜索过程如下:

 

1)如果要搜索的module 的name 在缓存(sys.modules )中,则进行如下操作:
      1.1)如果值是None,抛出 ModuleNotFoundError
      1.2)值不是None,直接返回值
2)由finders从内置模块里找,找不到由importer去找,importers也找不到,module的name到缓存,值为None,然后raise ModuleNotFoundError。
             在使用importers去找的时候,如果发现了有.pyc,需要先检查.pyc是否最新。
             找到后,返回 生成创建一个module-spec
3)由module-spec中的loader去加载并执行module:
             module = modulespec.loader.load_module(modulespec.name)
             sys.modules[modulespec.name] = module
             modulespec.loader.exec_module(module)
4)最终没有找到,记录module的name到缓存,值为None,然后 raise ModuleNotFoundError

 

想要了解更多,可以参考 https://docs.Python.org/3/reference/import.html

 

--结束END--

本文标题: Python:import 与__imp

本文链接: https://lsjlt.com/news/179645.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python:import 与__imp
    首先来说一下两者的区别:   import指令做了两件事:1)搜索module,2)绑定到局部变量   内置函数__import__()只做了一件事:搜索module   import指令执行过程中是调用__import__()来...
    99+
    2023-01-30
    Python import __imp
  • jsp与js与jquery的区别
    jsp与js与jquery的区别:1、js是javascript文件的文件后缀。2、jquery 是一个函数库,是基于javascript的。3、jsp是jsp网页文件的后缀。js是javascript文件的文件后缀,其实就像文本文档a.t...
    99+
    2024-04-02
  • MySQL 编码utf8 与 utf8mb4 utf8mb4_unicode_ci 与 utf8mb4_general_ci
    参考:mysql字符集小结 utf8mb4 已成为 MySQL 8.0 的默认字符集,在MySQL 8.0.1及更高版本中将 utf8mb4_0900_ai_ci 作为默认排序规则。 新项目只考虑 utf8mb4 U...
    99+
    2022-05-15
    mysql 编码 utf8 utf8mb4 mysql 编码
  • FFmpeg安装与配置(windows与mac)
    FFmpeg命令行安装 使用如下命令进行FFmpeg: sudo apt-get install ffmpeg FFmpeg源码安装 FFmpeg源码获取 使用如下命令获取ffmpeg的源码: git clone  ht...
    99+
    2023-09-02
    ffmpeg
  • html与html5的关系与区别
    html5 是 html 的最新版本,于 2014 年发布,继承并扩展了 html 的语法和结构,增加了许多新功能,提供更丰富的网络体验。它的主要区别包括:引入了新元素和属性,支持多媒体...
    99+
    2024-04-21
    css 地理位置 sessionstorage
  • JAVA与SQL 中的null与NULL解析
    目录一、前言看下面我做的一个简单的测试:二、Java中的null引发这个异常的情况有:2.1 大小写2.2 默认的初值2.3 类型2.4 对null的检查== 与 !=instanc...
    99+
    2024-04-02
  • Socket与ServerSocket类构造方法与API
    目录Socket类概述:构造方法:API:ServerSocket类概述:构造方法:API:Socket类 概述: socket可以使一个应用从网络中读取和写入数据,不同计算机上的两...
    99+
    2024-04-02
  • java 中Comparable与Comparator详解与比较
    java 中Comparable与Comparator详解今天查看TreeMap的源码,发现其键必须是实现Comparable或者Comparator的接口时产生了一些兴趣,比如在TreeMap中的put方法分别对Comparable和Co...
    99+
    2023-05-31
    java comparable comparator
  • 【JAVA】JAVA与C++的区别与联系
    个人主页:【😊个人主页】 系列专栏:【❤️初识JAVA】 文章目录 前言两方介绍C++JAVA 不同==|Java不支持指针、模板、指针重载、联合等|====|支持析构函数|====|条件编译和包含|...
    99+
    2023-08-16
    java c++ 开发语言
  • SQL与NoSQL
    一,关系数据库(RDB)    关系型数据库作为传统的数据库,支持完整的ACID属性,其中声明式的SQL语法屏蔽了底层的实现细节,同时关系数据模型也符合人的正常思维逻...
    99+
    2024-04-02
  • RMAN与EXP
    RMAN是基于物理结构的备份,基于数据块的备份,支持与online redolog和archive redolog一起做恢复操作,是Oracle推荐的备份恢复工具。DataDump (IMP/EXP、IM...
    99+
    2024-04-02
  • CSRF与XSS
    Wordpress(低版本)与XSSer 复现过程 首先在虚拟机上搭建wordpress 在wordpress的管理用户界面,可以看到只有admin一个用户 ...
    99+
    2024-04-02
  • LINKEDSERVER 与 ALIAS
    通过在SQL03上“查找CPU消耗前十的查询”(脚本如下所示)时发现,第一名是一个奇怪的语句。 SELECT TOP ( 10 )  &n...
    99+
    2024-04-02
  • SNAT与DNAT
    一、SNAT和DNAT简介 SNAT:局域网共享一个公网IP接入lnternel,好处如下 保护内网用户安全,因为公网地址总有一些人恶意扫描,而内网地址在公网没有路由所以无法被扫描,能被扫描的只有防火墙这一台,这样就减少了被攻击的可能。Ip...
    99+
    2023-08-31
    服务器 linux 网络
  • BeautifulSoup与aiohtt
      香港电台的节目素质都比较不错,其中有个《中华五千年》的节目是以情景剧与旁白的形式来展示历史故事,由传说时代一直到民国,1983年首播至2000年,非常长寿的一个节目。网上能找到版本声音非常模糊,不过在其《网上中华五千年》的网站上可以在...
    99+
    2023-01-31
    BeautifulSoup aiohtt
  • raw_input() 与 input(
    raw_input() 与 input() __ Python这两个均是 python 的内建函数,通过读取控制台的输入与用户实现交互。但他们的功能不尽相同。举两个小例子。 1 >>> raw_input_A = raw_...
    99+
    2023-01-31
    raw_input input
  • python与Excel
    1.1 什么是python?Python是一种解释型、面向对象、动态数据类型的高级程序设计语言。被称为胶水语言,Python应用场景广泛,比如WEB开发、网络编程、爬虫、云计算、人工智能、自动化运维、数据分析、游戏开发等……好像有点无所不能...
    99+
    2023-01-31
    python Excel
  • pip2 与 pip3
        在一台电脑同时安装 python2 和 python3,如果使用 pip install 的话,只会给 python2 安装应用,那么,怎样给 python3 安装应用呢?分别在Python2 和 Python3 安装 pip 管理...
    99+
    2023-01-31
  • python3.5.2与python2.
        今天准备了一台centos7的虚拟机,想拿来当python小霸王学习机。系统自带python版本2.7.5,经过我认真琢磨,要学咱就学新版本小py,所以果断安装了一个python3.5.2    下载解压,进入目录,因为怕直接安装完...
    99+
    2023-01-31
  • Storefront与NetScaler
    Storefront与NetScaler的集成配置 - part1http://kaiqian.blog.51cto.com/blog/236001/1344447Storefront与NetScaler的集成配置 - part2http:...
    99+
    2023-01-31
    Storefront NetScaler
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作