上次和大家探讨了关于Python模块化编程的东东,可能大家会问了:我已经了解了Python模块化编程的精髓了,但是我能不能自己定义模块呢?
先说答案,答案是当然能哈~
下面就和大家探讨一下关于定义模块、说明模块和测试模块相关的东东,那我们就开始吧!
首先,说一下:定义模块
首先来个灵魂拷问问题?模块到底是啥呢?该怎么定义自己的模块呢?
模块呀,当然就是Python程序了,到这可能你会说“废话”,这还真不是废话哈,因为所有的Python程序都可以作为模块进行导入哦,也就是说,你随便写个Python程序,统统都可以作为模块导入,并且只要你导入了模块,你就可以肆无忌惮的使用该模块内的所有成员了哦。
下面举个“栗子”:
![cddb2495d63c9a6d2c0941967eb608e5.png](https://i-blog.csdnimg.cn/blog_migrate/2530ae751325120b6d6265b11dde9b87.jpeg)
先对这个“栗子”简单说明一下吧,在该“栗子”中呢,第1行执行了一条简单的输出语句哦,然后第3行定义了一个变量,然后又定义了一个say_hello()函数,最后定义了一个Friend类。到这你有木有发现呢?这和普通的Python程序木有啥区别哦,你的发现是对的哦,但这仍然可以作为模块来导入哦。
到这可能大家又有问题了:那使用模块有啥好处呢?好处当然有了,比如说像上面“栗子”中的代码一样,将需要使用的一些单元东东定义在模块中,那么在日后使用时不管哪个程序只要导入了这个模块,这个程序就可以使用这个模块中的所有东东了哦,这就是常说的复用,对于大工程开发的好处是大大滴,而且呢,使模块,你还能避免每个程序都需要重新定义这些模块中的东东的坑哦。
再补充一句:其实呢,模块文件的文件名就是模块名哦,比如上面“栗子”module1.py的模块名就是module1哦。
好啦,说明白了定义模块,下面就说一下说明模块吧!
说明模块
啥叫说明模块呢?又是灵魂拷问哈?说明模块说白了就是给模块添加说明语言(文档)哦!
因为在实际的工程开发,尤其是在大项目中,整个项目是由一个团队共同完成的哦,每个人可能负责不能的东东,这时就需要为模块编写说明文档了哦,因为如果木有说明文档,你团队中的其他成员看你的代码可能就是一脸懵逼哦!
那该怎样为模块添加说明文档呢?其实呢,还是挺简单滴,你只有在模块开始处定义一个字符串直接量就可以了哦。
还是举个“栗子”吧:
![6a53decb9b22b614fada5d756cd51bc6.png](https://i-blog.csdnimg.cn/blog_migrate/9858e95e35c96ad08ab930c44ebd179f.jpeg)
上面“栗子”中红色方框中的这段话就是为模块添加的说明东东哦!
最后补充一句:对于这个说明的话,你可以通过模块的__doc__属性来访问文档哦。
好了,到此你已经会定义模块并会为模块添加说明文档了,但是人非圣贤,谁能保证自己写的“码子”完全正确呢,这时就要凸显测试模块的重要性了,那该怎么对模块进行测试呢?不要着急哦,下面告诉大家!
测试模块
测试模块就是给模块添加一些测试代码的东东!通过测试后,你才能保证你所写的模块中的每个单元东东都正确哦!
前面已经说了哦,模块呢,就是Python代码,因此呀,我们可以使用Python命令来解释并执行这些模块程序哦,但是呢,条件还是有的,就是你的模块中必须包含可执行的代码!
比如上面的“栗子”,如果你用pythong module1.py运行,就只执行print(‘俺是模块哦’)这一句,这就尴尬了哦,因为模块中你所定义的函数呀、类呀都木有测试到哦。
那该怎么搞呢?你可能会用下面的方法:
![481681be9dacb55c2c12c5fc1486894b.png](https://i-blog.csdnimg.cn/blog_migrate/395bbe0222a4eadc1966767185b1eca6.jpeg)
到这你可能满满滴成就感,但是呢,这有问题的,因为如果你这个模块被其他程序导入使用时,你所编写的这三个测试函数都会自动执行,这显然不是你期望的效果哦,是不是到这有点“捉急”了呢?要相信Python哦,不然Python就不会这么火爆了!
其实呢,对于模块的测试完全可以借助所有的模块内置的__name__变量进行区分哦,因为假如直接使用python命令来运行一个模块,那么__name__变量的值就是__main__;还有假如哦,假如这个模块中被导入到其他程序中了,那么__name__变量的值就是模块名哦。
好了,到此答案就出来了,就是如果你希望测试函数只有在使用python命令直接运行时才执行,那么你就可以在测试函数中增加判断了哦,就是说只有当__name__属性为__main__时才调用测试函数哦。
将上面“栗子”中的测试代码改为如下“正规军”风格:
![89b000bebbae16e7cd5e0ef00a911284.png](https://i-blog.csdnimg.cn/blog_migrate/e3f9e1f6f47610582127f814800d140d.jpeg)
最后运行一下看一下效果吧,效果如下:
![3bf1145e33b2774853f75bda266708a5.png](https://i-blog.csdnimg.cn/blog_migrate/d0e93db09279948029cae99db151ed00.jpeg)
敬请关注“品位集结号”,为您带来意外的小惊喜!
![7096ed140d8a60e897d4397120031b88.png](https://i-blog.csdnimg.cn/blog_migrate/063ab148c8f295dbe89e030dfff2c80e.jpeg)