Pulpcode

捕获,搅碎,拼接,吞咽

0%

Introduction

python虽然是强类型语言(对此说法有异议,自行google),但同时又是动态语言。其灵活性带来的缺点就是不能像静态语言那样在编译期间通过静态类型检查”过滤”掉一部分错误。
我们目前的项目中,有两个地方需要进行类型检查。1是作为提供接口的server,要对请求json的字段缺失,参数类型和值范围进行校验。2是对某个函数的参数和返回值进行校验。这里把自己在项目中的一些处理经验拿出来分享,如有错误和不足,还望指正。

请求参数校验

请求参数校验会遇到这样几个问题:
为了重用和方便修改,你需要将它们“格式化”
你需要将错误原因返回给调用者或打印到日志,还不能写太多麻烦的代码
我的解决办法是使用“表驱动”的方法,将检查过程制作成可配置的。
比如下面是一段请求服务器的json字符串:

阅读全文 »

我曾以为我“上知天文,下知地理。”,“读书涉猎广”,精通各行各业,直到有一天我才发现,然而这并没有什么卵用。

不是真的厉害

曾经我看到过一个帖子,楼主的工作在中国书法家协会,他说每年的书法比赛都会收到来自全国各地的作品,基本获奖的作品都是一线城市的,很多小地方的参赛作品,他也看出来写的很认真,
而且有些人也是写了一辈子书法,但是终究来看,根本不入流。

我是学编程的,我给你举个编程的例子吧。你知道有很多自称geek的人,自学haskell,lisp,erlang等非主流语言么?你知道为啥这些人这么吊么?因为周围的人很少去摸这些语言,大部分人甚至听都没听过,那么好了,如果你在玩一个很多人都没听过的东西,那么肯定会觉得自己很牛逼。因为完全没有对比性,你不知道好的标准是啥,也完全没有竞争性,你想学了就学,不想学了就可以放下。就像我去年在国企,看见过一个在那研究vb的小伙,被周围的人称之为大神,我看了他的代码,写了一大堆的if else,来做一个将金额展示为人民币大写。实际上如果他去网上搜一段正则表达式的实现,估计不到一个小时就搞好了。所以那些称你为大神的人,要么人家什么都不懂,只是看你在那埋头苦干写了很多,要么就是人家也就是那么一说,你不要太当真。

阅读全文 »

用了这么多年的python不可能不知道yield这个利器,迭代器离不开它,协程也离不开它,甚至是那些用yield写好的递归,这里准备写一篇博客,讨论这么长时间,自己对yield的感悟。

本文假设你知道yield,会使用基础的yield,并不会写一些完全入门的介绍。另外,我们把包含yield的函数称之为生成器。

三种yield写法

第一种:

1
2
3
4
def foo():
print "start..."
yield
print "end...."
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
>>> a =foo()
a =foo()
>>> a
a
<generator object foo at 0x1089a5e60>
>>> a.next()
a.next()
start...
>>> a.next()
a.next()
end...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
>>>
阅读全文 »

最近发现了一个”有趣”的现象,坐在对面的妹子,经常摘下眼镜,揉个不停,或者狠狠的眨几下眼,我知道她已经很累了。

大概是三月十几号来北京,如今已经是八月左右了,今天是七夕,可惜依然一个人过。

北京就是这样一个城市,她让你成长,她让你没有过多的时间去思考人生,她给你机会,也给你困难,她让你明白,你的梦想就是生存这么简单,你不能想学什么就学什么,你必须为了生存而学习,她给你祝福,同时还有诅咒。

当年我在的上学的时候,从来没有想过自己将来要做什么,虽然也算努力,毕竟从高考过后,就开始一个人在家自学编程。大学跟老师做过项目,假期常常自己一个抱着书坐在电脑前敲击着代码,没课的时候就去图书馆把那一层计算机书番了个遍,把自己的编程心得都写成博客,同学常常夸我编程牛逼,还经常帮同年级高年级的学生写课设,但是我从来不知道,自己将来要干什么,
只是不停的吞咽一种东西,我把它称之为技术。

在pulpcode(低俗代码)上,我的第一篇博客是2012-08-30写的,但是我知道,真实时间比那要早,甚至都记不起来第一篇博客是什么了。

阅读全文 »

在开发过程中,经常会用到时间的各种转换,在python中基本就是使用datetime和time这两个类的来回切换,但是每次都要查阅,用起来很麻烦,所以我就自己实现了一个time类,不管怎么样,我自己用起来感觉很方便。类名叫ZenTime,当然,Zen是禅的意思。

阅读全文 »

之前写过一篇博客:从几个实验来分析python import,但这篇博客过于简陋,而且在工作中也发现,很多人都对此处知识存在很多盲区,所以这里想去写一篇比较专业的。

从哪开始找

当你import一个模块时,将通过以下路径,对模块进行搜索。

  1. 在当前目录下搜索该模块
  2. 在环境变量PYTHONPATH中指定的路径列表中依次搜索
  3. 在python的安装路径中搜索

如果你想看一下你python的包搜索路径,不妨使用如下命令:

1
2
import sys
print(sys.path)

那么,如果你想把某个路径添加到python的搜索路径怎么办呢?

阅读全文 »

其实在大三的时候,研究输出,就发现换行和回车其实并不相同,当时就想写一篇博客,只是忘了。最近又看到这个问题,所以打算写一篇博客,记录一下。

newline-and-return

如果你看过一些近代电影,一定会见过这样的打字机,这种打字机,通过敲击键盘上的某一个按键,将按键对应的字符的字模会打击到色带上,从而在纸或其他媒介上打出该字符。而且每次字符的敲打,打字机都会把纸向左移动,以备打印下一个字符。而且有些电视剧上的打字机还需要自己推回到开头,准备下一行。

那么这样就很好理解,回车和换行了:对于这样一个打字机,回车的动作是打字机把打印头定位在左边界,而换行的动作是让打字机把纸向下移一行。,对应的字符,\r就是回车,\n就是换行。

后来计算机发明了,这两个概念也就被使用到了计算机上。而那时的存储器很贵,一些科学家认为在每行结尾加两个字符太浪费了,加一个就可以。于是乎,就有了我们今天所看到的分歧。

Unix: 以\n结尾。
Windows: 以\n\r结尾。
Mac: 以\r结尾。

而这也就是为什么,Unix/Mac系统下的文件在Windows里打开的话,所有文字会变成一行,而Windows里的文件在Unix/Mac下打开的话,在每行的结尾可能会多出一个^M符号。