一般性的Python编程指导原则
本文将极限编程做简单介绍,并总结为好玩的编程
程序的灵活性主要表现在:原型设计、配置、自动化测试。
原型设计
原型:实现最终程序主要功能的大概模型。原型设计过程会拼凑出一个能解决问题的程序,以便了解所需要的组件和优秀解决方案的需求。
对代码重写说不:常见问题:第二系统综合症、持续重写综合症、代码疲劳,避免这些问题核心思想是:如果认为原型程序能完善为可以工作的系统,那不管如何都要坚持下去,而不是推导重来。
配置
一种在程序中引入抽象的更简单的方法:从代码中提取符号化常量。
提取常量
前面说的常量指的是内建的字面量,例如数字、字符串和列表,编程时应该将它们放置在全局变量中,为了避免因改变全局变量造成的麻烦,在使用时把它们当做常量(符号化常量)就可以了,为了标识符号化常量,可以特殊命名为名字只用大写字母,用下划线分割单词。
所写得常量出现次数多于一次就应该考虑将它放入全局变量。
配置文件
如果PI在模块文件config.py中设定可以这样做:
from config import PI
这样,用户和程序员都可通过改变配置文件来改变程序配置。
更好的方法是使用标准库模块ConfigParser,它使用了一种相对合理的标准配置文件格式,可以接受Python的标准赋值语法:
greeting = 'hello world'
另外一种配置格式:
greeting: Hello, world
需要使用[files]或[colors]这样的数据头将配置文件划分为几个区段。有关ConfigParser模块的更多信息,可以查阅库文档(http://python.org/doc/lib/module-ConfigParser.html)
下面是一个例子:
配置文件:
[numbers]
pi: 3.1415926535897931
[messages]
greeting: Welcom to the area calculation program!
question: Please enter the radius.
result_message: The area is
ConfigParser程序:config_test.py
from ConfigParser import ConfigParser
CONFIGFILE = "python.txt"
config = ConfigParser()
config.read(CONFIGFILE)
print config.get('messages', 'greeting')
radius = input(config.get('messages', 'question') + ' ')
print config.get('messages', 'result_message')
print config.getfloat('numbers', 'pi') * radius**2
执行结果:
配置级别
配置或控制信息的三个来源:
- 配置文件
- 环境变量
- 在命令行传递到程序的选项开关和参数:命令行参数可直接使用sys.argv;如何需要处理开关,可用aptparse(或getopt)模块
日志记录
print是简单的日志记录形式,例子如下:
import urllib
url = 'http://ent.ifeng.com/a/20190102/43161234_0.shtml'
log = open('logfile.txt', 'w')
print log, ('Downloading file from URL %s' % url)
text = urllib.urlopen(url).read()
print text
print >> log, 'File successfully downloaded'
如果程序在下载过程中崩溃了,这种方法就不行了,假如为每个log语句都进行文件打开和关闭操作的话会更安装(或者在写入文件后刷新)
下一个例子:logging程序
import logging
logging.basicConfig(level = logging.INFO, filename = 'mylog.log')
logging.info('Starting program')
logging.info('Tryin to divide 1 by 0')
print 1 / 0
logging.info('The division succeeded')
logging.info('Ending program')
执行结果:
mylog.txt内容:
mylog.txt
logging模块
书籍推荐
- Andrew Hunt和David Thomas:《程序员修炼之道》
- Martin Fowler:《重构》
- Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides:《设计模式》
- Kent Beck:《测试驱动开发》
- Eric S. Raymond:《UNIX编程艺术》
- Thomas H. Cormen:《算法导论,第二版》
- Donald Knuth:《计算机程序设计艺术》
网友评论