【转载】学用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]’表示取第一部分
时间: 2024-08-02 12:23:27

【转载】学用python写程序的相关文章

【总结】学用python写程序

工作多年,因为项目需要,用过的编程语言不少了:c/c++.java.c#.汇编.vb.objective c.apple script.不过主要使用的还是c/c++,一方面是用得久了,习惯了.另一方面,思考问题的方式已经偏"底层"了,不想内存.不考虑指针,似乎就浑身冷汗,无法编程了.连带我在面试一些小朋友的时候也会不自觉的问一些底层的知识点.再有一方面,就是想要程序的运行效率更高一些,个人一直以写高效的(算法)程序为目标,而c/c++是除了汇编之外的,能写出的运行效率最高的编程语言--

181102 Windows下安装kivy(用python写APP)

了解到Instgram,知乎等APP是用python写的.我也决定学习用python写APP.这里我们需要安装kivy. 环境:win7,python3.6 安装方式:DOS命令窗口 注意事项:目前不支持python3.4及以上版本.如需安装3.5及以上版本,请通过安装文件手动安装. 参考kivy网址安装(全英文):https://kivy.org/doc/stable/installation/installation-windows.html 1. 确保升级pip 和wheel python

以写代学:python 模块简介&输出用户指定位数密码的脚本

什么是模块 (1)模块是从逻辑上组织python代码的形式 (2)当代码量变的相当大的时候,最好把代码分成一些有组织的代码段,前提是保证它们的彼此交互 (3)这些代码段之间有一定的联系,可能是一个包含数据成员和方法的类,也可能是一组相关但彼此独立的操作函数 (4)模块名不能乱起,字母数字下划线组成,首字母不能是数字 导入模块 (1)使用import导入模块,模块被导入后,程序会自动生成pyc的字节码文件以提升性能 (2)模块属性通过"模块名.属性"的方法调用,如果仅需要模块中的某些属性

以写代学:python 原始字符串操作符&&字符串内建函数

原始字符串操作符 (1)原始字符串操作符是为了对付那些在字符串中出现的特殊字符 (2)在原始字符串里,所有的字符都是直接按照字面的意思来使用,没有转义特殊或不能打印的字符 (3)比如在windows写路径时经常会把出现以下情况 2.字符串内建函数 (1)每次都不会改变字符串原本的值 (2)字符串.函数 或者将字符串赋值给函数后写成变量名.函数是都可以的 (3)还有很多的内涵函数,下边只是举例说明 >>> import tab        >>> hi = "

Python写的网络爬虫程序(很简单)

Python写的网络爬虫程序(很简单) 这是我的一位同学传给我的一个小的网页爬虫程序,觉得挺有意思的,和大家分享一下.不过有一点需要注意,要用python2.3,如果用python3.4会有些问题出现. python程序如下: import re,urllib strTxt="" x=1 ff=open("wangzhi.txt","r") for line in ff.readlines(): f=open(str(x)+".txt&

Python写WEB日志分析程序的一些思路

1.背景 刚到一家公司需要写一个实时分析tshark捕捉到的数据,tshark一直往文本里面写数据,写一个程序要实时获取到添加的数据并进行分析处理最后入库.此时思绪狂飞,想了一些比较挫的方法. 本人想到的方法: 1.每隔一定时间去查看下文件的mtime,如果有改动则读取数据,并记录读取的行数.下次再去读这个文件的数据则上次记录的行数开始继续读.当文件行数太大的时候这个程序的效率就很慢了,也可以记录上次读取的字节数,然后使用linux下的open系统系统中的seek从指定位置处读取.但是要是用C语

快速掌握用python写并行程序

目录 一.大数据时代的现状 二.面对挑战的方法 2.1 并行计算 2.2 改用GPU处理计算密集型程序 3.3 分布式计算 三.用python写并行程序 3.1 进程与线程 3.2 全局解释器锁GIL: 3.3 multiprocessing 四.multiprocessing实战 总结 小子今天想来谈谈"并行计算",作为一个非科班人员,我为什么去捣鼓这么一个在科班里也比较专业的问题了.这就要说下我前几天做的一个作业了,当时我用python写了个程序,结果运行了一天,这个速度可让我愁了

利用python写出1加到任意数关于range()函数妙用的交互小程序

认真!????? ------------ 利用Python写的一个从1加到任意大小的数字(电脑吃得消再说)的交互脚本. 在这里我运用了range函数(我喜欢叫它蟒岭函数,因为range有“岭”的意思),此函数可以有个有趣的用法:range(x),解释器会列出从0~x-1的所有整数:如果是range(y,x),解释器就会列出从从y~x-1的所有整数(x-1 等价于 不包括x,应该能够理解吧):还有一种range(y,x,z),解释器就会跳跃z列出从y~x-1的所有整数,默认的跳跃间距为1,就如r

使用Python写的第一个网络爬虫程序

今天尝试使用python写一个网络爬虫代码,主要是想访问某个网站,从中选取感兴趣的信息,并将信息按照一定的格式保存早Excel中. 此代码中主要使用到了python的以下几个功能,由于对python不熟悉,把代码也粘贴在下面. 1, 使用url打开网站网页 import urllib2 data = urllib2.urlopen(string_full_link).read().decode('utf8') print data 2,使用正则表达式匹配 import re #一般的英文匹配 r