在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. Bug搬运工-CSCux99539:Intermittent error message "Power supply 2 failed or shutdown"

    Description Symptom:Following error messages will be seen intermittently.%PFMA-2-PS_FAIL: Power supp ...

  2. samba对外开放的端口

    前言搭建samba的时候,如果是在内网\测试环境中,可以直接关闭防火墙,但是如果是在外网情况下,需要对防火墙开放某些端口.开放的具体步骤,下面我们来看. 操作步骤1.添加端口 firewall-cmd ...

  3. selenium+python自动化用例登陆界面模板

    一.基本逻辑 1.自动填写用户名和密码登录成功后跳转到相应页面 2.验证相应页面的url与给定的url是否一致,如果一致则测试通过,如果不一致则不通过 二.以jenkins登陆界面为例,代码如下 fr ...

  4. springboot多模块项目打war包

    一.父模块配置 1,指定pakaging:pom 2,指定编译的版本:如下图: <properties> <project.build.sourceEncoding>UTF-8 ...

  5. 日期相关类data,simpledataformat类

    (1) (2)

  6. 【C语言】找出1000以内的水仙花数

    什么是水仙花数? 水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153). 代码1: #include<stdio.h> ...

  7. SpringBoot 系列

    https://my.oschina.net/xiedeshou?tab=newest&catalogId=5936801 SpringBoot | 第零章:前言 SpringBoot | 第 ...

  8. Python:列表类型

    概念 列表:有序的,可变的,元素集合 因为列表和字符串都是序列类型,所以很多操作和字符串很相似 但是注意:列表是可变类型,字符串是不可变类型 定义 基本定义 定义方法:[ 元素1, 元素2, .... ...

  9. 批处理执行Testng

    @echo off set LIB=项目的jar路径 set CLASSPATH=%LIB%\jar\commons-beanutils-.jar;%LIB%\jar\testng.jar;%LIB% ...

  10. 单播反向路径转发uRPF

    uRPF将数据包的源地址和存储在转发信息库(FIB)中的信息进行对照,以判定数据包的合法性.FIB是Cisco CEF技术中的一张表,包含从路由表中复制过来的转发信息,可以将其视为路由表的镜像,FIB ...