zoukankan      html  css  js  c++  java
  • 【转载】学用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] + "
    ")
    
    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]’表示取第一部分
  • 相关阅读:
    jdbc连接数据库 url
    解决IntelliJ IDEA 使用 TOMCAT 中文乱码问题
    web.xml 4.0 头部信息
    jar包冲突解决方案
    idea 快捷键
    基于单片机的车辆防碰撞及自动刹车系统(STC89C52RC芯片+超声波传感器HC-SR04+液晶屏1602+继电器+蜂鸣器)
    电子时钟万年历+51单片机+1602液晶屏+DS1302+DS18B20+按键
    1008 数组元素循环右移问题(PAT)
    1007 素数对猜想(PAT)
    1006 换个格式输出整数(PAT)
  • 原文地址:https://www.cnblogs.com/Thermo/p/4217883.html
Copyright © 2011-2022 走看看