今天买了一本关于模块的书,说实话,模块真的太多了,小编许多也不知道,要是把模块全讲完,可能得出本书了,所以小编在自己有限的能力范围内在这里浅析一下自己的见解,同时讲讲几个常用的模块。
首先说一下对模块的理解,为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样每个文件包含的代码就相对较少,很多编程的语言就采用这种组织代码的方式。在Python中,一个 .py文件就称为一个模块(Moudle)。
再来说一下模块的好处,最大的好处就是提高了代码的可维护性。其次,编写代码也不用从零开始。当一个代码写完后,就可以被其他地方引用。我们编写程序的时候,也经常引用其他模块,包括Python内置的模块和来自第三方的模块。而且使用模块还可以避免函数名和变量名冲突。但是也要注意,尽量不要与内置函数名称冲突。
下面介绍一下如何导入模块:
在Python 中用关键字import来导入某个模块:
import modname
比如要导入模块numpy,就可以在文件最开始的地方用import numpy 来引入。在调用numpy模块的函数时,必须这样引入:
模块名.函数名(比如:import numpy numpy.arange(5))
与第一种方法的区别是:funcname被直接导入到本地名字空间取了,所以他可以直接使用,而不需要加上模块名的限定 * 表示,该模块的所有公共对象(public objects)都被导入到当前的名称空间,也就是任何只要不是以 "_" 开始的东西都会被导入。
为什么必须加上模块名这样调用呢?因为可能存在这样一种情况,在多个模块下含有相同名称的函数,此时如果只是通过函数名来调用,解释器无法知道到底要调用那个函数,所以如果像上述这种情况引入模块的时候,调用函数必须加上模块名。
有时候我们只需要引入模块中的某个函数,只需要引入该函数即可,此时通过下面语句实现:
form modname import funcname
(form modname import fa,fb,fc
form modname import * 但是这个得谨慎使用 )
当然可以通过通过这种方法不仅可以引入函数,还可以引入常量,通过这种方式引入的时候,调用函数时只能给出函数名,不能给出模块,但是当两个模块中含有相同名称函数的时候,后面一次引入会覆盖前一次引入。所以有以下建议:
1) 如果你经常访问模块的属性和方法,且不想一遍又一遍的敲入模块名称,使用 form module import
2) 如果你想要有选择性地导入某些属性和方法,而不想要其他的,使用 form module import
3)如果模块包含的属性和方法与你的某个模块同名,你必须使用 import module 来避免名字冲突
4)尽量少使用 form module import *,因为判定一个特殊的函数或属性是从哪里来的有些困难,并且会造成调试和重构都更困难。
还有一种导入模块的方法就是内建函数 _import_ ()
除了前两种使用 import 导入的方法以外,我们还可以使用内建函数来导入 module。两者的区别是: import 后面必须跟的是一个类型(type),而 _import_()的参数是一个字符串,这个字符串可能来自配置文件,也可能是某个表达式计算结果。例如:
mymodule = _import_ ( 'module_name ' )
一般情况应该使用import , 但有几个例外
1)module文档告诉你要用from-import的
2)导入一个包组件。需要一个包里面的某个子模块,一般用from A.b import c比import A.b.c 更方便 且不会冒混淆的危险.
你也许会想到,如果不同的人编写的模块名称相同怎么办?为了避免模块名冲突,Python又引入了按目录来组织模块的方法,称为包(Package)
包的引入解决了模块名冲突,就是只要顶层的包名字不与别人冲突,那么模块都不会与别人冲突。
注意:每个包目录下都会有一个 _init_.py 的文件,这个文件是必须存在的,否则,Python就把这个目录当成普通目录,而不是一个包。 _init_.py 可以是空文件,也可以是有Python代码,因为 _init_.py 本身就是一个模块,而它的模块名就是 mycompany
以上是我对模块的简单理解,而对模块的使用,后面会加上,谢谢体谅(Ps:这些东西还参考了其他博主的文献,在这里表示感谢)
python 浅析模块的更多相关文章
-
python 浅析模块,包及其相关用法
今天买了一本关于模块的书,说实话,模块真的太多了,小编许多也不知道,要是把模块全讲完,可能得出本书了,所以小编在自己有限的能力范围内在这里浅析一下自己的见解,同时讲讲几个常用的模块. 这里是2018. ...
-
python浅析模块,包及其相关用法
一,模块 什么是模块? 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里面,代码会越来越长,越来越不容易维护. 为了编写可以维护的代码,我们把很多函数分组,分别放到不同额文件,这样,每个文 ...
-
用Python浅析股票数据
用Python浅析股票数据 本文将使用Python来可视化股票数据,比如绘制K线图,并且探究各项指标的含义和关系,最后使用移动平均线方法初探投资策略. 数据导入 这里将股票数据存储在stockData ...
-
python select模块
Python select 一.前言 Python的select()方法直接调用操作系统的IO接口,它监控sockets,open files, and pipes(所有带fileno()方法的文件句 ...
-
Python标准模块--threading
1 模块简介 threading模块在Python1.5.2中首次引入,是低级thread模块的一个增强版.threading模块让线程使用起来更加容易,允许程序同一时间运行多个操作. 不过请注意,P ...
-
Python的模块引用和查找路径
模块间相互独立相互引用是任何一种编程语言的基础能力.对于“模块”这个词在各种编程语言中或许是不同的,但我们可以简单认为一个程序文件是一个模块,文件里包含了类或者方法的定义.对于编译型的语言,比如C#中 ...
-
Python Logging模块的简单使用
前言 日志是非常重要的,最近有接触到这个,所以系统的看一下Python这个模块的用法.本文即为Logging模块的用法简介,主要参考文章为Python官方文档,链接见参考列表. 另外,Python的H ...
-
Python标准模块--logging
1 logging模块简介 logging模块是Python内置的标准模块,主要用于输出运行日志,可以设置输出日志的等级.日志保存路径.日志文件回滚等:相比print,具备如下优点: 可以通过设置不同 ...
-
python基础-模块
一.模块介绍 ...
随机推荐
-
PhpStorm 集成 开源中国(oschina.net)的Git项目,提交SVN时注意事项
第一步:配置 git.exe File -> Default Settings -> Version Control -> Git -> Path go Git executa ...
-
张艾迪(创始人):出现在世界224C之前的这些时间
出现在世界224C之前的这些时间 坐在大巴车上.用手塞住耳朵.繁杂的大巴车上.总会听见不喜欢听的声音.那时只有22.23岁的我.就像发明一些东西把所有不喜欢的声音都屏蔽掉.就像防火墙一样.那时候拥抱所 ...
-
mysql 使用问题?
linux中安装了mysql客户端和服务器端,为什么无法使用,总是报错呢 解决办法:使用dpkg -r mysql命令删除掉mysql-client和mysql-server了,还是不行,而且查看软件 ...
-
QT-简易视频播放器
一直没找到理由去学一下QT,由于工作原因之后的工作内容会用到QT,于是这两天摸索了下:早上临时决定先做个视频播放器玩一下,于是先用qml发现不会用,无果,于是放弃了使用qml,等之后系统的看一下Jav ...
-
MySQL_优化
MySQL优化(http://www.cnblogs.com/zengkefu/p/5683438.html) 1.explain+索引. 在你要查询的语句前加explain,看下有没有用到索引,如果 ...
-
pt-table-checksum 3.0.4检测不出主从差异数据
群里好几位同学问 pt-table-checksum 3.0.4, 主从两个表数据是不一致,为啥检测不出来?前段时间自己也测试过,只是没整理成随笔^_- 一.基本环境 VMware10.0+CentO ...
-
安装 Linuxbrew
在 OS X 平台上非常流行的包管理器 Homebrew 最近正被移植到 Linux 上而成为 Linuxbrew.虽然各种 Linux 发行都带有自己的包管理工具,诸如 apt-get.yum.pa ...
-
(转!)Netdata---Linux系统性能实时监控平台部署
我一直以为人是慢慢变老的,其实不是,人其实是一瞬间变老的. -------村上春树<舞!舞!舞!> 转自https://www.cnblogs.com/kevingrace/p/73001 ...
-
JavaScript setInterval 与 setTimeout 区别
setInterval:一直循环调用函数,不会停止:需要用 clearInterval 去停止 setTimeout:只调用一次
-
Redis分布式队列解决文件并发的问题
1.首先将捕获的异常写到Redis的队列中 public class MyExceptionAttribute : HandleErrorAttribute { public static IRedi ...