零基础学习 Python 之模块(一)

本文字数:1862 字

阅读本文大概需要:5 分钟

写在之前

随着我们对 Python 的逐步学习,相信 Python 的强大你也感觉到了,它主要体现在 Python 的「模块」上,因为 Python 不仅有很强大的标准库,还有数不胜数的第三方模块(或者包,库),并且许多的开发者还在不断的贡献着自己的新模块。

正是因为 Python 强大的「模块自信」和它开放包容的态度,Python 才被很多人所钟爱,并且这种方式也在不断的被其他更多的语言所借鉴,几乎成了普世行为。

编写模块

学到现在,相信你已经很熟悉 import 语句了,下面我们来看一个之前说过的例子:

这里的 math 就是 Python 标准库中的一个,用 import 引入这个模块,然后可以使用他这里面的方法,比如 pow()。显然不需要自己动手来写具体的函数,我们要做的就是拿过来直接用,这就是模块的好处。

这里有一点需要注意的是,我们所说的「模块」,「库」,「包」什么的是有区别的,只不过我们现在不区分,随着学习的深入就会慢慢明白的。

模块是什么?

模块是什么?「模块是程序」!大佬们的话一语道破本质,它就是一个扩展名为 .py 的 Python 程序,我们要在应该使用它的时候将它引用过来,不需要重写雷同的代码。

这里可能会有人问:但是如果要我们自己写一个 .py 文件,是不是就可以作为模块 import 呢?事情远没有那么简单,还必须让 Python 解释器可以找到你写的模块才可以:比如我们在 /usr/lib 下建了一个名为 test.py 的文件,你想把它作为一个模块引入,就必须先告诉 Python 解释器我们写了这么一个文件:

用上述的方式就是告诉 Python 解释器我们写的那个文件在哪里,在这个告诉的方法中也用了 import sys,不过 sys 是 Python 的标准之一,所以不需要特别告诉 Python 解释器的位置。

上面的是在 Ubuntu 系统的地址格式(我随手写的地址),如果用的是 windows 的话,则要注意文件路径的写法,直接 import test 就好,然后再调用里面的东西就好了,形式是「模块名.属性或类」,当然,如果不存在的话就会报错。

到这里,你可以去看一下你刚才存储的 test.py 的目录中,是不是又多了一个 __pycache__ 的目录,并且该目录下还有 pm.cpython-**.pyc 文件,这个就是刚才 test.py 文件编译之后的文件。

不知道你是否还记得前面写完程序然后要执行时我们常常用到 if __name__ == "__main__",那时候我们直接用 python **.py 的格式来运行该程序,此时我们同样也有了 .py 文件,不过在这里是作为模块引入的。

PS:一般情况下,如果仅仅时作为模块引入,不必写__name__ == "__main__"。

模块的位置

为了让我们自己写的模块可以被 Python 解释器知道,需要用 sys.path.append("/usr/lib/test.py")。你看,这多麻烦,这么麻烦还是我们 Python 嘛!所以,Python 想了一招,把所有可用的模块都加入到了 sys.path 中,用下面的方法可以看到模块所在的位置:

打印出来的结果,你可以看到我们自己写的那个文件,结果列表里所包括位置内的 .py 文件都可以作为模块引入。

将模块文件放到指定的位置是一种不错的方法,但是作为一个放飞自己爱自由的程序员,你就得想能不能放到别处呢?答案是肯定的,用 sys.path.append() 就可以做到,不管把文件放在哪里,都可以把其位置告诉 Python 解释器。虽然这种方法在前面使用了,但其实这个很不常用,因为它也有麻烦的地方,比如在交互模式下,如果关闭了当前的 terminal,再重新开启一个的话又得重新告知。那么有没有舒服点的方法呢?有的,比较常用的就是「设置环境变量」,相信这个对于现在的你来说是小菜一碟的事情,实在不会的话随便 Google 一下,答案一大把。

写在之后

今天就是继续了解一下模块,上面的模块虽然看起来比较简单,但是已经显示了编写模块和在程序中导入模块的基本方式。当然了,在实践中所编写的模块也许更复杂一些,明天我们将来练习一下,然后再学习一下「库 & 包」,敬请期待。

如果你觉得本篇文章对你有所帮助,欢迎点赞转发,谢谢支持。

The end。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180906A0AHV300?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券