05 September 2013

最近又看了一遍《简明python教程》,加上之前看过一点的《深入Python》,算是真正开始学习python这门语言。找时间会写一些python代码练习,发现每次写注释标明各种信息比较麻烦,于是想写一个小程序完成这项任务,转而又想把代码功能写的丰富一点发到github上去,最后又想把代码写的规范一点,包括Makefile,ChangeLog这类文件,于是乎有了generateOption这个项目。

说是“项目”总觉得太过夸张,其实就是一些简单的代码,所以还是叫“小项目”吧。写到最新的这个版本也花去了不少时间(其实代码量没有多少>_<),也许你会奇怪,就算是给每个文件写信息注释,也用不了多长时间,写这个工具的时间岂不是远远超过了自己的目的了么?其实,一方面是想实现这个工具,另一方面想练习python,再有想尝试一下能否写出github那种规范。github一直是我用来公开代码的地方,也可以算作是个仓库,每次看到别人的项目总是可望而不可即,感觉自己怎么也写不出那种规范形式来(似乎下载后输入几个命令就能使用,像真正的软件),而我的代码大概是东一块西一块,不成体系。

于是乎开始动手写这个小项目。由于自己对python的不熟悉,进度有点缓慢,但真正花时间的地方还是那些新知识和技巧,而这些也是这次经历的最大收获。

一、遗留问题

想说收获,但是第一个还是说个遗留问题,这是项目遇到的最大问题,我也向其妥协了,在此记录以备解决。在代码中,我会去试着打开文件,文件当然都是本地的,类似“./config”,但是这里就出现一个问题,假设这些文件在a目录下,我到b目录去执行程序,程序会转而在b目录下寻找该文件。也许你会说我用的是相对路径,在代码中用绝对路径就可以解决这个问题了。但是每个人的绝对路径不一样,你可以把所有代码拷贝到a文件夹,我可以拷贝到b文件夹,如何在程序中找到这个文件便成为问题(类似”~“来寻找home目录的方法也没能实现)。自己用了一些变通的方法也没能成功,也许这并不是个难题,希望在今后的学习过程中解决这个问题吧。

二、动态加载模块

为了让代码更加人性化或自动化,尝试了动态加载模块的方法,研究过程中花去了不少时间,还写成了一篇博客————《Python动态加载模块》

三、split

简明python教程中并没有讲split的用法,但实际上这个工具的功能非常强大,在处理字符串的时候,如果你使用split,你的幸福感会无限提升,会突然发现python处理字符串是如此简单。本来也想以split为主题写篇博客,但终究感觉自己只是知道一点皮毛,留着以后再写吧。

四、其他方法的实践

在整个过程中,对于一些技巧有了真正意义上的实践。例如eval这类可能就算练习也不会用的技巧,类应该如何写,一直很模糊的__name__ = “__main__”等等,我想纸上得来终觉浅,不练习永远不知道这些运用这些技巧会出现什么样的问题。

五、规范

这次一大尝试就是写Makefile,ChangeLog,把代码分成文件夹,充实README等等,也许自己写的并不规范,但是不尝试永远只能“远观”。这里的每一项都花去了一定的时间,但也算迈出了一小步。同时也要感谢这篇《如何编写高质量的python程序》,它给了我一些很有帮助的启示。

最后我要说的是,虽然这只是一次很小的经历,但是确使自己发现要学的东西还有很多。一个人知道的越多就发现自己越无知,这也许是个良性循环(当然你可以将它看做是恶性循环),但首要的一点是自己必须去求知。



blog comments powered by Disqus