首页 > 代码库 > 【总结】学用python写程序

【总结】学用python写程序

工作多年,因为项目需要,用过的编程语言不少了:c/c++、java、c#、汇编、vb、objective c、apple script。不过主要使用的还是c/c++,一方面是用得久了,习惯了。另一方面,思考问题的方式已经偏“底层”了,不想内存、不考虑指针,似乎就浑身冷汗,无法编程了。连带我在面试一些小朋友的时候也会不自觉的问一些底层的知识点。再有一方面,就是想要程序的运行效率更高一些,个人一直以写高效的(算法)程序为目标,而c/c++是除了汇编之外的,能写出的运行效率最高的编程语言——大家别喷,有不同意见很正常——而我目前唯一一次用汇编做项目,也是在MS写microsoft excel的底层函数库,也是为了提升excel的计算效率。


不过c/c++写一些“短平快”的、运行一遍就能扔的文本程序很不方面,又要考虑字符编码、又要考虑文本格式、又要解析字符串等等。而python的设计初衷,就是为了节省程序员的编程时间,(当然不可避免的增加了程序运行时间),从前一直想学python,刚好借这个机会,以具体小任务为驱动,边学边做。现在感觉还是挺爽的。


用python写程序的确挺快。语法比较简洁,内置工具比较多。对于我从前纠结的运行效率,也有惊喜:如果直接运行脚本的话,速度还是挺快的——python的默认底层实现应该是cpython,也就是很多模块是用c支持的、且编译好的。运行这些模块,就是在调用编译好的c程序。不过如果调试的话——我用的 python2.7 + eric4 ——运行速度就会降低的很厉害,慢十倍左右吧,感觉调试的时候要用PVM解释器,很多编译好的c模块无法直接运行,应该是造成调试的时候运行时间大大加长的原因。


总之,python写程序挺快;只要写对了,运行也不太慢。本猿比较满意。


附:由于是任务驱动来学习python的,没有啃什么书,基本过程就是不会就问度娘,度娘不会就问谷哥。从前搜索的、积累的一些问题和解法,列出如下,python大拿们请绕行:

1. 按照每行读取文件,去除问价末尾的换行符

fileIn = open ("fileName", "r")
for line in fileIn:
     line.strip()......

2. 字符串查找、分隔

#查找分隔符‘#’,并把‘#’前面的内容存储到一个字符串中,‘#’后面的内容存储到另一个字符串中
for line in fileIn:
     sepPosition = line.strip().find(‘#‘)
     frontString = line.strip()[:sepPosition]
     backString = line.strip()[sepPosition+1:]

3. appDict是个字典,key是app name,value是app的某个属性,按照key排序,并输出到文件中

step1:按照key排序,输出到list中
     # sort by the package name
    appDictSorted = sorted (appDict.iteritems(), key=lambda x:x[0], reverse=False)
step2:将appDictSorted 中的内容输出到文件中
     for item in appDictSorted:
          fileOut.write (item[0] + "#" + item[1] + "\n")

4. python的for循环往往是遍历容器中的元素,如:

     itemList = {‘a‘, ‘b‘, ‘c‘}
     for item in itemList
          do something

问题是,如何像c/c++中那样,重复执行某些操作n次?答:用range函数

     for i in range(0, 100)
          do something 100 times

i的值从0 开始,累计到99结束

5. 由列表生成集合,用集合构造函数set()

     itemSet = set (itemList)

6. 求两个集合itemSetOne和itemSetTwo的交集和并集

交集:itemJoinSet = itemSetOne & itemSetTwo
并集:itemUnionSet = itemSetOne | itemSetTwo
差集:itemDiffSet = itemUnionSet - itemJoinSet

7. 求词典中元素的个数?用len()函数
     
     appDict = dict()
     ......
     appCount = len(appDict)


8. 如何遍历词典?答:遍历词典的key即可,用keys()函数返回词典中key的集合

     for key in appDict.keys():
          value = http://www.mamicode.com/appDict[key]>