【转载】学用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 = appDict[key]
          #做爱做的事情

写法上也可以不特意调用keys()函数,不过作用是一样的,如:

     for key in appDict:
          value = appDict[key]
          #做爱做的事情

9. 文件打开了要关闭,调用文件的属性函数close(),如:

     fileIn = open (fileName, "r")
     ......
     fileIn.close()

10. 元组、列表、字典的初始化

元组的初始化用小括号:a = (),元租对象的内容不可以改变
列表的初始化用中括号:a = [],列表对象的内容可以改变
字典的初始化用花括号:a = {},如果有内容,则:a = {key1:value1, key2:value2, ...}

11. 如何把文件中的带有百分号的数字,如:“80%”转成浮点数0.8

思路:先进行字符串处理,去掉“80%”中的百分号,然后缩小80这个数字到小数

theValue = float("80%".partition('%')[0]) * 0.01

str.partition('x')的作用是替代string中的find和replace方法,让字符串划分和替换的写法更加方便,具体来说,它是把str按照‘x'分成一个三元组(a, 'x', b),a是str中'x'前面的部分,b是后面的部分。
上面语句中

"80%".partition('%')[0]

就是把字符串“80%”根据“%”来进行分割,分成的三部分为(“80”,“%”,“”),‘[0]’表示取第一部分
posted @ 2015-01-12 10:52  Thermo  阅读(380)  评论(0编辑  收藏  举报