【P世界:29】Python中的模块

各位小伙伴,新的一周开始了,周一快乐!

今天我们继续深入学习Python的基本内容:

模块

什么是模块呢?我们先来看一个例子:

一个非常简单的函数,计算两数之和,之后我们调用add()这个函数提供两个实参进行计算,最后得出结果,这个程序是没有问题的,我们接着看,如果我把运行环境重新启动,而不重新运行一次add()这个函数定义,直接运行add()这个实例的话,会发生什么呢?

我们可以很清楚的看到,直接抛出一个命名错误的异常:add这个名称未被定义。什么鬼?这也就意味着如果我们有一个比较庞大的程序,在运行的时候我们都要事先把最终调用的关联部分先运行起来,最后的程序才能运行成功。那是否有便捷的方式通告系统先把这些我们需要“事先”运行的程序先加载进来呢?

这就是模块的作用!

我们可以把需要事先调用的部分打包,然后包含进我们最终的程序体里面即可。

So,import语句就是为这个而生,比如下面的例子

我们可以看到,首先我使用了import关键字导入了sys这个包,然后输出了Python环境的一些版权信息。

PS.这个包要么就是在安装Python或者其他IDE时候自带的,要么就是我们可以加载第三方包,第三方包我们把他下载下来之后可以直接copy到当前Python环境相应的目录,或者也可以使用pip命令(这个将在后面讲解)

对于我们之前的例子,我们只需要把函数定义部分保存成一个py文件(例如:add.py)之后我们在程序体中使用import add即可把这个函数调用,而不需要在每个程序中都定义一次函数(当然你的add.py需要放到当前Python环境下可以找到的位置)

PS.对于一个程序来说,无论你import多少次相同的包(模块)系统只会调用一次(所以你不需要担心每使用一次import系统会多占用一定的空间),当然每个模块只import一次是一个高素质程序员的体现,意味着你对于这个程序是否有足够的宏观逻辑。

有的时候一个包中包含若干部分,但是如果你只需要使用到一个包中的某个部分,而不是整个包,那import整个包进来确实会增加系统的开销(这在一些比较大的包,或者高性能计算、科学计算、数据分析需要大量占用系统资源的时候尤为明显),所以我们可以使用from ......import ......语句来导入包中的某一部分(当然这一部分在包中是需要显示定义的)

我们看到上面的例子,我们只导入了os包里path子项的join函数,使用其他的方式也可以达到相同的效果

以上三种方法,都可以达到我们想要的效果,但是就针对上面这个程序本身而言,第一种方法效率是最高的,但是也会有弊端,比如我们在以后的程序编写中,需要同样用到os.path中的其他函数,那就还需要再次导入对应的函数。所以说,使用哪种方法是需要大家根据不同的环境进行判断的,没有绝对的好或者绝对的不好。

Python作为非常灵活的语言绝对不是没有道理的,Python的设计者为了方便我们使用导入函数,特意开发了as语句,他是怎么用的呢?我们来看例子,还是拿上面的例子来说:

我们可以把很长的导入名称用一个别名代替,就是as后面的,这后面定义的“外号”你可以按照你的习惯随便定义,只要不冲突即可

对于初学者而言,今天的内容容易引起逻辑上的歧义,所以需要大家多多联系,大家可以调用系统中自带的很多的包来做一些比较好玩的事情。

例如:datetime包,os包等等,从而真正的把你的程序和操作系统联系在一起。

希望大家多多练习!

-------------------------------------------------

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20180108G090EK00?refer=cp_1026

扫码关注云+社区