编者按:InfoQ开设栏目“品味书香”,精选技术书籍的精彩章节,以及分享看完书留下的思考和收获,欢迎大家关注。本文节选自齐伟著《跟老齐学Python从入门到精通》中的章节“模块之编写模块”,介绍Python如何编写自己的模块。
\\随着对Python学习的深入,其优点日渐突出,让读者也感觉到Python的强大了,强大感觉之一就是“模块自信”,因为Python不仅有自带的模块(称之为标准库),还有海量的第三方模块,并且很多开发者还在不断贡献自己开发的新模块,正是有了这么强大的“模块自信”,Python才被很多人钟爱。并且这种方式也正在不断被其他更多语言所借鉴,几乎成为普世行为了(不知道Python是不是首倡者)。
\\“模块自信”的本质是:开放。
\\Python不是一个封闭的体系,而是一个开放系统。开放系统的最大好处就是避免了“熵增”。
\\\\\熵的概念是由德国物理学家克劳修斯于1865年所提出,是一种测量在动力学方面不能做功的能量总数,也就是当总体的熵增加,其做功能力也下降,熵的量度正是能量退化的指标。
\\熵亦被用于计算一个系统中的失序现象,也就是计算该系统混乱的程度。
\\根据熵的统计学定义,热力学第二定律说明一个孤立系统倾向于增加混乱程度。换句话说就是对于封闭系统而言,会越来越趋向于无序化。反过来,开放系统则能避免无序化。
\
编写模块
\\想必读者已经熟悉了import语句,曾经有这样一个例子:
\\\\u0026gt;\u0026gt;\u0026gt; import math\\\u0026gt;\u0026gt;\u0026gt; math.pow(3,2)\\9.0
\\
这里的math(是Python标准库之一,在本章,我们要逐渐理解模块、库之类的术语。)就是一个模块,用import引入这个模块,然后可以使用模块里面的函数,比如pow()函数。显然,这里是不需要自己动手写具体函数的,我们的任务就是拿过来使用。这就是模块的好处:拿过来就用,不用自己重写。
\\1. 模块是程序
\\“模块是程序”一语道破了模块的本质,它就是一个扩展名为.py的Python程序。
\\我们能够在应该使用它的时候将它引用过来,节省精力,不需要重写雷同的代码。
\\但是,如果我自己写一个.py文件,是不是就能作为模块import过来呢?还不那么简单。必须得让Python解释器能够找到你写的模块。比如,在某个目录中,我写了这样一个文件:
\\\#!/usr/bin/env python\\# coding=utf-8\\lang = \"python\"
\\
并把它命名为pm.py,那么这个文件就可以作为一个模块被引入。不过由于这个模块是我自己写的,Python解释器并不知道,得先告诉它我写了这样一个文件。
\\\\u0026gt;\u0026gt;\u0026gt; import sys\\\u0026gt;\u0026gt;\u0026gt; sys.path.append(\"~/Documents/VBS/StartLearningPython/2code/pm.py\")
\\
用这种方式告诉Python解释器,我写的那个文件在哪里。在这个方法中,也用了模块import sys,不过由于sys是Python标准库之一,所以不用特别告诉Python解释器其位置。
\\上面那个一长串的地址是Ubuntu系统的地址格式,如果读者使用的是Windows系统,请写你所保存的文件路径。
\\\\u0026gt;\u0026gt;\u0026gt; import pm\\\u0026gt;\u0026gt;\u0026gt; pm.lang\\'python'
\\
在pm.py文件中有一个赋值语句,即lang = \"python\",现在将pm.py作为模块引入(注意作为模块引入的时候不带扩展名),就可以通过“模块名字”+“.”+“属性或方法名称”来访问pm.py中的东西。当然,如果要访问不存在的属性,肯定是要报错的。
\\\\u0026gt;\u0026gt;\u0026gt; pm.xx\\Traceback (most recent call last):\\ File \"\u0026lt;stdin\u0026gt;\