python中:from * import 与 import 详解
在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 详解的更多相关文章
- python中argparse模块用法实例详解
python中argparse模块用法实例详解 这篇文章主要介绍了python中argparse模块用法,以实例形式较为详细的分析了argparse模块解析命令行参数的使用技巧,需要的朋友可以参考下 ...
- **Python中的深拷贝和浅拷贝详解
Python中的深拷贝和浅拷贝详解 这篇文章主要介绍了Python中的深拷贝和浅拷贝详解,本文讲解了变量-对象-引用.可变对象-不可变对象.拷贝等内容. 要说清楚Python中的深浅拷贝,需要 ...
- python中requests库使用方法详解
目录 python中requests库使用方法详解 官方文档 什么是Requests 安装Requests库 基本的GET请求 带参数的GET请求 解析json 添加headers 基本POST请求 ...
- python中的subprocess.Popen()使用详解---以及注意的问题(死锁)
从python2.4版本开始,可以用subprocess这个模块来产生子进程,并连接到子进程的标准输入/输出/错误中去,还可以得到子进程的返回值. subprocess意在替代其他几个老的模块或者函数 ...
- Python中random模块生成随机数详解
Python中random模块生成随机数详解 本文给大家汇总了一下在Python中random模块中最常用的生成随机数的方法,有需要的小伙伴可以参考下 Python中的random模块用于生成随机数. ...
- Python中的变量和作用域详解
Python中的变量和作用域详解 python中的作用域分4种情况: L:local,局部作用域,即函数中定义的变量: E:enclosing,嵌套的父级函数的局部作用域,即包含此函数的上级函数的局部 ...
- Python中%r和%s的详解及区别_python_脚本之家
Python中%r和%s的详解及区别_python_脚本之家 https://www.jb51.net/article/108589.htm
- 第7.15节 Python中classmethod定义的类方法详解
第7.15节 Python中classmethod定义的类方法详解 类中的方法,除了实例方法外,还有两种方法,分别是类方法和静态方法.本节介绍类方法的定义和使用. 一. 类方法的定义 在类中定 ...
- 三十一、python中urllib和requests包详解
A.urllibimport urllibimport urllib.requestimport json '''1.loads,dumpsjson.loads():将字符串转化成python的基础数 ...
- python中os.walk的用法详解
python中os.walk是一个简单易用的文件.目录遍历器,可以帮助我们高效的处理文件.目录方面的事情. 1.载入要使用os.walk,首先要载入该函数 可以使用以下两种方法 import os f ...
随机推荐
- opencv编译静态库时选择MD模式无效的原因
在Cmake-gui上看到的明明是MD运行库依赖,生成MS项目时却变成了MT运行库依赖. 原因在于编译静态库时内部做了自动替换.
- 每天进步一点点------DE2-70-TV例子说明
module Reset_Delay(iCLK,iRST,oRST_0,oRST_1,oRST_2); input iCLK; input iRST; output reg oRST_0; outpu ...
- mysql 隔离性与隔离级别
提到事务,你肯定不陌生,和数据库打交道的时候,我们总是会用到事务.最经典的例子就是转账,你要给朋友小王转 100 块钱,而此时你的银行卡只有 100 块钱. 转账过程具体到程序里会有一系列的操作,比如 ...
- java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory解决方法
解决方法 第一种方法:导入commons-logging.jar包 第二种方法,如果用的是maven项目,则直接在pom.xml中加入commons-logging依赖包,如下: <depend ...
- springboot+mybatis报错Invalid bound statement (not found)
今天做项目时报了一个错提示说Invalid bound statement (not found),也就是说mapper接口绑定.xml文件出错了,找不到指定的sql:原因是程序没有把.xml文件编译 ...
- 04hive查询
详细文档查看:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Select 一. 基本查询(SELECT …FROM) ...
- 结构体数组排序:1004 成绩排名 【pta】
结构体模板 struct STU { string name; //用string可以代替char string num; int s; }; sort是用快速排序实现的,属于不稳定排序,stable ...
- 谁偷偷删了你的微信?别慌!Python 揪出来
不知道你有没有经历过,想联系一位很长时间没有联系的朋友,发现对方很早以前已经把你删除了,而你还一无所知. 相信每个人的微信通信录里都存在一些「僵尸粉」,他们默默地躺在联系人列表中,你以为对方还是朋友, ...
- TensorFlow 模型的保存与载入
参考学习博客: # https://www.cnblogs.com/felixwang2/p/9190692.html 一.模型保存 # https://www.cnblogs.com/felixwa ...
- Qt QML Component 学习笔记
简介 Component是Qt封装好的.只暴露必要接口的QML类型,可以重复利用.一个QML组件就像一个黑盒子,它通过属性.信号.函数和外部世界交互. 一个Component既可以定义在独立的QML文 ...