返回顶部
首页 > 资讯 > 后端开发 > Python >Importing Python Mod
  • 149
分享到

Importing Python Mod

ImportingPythonMod 2023-01-31 01:01:42 149人浏览 薄情痞子

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

摘要

原文:Http://effbot.org/zone/import-confusion.htm 简介 import 和 from-import 对于python新手经常带来严重的混淆,不过相信大家一旦清楚它们的实现机理后就不会对使用他们有任何

原文:Http://effbot.org/zone/import-confusion.htm

简介

import 和 from-import 对于python新手经常带来严重的混淆,不过相信大家一旦清楚它们的实现机理后就不会对使用他们有任何困惑了。
这篇文章将努力理清import和from-import 相关的一切。

import modules的几种方式

Python提供至少三种方式来import modules。使用import、from或者内置的__import__function,篇幅所限本文不讨论其他的非主流方式。
下面是这几种方式的实现原理:
  • import X 导入module X,并且在当前命名空间创建到X的引用。换言之,import X后就可以使用X.name使用模块X中的东东了。
  • from X import * 导入module X,并且在当前命名空间创建到X中所有public对象(即除去名称以"_”开头的所有对象)的引用。亦即执行这条语句后,可以直接使用名字使用module X中的东西。但是因为X自身是未定义的,所以无法使用X.name。命名重复时会使用较新的版本,如果X中该名称已经指向其他对象你的模块也不会察觉。这也是该方法的危险之处,虽然用起来方便但容易不知觉间产生BUG。
  • from X import a, b, c 导入module X,并且在当前命名空间创建给定对象的引用,现在可以直接使用a、b和c了。
  • X = __import__(‘X’) 与import X比较相似,不同之处在于:1)可以使用一个string传递module的名字 2)可在当前命名空间将其赋值给一个变量(这在导入的module名称不确定或希望动态导入module时非常有用)

应该采用哪一种?

简而言之:尽量用import。
以下几处情形例外:
  • Module文档要求使用from-import。常见的例子是Tkinter,其被设计为仅向当前命名空间添加widget classes和相关的常量。如果使用import Tkinter会使你的代码可读性很差,故通常不推荐这样做。
  • 导入一个包中的组件。当只需要导入包中一个特定的子module时,使用from io.drivers import zip通常要比import io.drivers.zip方便一些,因为前者可以让我们简单地用zip就可以使用这个module,而不是使用它的全名io.drivers.zip。在这种情况下,from-import起到的作用很像简化的import,而且没有什么命名混淆的风险。
  • 在执行前不清楚module的名字。在这种情况下应该使用__import__(module_name),其中module_name是Python string,这样可以在变更module名称时不需要改动代码。
  • 对自己将做什么非常清楚。如果确认如此那尽可以去用from import,但是一定要三思而后行;-)

Python是如何导入module的?

当Python导入module时,它首先检查module注册表(sys.modules)确认是否该module已经被导入过,如果存在就使用已导入的module代替它。
否则,Python将执行以下步骤:
  1. 创建一个新的空module对象(其本质是一个dictionary)
  2. 将该module对象插入到sys.modules dictionary中
  3. 加载module的代码对象(如果需要会先编译这个module)
  4. 在新module的命名空间执行该module的代码对象,代码中赋值的所有变量在该module对象里可用。通过该module对象中Execute the module code object in the new module’s namespace. All variables assigned by the code will be available via the module object.
这意味着导入一个已经加载的module性能消耗是非常小的,Python只需要在dictionary中查找下module的名字就可以了。

其他要点

使用module作为脚本

如果你将一个module作为脚本运行,即直接将其名称给编译器而非导入它,那它将以名称__main__加载。
如果稍后在程序中加载同一个module,它将被重新加载并以其真实的名称重新执行,所以如果不细心的话可能会做两次同样的事。

循环导入

在Python中,像def、class和import之类的语句都是声明。
module在导入时被执行,但新的函数和类并不会添加到module的命名空间中直到执行def或class进行声明,这在循环导入会有很明显的影响。
比如module X导入module Y并定义一个函数spam:
    # module X
    import Y
    def spam():
        print "function in module x"
如果从主程序中导入X,Python将加载X的代码并执行它。当Python到import Y这一行声明时,它加载Y的代码并转而执行Y的代码。
此时,Python已经在sys.modules中加载了X和Y。但X还不包含任何东西,def spam这行声明还未执行。
现在如果Y导入X(出现循环导入),它将得到一个指向空module X对象的引用,但如果试图调用函数X.spam将会失败,因为此时虽然存在X但并不存在X.spam:
    # module Y
    from X import spam # doesn't work: spam isn't defined yet!
这个问题和使用from-import无关,即使换用import也会如此:
    # module Y
    import X
    X.spam() # doesn't work either: spam isn't defined yet!
解决的方法就是重构代码来避免循环导入,通常可以通过将部分内容拆分到单独的module来解决。这种解决方式类似于c++中解决循环引用时使用前置声明将声明和定义分离的方法,即将冲突的执行代码分拆到其他文件。
或者将import移到module的末尾,比如上面的例子如果将import Y移到module X的末尾就可以一切正常了,但其实并不总奏效,万一X.spam使用过Y就又出错了。

--结束END--

本文标题: Importing Python Mod

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

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

