为了节省读友的时间,直接上结论:

【结论】

    1)两种导入方式得到的结果是一个名为sys.modules的字典(键是被导入对象的名称,值是导入对象所在的路径)

    2)就算在不同的位置写了多遍import语句也不会多次导入:导入前都会先去sys.modules中查询,若存在则不再重复导入

    3)两种导入方式的搜索路径一样:脚本运行的当前目录---->python相关的环境变量---->Python安装时指定的默认目录

    4)运行原理:

      1. import xxx:会试图把xxx当做模块来导入,如果搜索失败则报异常:ImportError。跟是否定义过__init__.py和__all__无关,直接搜索并导入xxx
      2. from xxx import yyy:跟是否定义过__init__.py和__all__无关,直接搜索并导入yyy
      3. from xxx import *:会导入包/模块xxx中变量__all__的值所指定的对象(若__init__.py和__all__全部为空,则不导入任何对象)

    5)from xxx import yyy:xxx只能是包或模块;yyy可以是模块、类、函数、变量(python3中不能是包)

    6)主要的使用场景:

      1. 如果代码环境容易同名冲突,则建议使用:import xxx;
      2. 如果代码环境极少同名冲突,为了减少敲代码的量则可以使用from xxx import yyy;
      3. 尽量不要使用from xxx import *(一是容易同名冲突;二是从运行原理可知到底导入了什么取决于变量__all__并不一定跟你预想的一样)

【注意事项】

    1)如果from xxx import *的xxx是,则:一般会在包的__init__.py中定义__all__变量的取值以决定导入的内容,且此时跟模块中定义的__all__无关。例如:

    2)如果from xxx import *的xxx是模块,则:一般会在模块中定义__all__变量的取值以决定导入的内容,例如:

    3)__init__.py中除了常用的定义__all__变量的取值外,高级使用方法可参见:https://zhuanlan.zhihu.com/p/115350758

import和from...import的异同的更多相关文章

  1. import 和from…import

    import 和from-import 一.import模块名 import time print(time.time()) import首次导入模块发生了3件事: 使用import time导入的时 ...

  2. import和from...import

    目录 一.import 模块名 二.from 模块名 import 具体的功能 三.import和from...import...的异同 一般使用import和from...import...导入模块 ...

  3. python中import和from...import区别

    在python用import或者from...import来导入相应的模块.模块其实就是一些函数和类的集合文件,它能实现一些相应的功能,当我们需要使用这些功能的时候,直接把相应的模块导入到我们的程序中 ...

  4. import和from import陷阱二

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 #from os import path import os.path path='/home/vamei/doc/file.txt' ...

  5. python中import和from...import...的区别

    python中import和from...import...的区别: 只用import时,如import xx,引入的xx是模块名,而不是模块内具体的类.函数.变量等成员,使用该模块的成员时需写成xx ...

  6. python的import与from...import的不同之处

    在python用import或者from...import来导入相应的模块.模块其实就是一些函数和类的集合文件,它能实现一些相应的功能,当我们需要使用这些功能的时候,直接把相应的模块导入到我们的程序中 ...

  7. 【pyhton】import math与import cmath

    import math与import cmath分别代表导入math模块和复数math模块 还有一种导入方式是 from math import sqrt 从math中单独导入sqrt 直接可以用sq ...

  8. Python import与from import使用及区别介绍

    Python程序可以调用一组基本的函数(即内建函数),比如print().input()和len()等函数.接下来通过本文给大家介绍Python import与from import使用及区别介绍,感 ...

  9. java中import机制(指定import和import *的区别)

    转自:https://www.cnblogs.com/dtts/p/4692480.html java中有两种包的导入机制,总结如下: 单类型导入(single-type-import),       ...

  10. import 和 from … import 模块的变量、方法引用差异

    import 和 from … import 模块的变量.方法引用差异 还是上面例子中的模块 support.py: def print_func( par ): print "Hello ...

随机推荐

  1. 前端自定义cli

    Windows PowerShell 版权所有 (C) Microsoft Corporation.保留所有权利. 尝试新的跨平台 PowerShell https://aka.ms/pscore6 ...

  2. sort 从大到小从小到大

    简介 虽然可以 写一个cmp函数但是太麻烦 正解 sort(v.rbegin(), v.rend()) 从大到小 sort(v.begin(), v.end()) 从小到大

  3. iPaaS如何实现安全通信保障

    iPaaS概述 iPaaS,即Integration Platform as a Service,是一种云服务模型,旨在提供统一且全面的解决方案,设计.执行.管理和监控云端及本地环境中的应用集成流程. ...

  4. SciTech-Mathmatics-Probability+Statistics-III-Population:Parameter<->Sample:Statistics - Hypothesis Testing假设检验的原理与应用

    SciTech-Mathmatics-Probability+Statistics-III Population:Parameter<->Sample:Statistics Hypothe ...

  5. SciTech-BigDataAIML- Python Data Science Handbook 以及 HTML源码 转Markdown源码 的办法:

    以下文为例: Copy HTML Source code from the web page. Transform the HTML code to Markdown code: https://co ...

  6. SqlServer复制和订阅(实现主从同步) -九五小庞

    1.登录必须是服务器名称不能是ip 2.订阅服务器不需要提前创建数据库 复制方: (1).展开要发布的数据库节点,找到复制下的本地发布 (2).右击本地发布,选择本地发布 (3.下一步选择要发布的数据 ...

  7. CF1922E Increasing Subsequences

    一个显然的思路就是构造很多互不相关的上升序列.但是这样构造出来的 \(n\) 是 \(O(\log_2^2 n)\) 量级的,所以需要考虑新做法. 假设我们本来有一个上升序列,我们能否往里面插数?如果 ...

  8. 传统UGO权限+ACL权限管理结合 控制权限案例分析

    以下是CentOS系统中传统UGO权限管理与ACL权限管理的详细对比及其结合应用场景的解析,附实际案例说明: ​​一.传统UGO权限管理​​ ​​1. 核心机制​​ ​​权限模型​​:将用户分为三类: ...

  9. 6、rt-thread学习

    1.rt-thread软件包管理功能,我们先来了解下软件包的功能定义,软件包是运行rt-thread操作系统平台之上,面向不同应用领域的软件,形成一个个通用性强的软件组件,并由软件包描述信息.文档.示 ...

  10. threading.local的使用

    from threading import local 多个线程操作同一个变量,如果不加锁,会出现数据错乱问题,但是 读个线程同时操作 threading.local 对象 就不会出现数据错乱 作用: ...