python import和from xx import xx的理解
python import, from xx import xx的一些理解, 以及解答一些from xx import xx可以, import xx无效的情况
- 先挂标准解释
- 原文
- 翻译(google)
- 主要讨论import 和 from import
- 通俗理解
- 不讲概念了, 直接案例
- 先使用import
- 接着from import
- 在flask中不使用blueprint, 又想分文件, 所以遇到改问题
- 最后理解
先挂标准解释
引用地址–>http://effbot.org/zone/import-confusion.htm
原文
import X imports the module X, and creates a reference to that module in the current namespace. Or in other words, after you’ve run this statement, you can use X.name to refer to things defined in module X.
from X import * imports the module X, and creates references in the current namespace to all public objects defined by that module (that is, everything that doesn’t have a name starting with “_”). Or in other words, after you’ve run this statement, you can simply use a plain name to refer to things defined in module X. But X itself is not defined, so X.name doesn’t work. And if name was already defined, it is replaced by the new version. And if name in X is changed to point to some other object, your module won’t notice.
from X import a, b, c imports the module X, and creates references in the current namespace to the given objects. Or in other words, you can now use a and b and c in your program.
Finally, X = import(‘X’) works like import X, with the difference that you 1) pass the module name as a string, and 2) explicitly assign it to a variable in your current namespace.
翻译(google)
import X导入模块X,并在当前名称空间中创建对该模块的引用。换句话说,运行此语句后,可以使用X.name引用模块X中定义的内容。
from X import *导入模块X,并在当前名称空间中创建对该模块定义的所有公共对象的引用(即,所有不具有以“ _”开头的名称的对象)。换句话说,运行该语句后,您可以简单地使用一个简单的名称来引用模块X中定义的内容。但是X本身未定义,因此 X.name不起作用。如果已经定义了名称,则将其替换为新版本。而且,如果将X中的名称更改为指向其他对象,则您的模块将不会注意到。
from X import a, b, c导入模块X,并在当前名称空间中创建对给定对象的引用。换句话说,您现在可以在程序中使用a,b和c。
最后,X = __import __(‘X’)的作用类似于import X,不同之处在于您1)将模块名称作为字符串传递,以及2)将其显式分配给当前名称空间中的变量。
主要讨论import 和 from import
通俗理解
例:import time
直接import 导入, 开辟内存空间time, 将time模块下的代码读入内存, 例: sleep, 通过time.sleep()使用, 简单来说就是当前运行就只有一个time变量例: from time import sleep
在当前工作空间创建sleep变量, 直接sleep()使用, 所有容易被覆盖
不讲概念了, 直接案例
先使用import
-----新建a.py------------------------------------------------------------------------------------------
example = {'a': 0}
# 主要关注import b
import bif __name__ == "__main__":print(example)print(b.example)
-----新建b.py------------------------------------------------------------------------------------------
from a import exampleexample['b'] = 0
运行a.py后打印
{'a': 0}
{'a': 0, 'b': 0}
解释:
从上往下依次理解
新建example = {‘a’: 0}
import b: 运行b.py到from a import example:
又重新执行一个a.py到example(!!!注意这里的example是另外一个了),
接着example[‘b’] = 0, 执行完b.py回到a.py打印第一个example, 这个很好理解,
接着一个b.example是因为重新执行一个a.py中获取到example = {‘a’: 0}在执行example[‘b’] = 0
所以最后打印结果
接着from import
-----新建a.py------------------------------------------------------------------------------------------
example = {'a': 0}
# 主要关注from b import *
from b improt *if __name__ == "__main__":print(example)
-----新建b.py------------------------------------------------------------------------------------------
from a import exampleexample['b'] = 0
运行a.py后打印
{'a': 0, 'b': 0}
解释:
从上往下依次理解
新建example = {‘a’: 0}
from b improt *: 运行b.py,
from a import example
example[‘b’] = 0
将b中变量都在a中创建一个, 这时候b中第二个example就会覆盖掉a中example
所以最后打印结果
{'a': 0, 'b': 0}
在flask中不使用blueprint, 又想分文件, 所以遇到改问题
最后理解
原文:https://www.jianshu.com/p/a2cbf2bddf83
在Python中,导入并不是把一个文件文本插入另一个文件中。导入其实是运行时的运算,程序第一次导入指定文件时,会执行三个步骤。
1、搜索找到模块文件。
2、编译成字节码(需要时)。
3、执行模块的代码来创建其所定义的对象,定义 import 语句所在文件的作用域的局部命名空间中的一个或多个变量名。这三个步骤只在模块第一次导入时才会执行。在这之后,导入相同模块时,会跳过这三个步骤,而只是提取内存中已加载的模块对象。这是有意而为之的,因为该操作开销较大。如果你在模块已加载后还需要再次导入(例如,为了支持终端用户的定制),你就得通过调用 reload() 强制导入模块。从技术上讲,Python 把载入的模块存储到一个名为 sys.modules 的表中,并在导入操作的开始检查该表。如果模块不存在,将会自动执行上面的三个步骤。
看完后理解了为何在循环导入有疑问时, 在运行文件和模块文件都加入print语句运行文件会执行两次, 而模块文件却不会, 是因为运行是没有当做导入的, 所以不会存在导入模块表中, 然后当模块文件重新导入运行文件时, 这时候运行文件就被当做模块文件导入了, 所以运行文件经常被加载两次, 而模块文件之后加载一次, 之后的导入都是去模块文件加载内存中去取变量
python import和from xx import xx的理解相关推荐
- 协议 + socket import 和 form xx import *的区别 028
协议 + socket import 和 form xx import *的区别 028 一 . 网络通信协议(了解) 1 . osi 七层协议 (最好记住 面试会问) 应表会传网数物(应用层 表示层 ...
- python基础--自定义模块、import、from......import......
自定义模块.import.from......import...... 1)模块的定义和分类 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例 ...
- [ 转]Python模块(二)import和from...import的区别
Python模块(二)import和from...import的区别 听语音 原创 | 浏览:2975 | 更新:2018-04-02 13:02 | 标签:PYTHON 1 2 3 4 5 6 7 ...
- Python 学习之二: module, import 与 import as
2019独角兽企业重金招聘Python工程师标准>>> http://blog.csdn.net/fanshengchong/article/details/7039692 Pyth ...
- Ubuntu下python升级pip(ImportError: cannot import name 'main')
简述 在网上根据 https://blog.csdn.net/Mr_Cat123/article/details/80427511 升级pip遇到了这个问题. Traceback (most rece ...
- Bug总结:python语言中出现的import error错误的解决思路
Bug总结:python语言中出现的import error错误的解决思路 目录 解决问题 解决方法 解决问题 import error错误 解决方法 T1.查看是否存在该包,要么是python集成好 ...
- python type help copyright_Python关于import的实验(8)__init__.py文件内部代码的执行以及内部的导入和内部的变量...
Python官方文档参考链接: 常规包 Python 定义了两种类型的包,常规包 和 命名空间包. 常规包是传统的包类型,它们在 Python 3.2 及之前就已存在. 常规包通常以一个包含 __in ...
- python from import 路径_python from...import *
python from...import * 最近在写代码的时候,导入包总是出现一些问题,应该是form...import还没有很好的掌握. 查了一些资料,总结如下: import模块:导入一个模块: ...
- python cannot import name main_virtualenv: cannot import name 'main'
问题 I'm having a little trouble with virtualenv on Mac OS X Yosemite. After I couldn't run virtualenv ...
最新文章
- dos环境下mysql的访问_MYSQL dos环境下使用
- java css_JavaWeb中基本的CSS的使用
- 2019厦门科技中学计算机特长,中考快讯 | 2019厦门市高中特长生招生学校名单出炉!...
- kickStart脚本
- WinCE EBOOT中的BootPart分析
- 有间距的表格布局 table布局
- 2021年你想转行吗?写给迷茫的你!
- [日常工作]非Windows Server 系统远程经常断以及提高性能的方法
- 汇编中DOSBox的使用
- 信息系统项目管理师通过率是多少?
- 基于Eclipse+Java+Swing+Mysql实现旅游管理信息系统
- html调取android手机录音并保存,html5网页录音插件Recorder
- arcgis实现cad图斑批量导入后,图斑颜色设置cad图层颜色保持一致
- 二、Contiki移植
- 在PPT中批量导入图片
- 最新论文笔记(+11):Privacy-Preserving Searchable Encryption Framework for Permissioned Blockchain Networks
- [BZOJ2069][POI2004]ZAW
- 苹果CMSV10最新初恋视界手机版模板
- uni-app 最简单的显示隐藏
- 王道书 P360 T03(计数排序)