在python 中导入模块是我们最常用的功能,基本每个.py 文件中都会有 import 或者是 from * import 语句,可是,这两种方法有什么不同,有该怎么用?今天就好好分析一下。

先上定义:

  模块导入允许我们将一个个独立的程序功能分别实现然后组合成一个复杂的系统。

  主要有以下作用:

  代码重用:

    我们知道一段代码需要用到两次的时候,我们就需要写一个函数了这是一个道理。

  避免变量名冲突:

    每个模块都将变量名封装进了自己包含的软件包,这可以避免变量名的冲突,除非使用精确导入。

import 语句

  import 语句就是这样, 也可以在一行内导入多个模块:

    import module1[, module[...moduleN]]

  但是这样的代码可读性不如多行导入语句,而且在性能上和生成 Python 字节码时这两种做法没有什么不同,所以一般情况下,我们使用第一种格式。

  import 工作方式:

    其中,导入程序搜索的目录如下:

    import 解释  ;

      加湿器执行到 import 语句,如果早搜索路径中找到了指定的模块,就会加载它,该过程遵循 LEGB 作用域原则,如果在一个模块中顶层导入,那么它就是全局的,如果早函数中导入,那么它的作用域就是局部的,如果模块时被第一次导入,它将被加载并执行:

   import as 语句

    有时候你导入的模块或是模块属性名称已经在你的城中使用了,或者你不想使用导入的名字,可能时它太长不便输入什么的,总之你不喜欢它,这已经成为 Python 程序员的一个普遍要求,使用自己想要的名字替换模块的原始名字。一个普遍的解决方案就是把模块复制给一个变量。这样便于自己使用。

  from-import 语句

    你可以在你的模块中导入指定的模块属性,也就是指定名称导入到当前的作用域。

    使用:

      from-import 语句可以实现我们的目的,它的语法是:

      from module import name1,[name2..[name3...]]

  from *

    当我们使用 from * 的时候,会取得模块顶层左右赋值的变量名的拷贝。

      注意:  当我们使用这种方法时,就会出现变量名的重复问题,因为我们把另外一个模块中的所有变量导入进来。在命名的时候会出现命名冲突的情况。

    导入只发生一次

      一个模块只被加载一次,无论它被导入多少次。

      如果你的模块导入了 sys 模块。而你要导入的其他的5个模块也导入了它,那么每次都加载 sys (或是其他模块)不是明治之举,加载只在导入时发生。

  import 和 from 是赋值语句

    像 def 一样,import 和 from 是可执行的语句,他们可以出现在 if 中,可以出现在函数中,执行这些语句的时候才会进行解析,也就是说,被导入的模块和变量名只有在对应的 import 或 from 语句执行后才可以使用。

    import 将整个模块对象赋值给一个变量名

    from 将一个或多个变量名赋值给另外一个模块中同名的对象,所以 from 容易污染命名空间。

为什么不建议使用 “from * import ”

  在实战中, “from module import * ” 不是良好的编程风格,如果使用 from 导入变量,且那些变量碰巧和作用域中现有的变量名同名,那么变量就会悄悄覆盖掉,使用 import 语句时后就不会发生着中问题,因为我们是通过模块名才获取的变量名,像 module attr 不会和现有的作用域的 attr 冲突。

  何时使用 from module import:

    我们只在两种场合下建议使用这样的方法,一个场合是:目标模块中的属性非常多,杜甫键入模块名不方便,例如: Tkinter (Python/TK)和 Numpy (Numeric Python)模块,可能还有 socket 模块。

  另外一个场合实在交互解释器下,因为这样可以减少输入次数。