猜你喜欢
  • Importing Python Mod
    原文:http://effbot.org/zone/import-confusion.htm 简介 import 和 from-import 对于Python新手经常带来严重的混淆,不过相信大家一旦清楚它们的实现机理后就不会对使用他们有任何...
    99+
    2023-01-31
    Importing Python Mod
  • apache+mod-python
    1.install Python最新的Ubuntu操作系统是含有Python的,可以通过 Python --version 查看的:lab@lab:~$ python versionPython 2.7.1+2.install MySQL使...
    99+
    2023-01-31
    apache mod python
  • Python django学习之:mod
    1. 建立app在自己的工程项目目录下输入:python manage.py startapp myapp(你想建立的app名称)建立一个叫myapp的app这样,在你的工程项目目录下会出现一个叫myapp的目录2. 创建Model在app...
    99+
    2023-01-31
    Python django mod
  • 充分理解 python -m mod
    最近在看 __main__ 的官方文档 —— https://docs.python.org/3/library/__main__.html#module-__main__,提到一个 python -m 的用法,很是不理解,所以查找了很多...
    99+
    2023-01-31
    python mod
  • python中mod函数如何用
    在Python中,取模运算符(%)可以用来计算两个数的余数。它可以用于整数、浮点数和复数的取模运算。以下是一些使用取模运算符的示例:...
    99+
    2023-08-23
    python
  • ImportError: No mod
    报错如下错误:>>> import sqlite3Traceback (most recent call last):  File "<stdin>", line 1, in <module>  F...
    99+
    2023-01-31
    ImportError mod
  • golang怎么迁移mod
    随着Golang的不断发展和更新,更高效和更实用的功能得以加入到该语言的生态系统中。其中Mod是很多Golang开发者都熟知的一个重要的特性,它可以更好地管理Golang项目所需的依赖包。如果你正在使用一个旧版本的Golang,你可能需要迁...
    99+
    2023-05-14
  • 了解“go mod 供应商”
    php小编子墨为您介绍一种名为"go mod 供应商"的技术,它是Go语言的一个重要特性。通过使用"go mod 供应商",开发者可以更好地管理和控制项目所依赖的第三方库。这种技术可以...
    99+
    2024-02-09
    go语言
  • win10下go mod配置方式
    这是因为获取golang.org/x/...时需要翻墙,而我这里没有翻墙,不过没关系 设置下代理即可: // bash mac export GOPROXY=https:...
    99+
    2022-06-07
    win10 GO MOD win
  • go mod详细使用教程
    目录前言使用go path问题govendorgo mod介绍如何使用go modGO111MODULEgo mod命令使用go mod管理一个新项目1. 初始化项目2. 添加依赖g...
    99+
    2024-04-02
  • 详解go mod 使用方法
    目录1、进入grammar文件夹2、初始化目录3、导入自定义的模块4、导入本地没有的模块常用命令1、初始化模块2 、获取远程的模块3、 查看当前依赖模块4、清除未使用到的依赖go m...
    99+
    2024-04-02
  • 简幻云服务器加mod
    简化的云服务器可以添加额外的虚拟机或虚拟服务器来扩展其功能。您可以使用简单的配置,例如增加服务器数量或调整服务器的配置,将简化的云服务器添加到您的环境中。以下是一些简单的步骤: 确定您要添加的云服务器的位置。您需要知道云服务器提供商的位...
    99+
    2023-10-26
    服务器 简幻云 mod
  • sql中mod函数的作用
    sql 中的 mod 函数用于计算两个数字之间的余数。它返回除数 y 除以被除数 x 后剩下的余数。 SQL 中 MOD 函数的作用 MOD 函数是一个 SQL 函数,用于计算两个数字...
    99+
    2024-05-15
  • MOD函数的作用是什么
    这篇文章主要介绍“MOD函数的作用是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“MOD函数的作用是什么”文章能帮助大家解决问题。 功能:返回参数1除以参数2...
    99+
    2024-04-02
  • go mod的使用方法小结
    目录前言1.go modules的基本介绍1.1 提供的命令1.2 提供的环境变量1.2.1 说明2.go modules的基本使用2.1 初始化项目3.使用go mod发布自己的包...
    99+
    2024-04-02
  • matlab中mod函数怎么使用
    在MATLAB中,mod函数用于计算两个数相除的余数。mod函数的语法如下:```r = mod(x, y)```其中,x和y是要计...
    99+
    2023-09-18
    matlab
  • go mod git项目创建步骤
    Go语言的模块管理工具已于Go 1.11版本中正式上线,可以管理依赖包的版本、下载、缓存等等。使用起来十分方便,而且它支持自定义私有仓库、内网镜像,提升了公司内部开发效率。在本文中,我们将介绍如何使用Go mod来管理Git项目的依赖。请按...
    99+
    2023-10-22
  • Go mod包管理工具详解
    目录Go包的概念Go依赖管理的概念Go mod的使用Go mod的优势Go mod常见问题解决总结Go语言作为一门开源的编程语言,已经广泛应用于各个领域。作为一门现代化的编程语言,G...
    99+
    2023-05-19
    Go mod包管理工具 Go mod包 Go mod
  • VBS中Mod运算符的作用
    这篇文章主要介绍“VBS中Mod运算符的作用”,在日常操作中,相信很多人在VBS中Mod运算符的作用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”VBS中Mod运算符的作用”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-06-08
  • sql中的mod是什么意思
    sql 中的 mod 是计算余数的运算符。用法:mod(x, y),其中 x 是被除数,y 是除数。返回 x 除以 y 后的余数,结果始终是非负数。应用场景包括计算星期几、检查奇偶性,以...
    99+
    2024-05-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作