我是职业程序员,但是我的职业和python基本没有关系。我python也是毕业之后才开始自学的,所以单从python的角度看,我也算个业余的吧。
最近一年我python的兴趣爱好还蛮专一的,而且和大部分的python开发者不一样,我一直在做工具。可能是受我们公司产品的影响,我这一年来做了若干个给python开发者使用的开发工具,感觉还挺有意思的。
目前来看最成熟的肯定是VizTracer了。VizTracer比较优雅地解决了一个前人没太解决过的方向——多线程多进程下的功能与性能分析。
python现存的几乎所有profiling的工具基本都是走的“总结”路线,VizTracer不太一样,它会展示出每一时刻程序的进度,让用户可以明确地知道每一个时间点,程序运行到哪个函数了,从而去同时完成功能和性能的分析。
和其它的性能/功能分析工具相比,VizTracer包含的信息量是多出来起码一个数量级的。你看到的不是一个总结性的“某某函数一共运行了N次花了M秒”,而是从程序运行开始,每一个函数被调用和返回的时间点。
到了多线程和多进程的时候,这种优势就被无限放大了。且不说大量的工具是压根不支持多线程多进程的,对于所有的总结性工具,你是完全没办法了解到线程和进程直接的关系的。比如出现死锁的时候,你不知道到底怎么回事。而VizTracer因为是按照时间戳做时间轴的,所以你可以明确地知道每一时刻每个进程/线程在做什么事情,极大地增强了多线程多进程的debug效率。
可以说目前在市面上的工具里,在多进程的程序理解上,暂时还没看到比VizTracer优秀的作品。
接下来说说watchpoints吧,这也是我寄予厚望的一个项目,但是没有VizTracer传播地那么广泛(因为我宣传的少一些)。它比VizTracer要稍微简单一些,当然用起来也更迅速。watchpoints的功能和它的名字一样,就是实现一个快速的watchpoints(废话)。
可能有的人对watchpoints不太了解,这是一个debugger的术语,说的是监视某一块内存(在C里),当这块内存被改动的时候,停止程序(像breakpoint一样)。那在python里呢,我实现的是监视某一个变量,在这个变量被修改的时候,进行callback(默认是打印)。
watchpoints最大的优势是用起来很方便。我们看个最简单的例子:
from watchpoints import watch a = 0 watch(a) a = 1
只需要import watch
然后watch(var)
就可以了。是不是很符合直觉?在这个变量被修改的时候,就会打印出来。
> <module> (my_script.py:4): > a = 1 a: 0 -> 1
watchpoints的用法非常灵活,不光可以看局部变量,也可以去看object, attribute, list或者dict里的element,而且不光在当前scope可以监视,是全局的监视,任何时刻这个值被修改了都能发现。如果对细节感兴趣的可以看一下我的文章:高天:Python+watchpoints!超轻量级debug利器
另外我还花了几天时间做了一个小项目叫wthell。这个项目更简单,而且说实话不算是有独创性的项目,市面上有很多工具都有类似的功能。简单的说wthell可以让你“回到”你程序报exception的地方。当然其实不是真的“回到”,是重新运行一下。
我个人比较喜欢这个项目的地方是有一点点恶趣味的。wthell英文里是what the hell的意思。当你在运行一个python程序报错的时候,你可以直接输入wthell !!
(linux only),然后就会回到你出错的地方,可以看到local vars还有call stack之类的。虽然功能上并不是独创的,但是有点无厘头,蛮搞笑的。
python本身能干的事情当然很多,我也写了不少应用型的项目,比如一个AI比赛的平台colorfight,在美国这边好几个学校组织过比赛;包括一个自己的知乎爬虫去找有趣的问题回答;以及我eecsresume.com网站的后端其实也是python。
我觉得做项目这个事情,最大的制约根本就不是“语言”。python能做的事情多了去了。最大的制约是你的想象力,还有你的决心和毅力。
你需要想到一个真实生活中你试图解决的问题。更重要的是,尽管python很可能可以解决这个问题,但是你现在学到的python是一定不完全够的。无论解决什么真实问题,你一定都需要再补充额外的知识。如果你只想着我用现在学到的python去解决问题,那解决的几乎一定都是“假问题”。就是为了练习python而编造的项目。这就是为什么我说,决心和毅力很重要,因为你还是要去花时间学东西,做尝试,经历失败,才能做个像样的东西出来。
有一句话叫,当你手里有锤子的时候,看什么都像钉子。但是如果你想只依靠手里的这个锤子,那一定是什么像样的玩意都做不出来的,你只能去砸钉子。到最后你就会觉得,哎为什么我手里的这锤子就只能砸钉子呢?那些高楼大厦,饰品文玩,为什么我都做不了呢?其他用锤子的人都在锤什么呢?
做的东西满地都是,你自己都能想得到。你欠缺的,是拿起来除了锤子之外其他工具的能力,已经把这些工具组合起来做一个东西的精神。
写个小程序让娃儿自学。
这个程序很粗糙,基本原理如下:
2. 每当点击按键,就用gTTs调用谷歌的语音库,把文字转换成MP3的语音存入指定路径。如果指定路径已经有相应的文件就略过此步骤
3. 用Windows自带的程序播放mp3文件
4. 检查是否有相应笔顺的gif文件,如果没有就从网站下载。
5.用windows自带的程序打开相应的gif文件。以显示笔顺动态效果
因为是自己用着玩儿,实在懒得把播放功能和图片显示功能集成到一个界面里。
程序只需要更改TXT文件里的汉字,重启程序就能切换其他汉字。
娃儿暑假快来了,老爹的第一个程序已经准备好了!
Python的第三方库很多,而且涉猎范围之广往往让初学者感到惊讶,居然每个领域都有轮子。
工作之外,我常常会研究有趣的Python库,并把它们的使用方法记录下来。
下面是挑出来的不错的Python应用场景,供大家参考,几乎每个都手敲代码验证过。
朱卫军:pdfkit | 利用python实现html文件转pdf
朱卫军:如何使用python提取pdf表格及文本,并保存到excel
朱卫军:轻松识别图像,这款Python OCR库支持超过80种语言
朱卫军:高级,这个Python库助力pandas智能可视化分析
朱卫军:Superset,基于web的开源BI工具,github三万star
朱卫军:教你用pyecharts制作交互式桑基图,赶快学起来吧!
朱卫军:geopandas,用python分析地理空间数据原来这么简单!
地学大数据:工具|拾取三种坐标系(GCJ-02、WGS-84、BAIDU-09)的坐标拾取器
地学大数据:如何使用Python读取GeoJSON和Shapefile文件,并转换坐标系
朱卫军:Vaex :突破pandas,快速分析100G大数据量
朱卫军:pandas_profiling :教你一行代码生成数据分析报告
朱卫军:Python数据分析案例 | 台风最喜欢在我国哪个省市登陆
我一直提倡学习编程先动手,再动脑。
这不是说不让大家用脑子,而是动手会让你快速入门,并产生兴趣。
所以说先建立兴趣,然后深入去研究语法和应用领域,这样就能快速掌握编程技能。
看到这里,大家不要忘了关注 朱卫军 哦,还写了好多好多好多~
如果大家学习语法过程中比较吃力,那是因为缺乏系统的认知,可以买本语法书看看。
下面的这几本比较适合新手,也有很多练习。
之前也整理了更详细Python选书攻略,大家可以看看
聪明人靠统计数字和洞察来得出结论。
平庸的人仅依靠统计数字来获取信息。
笨蛋成天看个案小作文来悲鸣或自嗨。