142014
 

Python学起来很简单,但随着学习的逐渐深入,就越发感觉Python像是JavaScript的删减版本,由于习惯了JavaScript的写法,所以Python让我感觉到特别的不方便,例如:类的方法必须声明一个self参数用来引用当前对象实例、类似JavaScript、Java等语言构造函数的__init__方法等等都让我感觉到很不舒服。

不过这些正式Python作者所期望的,实现一个功能只需要使用一个最简单高效的方法即可。由于Python语法的各种限制,使其写出的程序代码非常简洁明了,例如函数体,其他语言大部分都是使用{}来明确函数体边界的,而Python则强制你使用缩进来区分。

大家选择Python语言做开发的理由大多是因为它有非常广泛的扩展模块和简介的语法,不过我感觉Python正在慢慢的被NodeJS所代替。

下面代码实现了的功能是本地通讯录的命令行管理小工具,为今天的学习交个答卷。

1.文件Person.py,定义一个人,作为通讯录的载体

#!/usr/bin/env python

class Person:
        def __init__(self, attrMap):
                keys = attrMap.keys()
                for key in keys:
                        self.__dict__[key] = attrMap.get(key)

#p = Person(name = 'name', age = 2, email = 'lrf@gmail.com')

#print p.__dict__

#attrMap = {'name': 'name', 'age': 2, 'email': 'lrf@gmail.com'}

#p = Person(attrMap)

#print p.__dict__

2.文件addbook.py,主程序,实现通讯录的增删查和通讯录的持久化等功能

#!/usr/bin/env python
#coding=UTF-8

import cPickle as p
import os
import Person

filename = 'addrbook.data'
path = os.getcwd() + '/abd/'

addrbook = {}

def saveAddr():
	if os.path.exists(path) == False:
		os.mkdir(path)

	f = file(path + filename, 'w')
	p.dump(addrbook, f)

	f.close()
	print '保存成功!'

def loadAddr():
	filePath = path + filename
	global addrbook
	if os.path.exists(filePath):
		f = file(path + filename, 'r')
		addrbook = p.load(f)
		f.close()
	else:
		print '文件不存在,取消加载数据文件。'
	print addrbook

def add_user():
	print '新增联系人'
	attrMap = {}
	while True:
		name = raw_input('输入属性名:')
		value = raw_input('输入属性值:')
		attrMap.setdefault(name, value)
		isContinue = raw_input('是否继续添加属性?(y|n):y>')
		if isContinue == '' or isContinue == 'y':
			continue
		else:
			break
	p = Person.Person(attrMap)
	p.attrMap = attrMap
	addrbook.setdefault(len(addrbook), p)
	print '添加成功:', p.__dict__

def del_user():
	print '删除联系人'

def find_user():
	print '查找联系人'
	while True:
		name = raw_input('输入查找属性名:')
		value = raw_input('输入查找内容:')
		for key in addrbook.keys():
			p = addrbook.get(key)
			if hasattr(p, name) and p.__dict__[name].find(value) != -1:
				print p.__dict__
				break
			else:
				continue
		else: 
			print '未找到!'
		isContinue = raw_input('是否继续?(y|n):y>')
		if isContinue == '' or isContinue == 'y':
			continue
		else:
			break

def upd_user():
	print '修改联系人'

loadAddr()

try:
	while True:
		cmd = raw_input('请输入指令,如需帮助请按h:\n>')
		if cmd == 'h' or cmd == 'H' or cmd == 'help' or cmd == 'HELP':
			print '''add:新增联系人
del:删除联系人
find:查找联系人
save:持久化联系人
exit|q:退出
\n>'''

		elif cmd == 'exit' or cmd == 'EXIT' or cmd == 'q' or cmd == 'quit':
			break
		elif cmd == 'add':
			add_user()
		elif cmd == 'del':
			del_user()
		elif cmd == 'find':
			find_user()
		elif cmd == 'save':
			saveAddr()
		else:
			print '未知指令:', cmd
except EOFError:
	print '退出程序!'
except KeyboardInterrupt:
	print '退出程序!'

finally:
	saveAddr()

此程序目前仍需进一步完善。

对不起,评论功能目前被关闭。