python中:from * import 与 import 详解的更多相关文章

  1. python中argparse模块用法实例详解

    python中argparse模块用法实例详解 这篇文章主要介绍了python中argparse模块用法,以实例形式较为详细的分析了argparse模块解析命令行参数的使用技巧,需要的朋友可以参考下 ...

  2. **Python中的深拷贝和浅拷贝详解

    Python中的深拷贝和浅拷贝详解   这篇文章主要介绍了Python中的深拷贝和浅拷贝详解,本文讲解了变量-对象-引用.可变对象-不可变对象.拷贝等内容.   要说清楚Python中的深浅拷贝,需要 ...

  3. python中requests库使用方法详解

    目录 python中requests库使用方法详解 官方文档 什么是Requests 安装Requests库 基本的GET请求 带参数的GET请求 解析json 添加headers 基本POST请求 ...

  4. python中的subprocess.Popen()使用详解---以及注意的问题(死锁)

    从python2.4版本开始,可以用subprocess这个模块来产生子进程,并连接到子进程的标准输入/输出/错误中去,还可以得到子进程的返回值. subprocess意在替代其他几个老的模块或者函数 ...

  5. Python中random模块生成随机数详解

    Python中random模块生成随机数详解 本文给大家汇总了一下在Python中random模块中最常用的生成随机数的方法,有需要的小伙伴可以参考下 Python中的random模块用于生成随机数. ...

  6. Python中的变量和作用域详解

    Python中的变量和作用域详解 python中的作用域分4种情况: L:local,局部作用域,即函数中定义的变量: E:enclosing,嵌套的父级函数的局部作用域,即包含此函数的上级函数的局部 ...

  7. Python中%r和%s的详解及区别_python_脚本之家

    Python中%r和%s的详解及区别_python_脚本之家 https://www.jb51.net/article/108589.htm

  8. 第7.15节 Python中classmethod定义的类方法详解

    第7.15节  Python中classmethod定义的类方法详解 类中的方法,除了实例方法外,还有两种方法,分别是类方法和静态方法.本节介绍类方法的定义和使用. 一.    类方法的定义 在类中定 ...

  9. 三十一、python中urllib和requests包详解

    A.urllibimport urllibimport urllib.requestimport json '''1.loads,dumpsjson.loads():将字符串转化成python的基础数 ...

  10. python中os.walk的用法详解

    python中os.walk是一个简单易用的文件.目录遍历器,可以帮助我们高效的处理文件.目录方面的事情. 1.载入要使用os.walk,首先要载入该函数 可以使用以下两种方法 import os f ...

随机推荐

  1. [杭电_HDU] 2013

    #include <iostream> using namespace std; int main() { int n; while (cin >> n) { ; //最终桃子 ...

  2. 511,display:inline-block什么时候不会显示间隙?

    (百科: 在CSS布局中,如果我们想要将一些元素在同一行显示,其中的一种方法就是把要同行显示的元素设置display属性为inline-block,但是你会发现这些同行显示的inline-block元 ...

  3. 银行T0理财怎么选

    ## 从现金管理说开去 现金是资产配置中的基石,买股票需要花掉现金,吃饭消费也要花掉现金.现金和我们的生活息息相关,需要慎重地管理起来,因此现金管理应运而生. 现金管理需要兼顾 *流动性* 和 *收益 ...

  4. php的str_pad()函数

    实例 填充字符串的右侧,到30个字符的新长度 <?php $str = "Hello World"; echo str_pad($str,30,"."); ...

  5. Linux环境下mysql报错:bash: mysql: command not found 的解决方法

    # mysql -u root-bash: mysql: command not found 原因:这是由于系统默认会查找/usr/bin下的命令. 如果这个命令不在这个目录下,当然会找不到命令. 我 ...

  6. Dart语言学习(七)Dart Map类型

    映射(Maps)是无序的键值对: 常用属性: keys 获取所有的key值 values 获取所有的value值 isEmpty 是否为空 isNotEmpty 是否不为空 常用方法: remove( ...

  7. 2020 安恒2月月赛 misc

    题目链接:https://pan.baidu.com/s/19l54Nukt6evOr4UgbHMXIQ 提取码:1qbs 0x01 lemonEssence 咦?在kali打开是出错,改宽后图片变了 ...

  8. CLI配置WLAN-PSK认证和802.1X认证

    一.该部分配置主要是针对PSK认证 1.创建WLAN 2 2.让WLAN使用PSK的方式 config wlan create 2 OK OK  //创建WLAN Profile Name和SSID ...

  9. C语言程序设计(二)

    目录:   1.算法基本概念 2.认识循环语句 3.算法的表示法 4.求素数 5.求闰年 6.判断一个数是否为回文数 算法基本概念: (一)一个程序主要包含的2方面信息: 1.对数据的描述,在程序中要 ...

  10. 公用技术——面向对象领域——UML图——《The Unified Modeling Language User Guide》V2读书笔记——第一章节(建模的意义)

    第一章节到第三章节介绍UML的基本概念.第一章节主要介绍了UML语言的历史,介绍了建模的重要性(狗窝,房子,大厦),介绍了UML要实现哪些目标,在最后介绍了在使用UML语言时应该遵循的一些原则或者是规 ...