从阅读python源码想到的

最近在一个百度云推送的服务端接口,因为后台使用python写的,所以使用了文档中提供的python api。刚下载回来后,里面有sample,模仿着来,能调通,但是,我还想知道他是怎么实现的。因为我在使用他的代码之前,自己先根据文档写了个demo,但是我的demo里面的签名算出来总是有问题,百度总是返回403。所以,在搞定了工作上的事情后,我就决定看看原作者是怎么实现这个功能的,在阅读的过程中,经常遇到击节叫好的地方,真的是对语言的理解能力,能游刃有余的操纵程序完成自己想完成的事情,还很简洁,真是高手。我在尝试写出这个接口过程中,遇到的问题主要有:1、我写的很简单,比如要实现一个根据参数组合成url连接的功能,我就写一个函数来处理,而我的函数灵活性很弱。也就是说,我的抽象能力不够高,写出来的东西通用性不大;2、遇到稍微复杂点的逻辑,我有点感觉力不从心,对于url的签名的算法我就感觉力不从心,别人规则描述的很清楚,但是我就是搞不定;3、稳定性/视野开阔性,我用过的工具/包很少,在选择上就有欠缺;

通过阅读原作者的代码,解决了我几个问题,一个是对输入参数的解析,二是计算签名的方法,三就是post到百度的url及方法,四就是对数据的解析处理。

1、对于输入参数的解析,api中使用的方法是预定义与实际传入数据的比较、赋值;也就是说,对输入的数据,解析成一个字典后再次存储;2、基于签名得到的数据,签名的方法计算就相对简单了,直接按照文档里面的描述规则组合计算就行了;通过以上两步,我才发现居然字典、list还可以这么用,用的这么灵活,把我觉得复杂的,烦躁的,我实现起来困难的功能,“轻描淡写”的就给搞定了;我通过模仿他的一些用法,改写了我自己的程序,顿时感觉要沉稳、靠谱点了。3、原作者使用的是pycurl这个基于libcurl的网络库来完成网络通信,据说是pycurl效率比urllib和urllib2高;4、在整个过程中,其实业务逻辑就是,提供给下层服务器一个接口可以传输messages等信息,然后上层连接百度云推送接口,程序本身的逻辑就是对数据的处理,最终就是对请求url的组合,而作者使用了一些解析数据的技巧,即兼顾了程序的健壮性,还让解析的过程明晰靠谱。

查看别人的代码时,总会时不时的为别人优美的实现叫好,后面仔细一想,“也没有使用特别艰深晦涩的技巧,都是对常用知识的组合”,但是我为什么就是写不出来呢?我自己写的代码,怎么看怎么像是小学生的玩具,我自己思考了一下原因,不得不承认的主要原因是,自己水平不够,写的代码还是太少,解决过的问题还是不够,并且对语言的把握也没有多少,总体而言,就是自己还需要多看,多思,多写,多交流。

从阅读python源码想到的

相关文章:

你感兴趣的文章:

标签云: