答案很简单:Test Driven。哈哈,这个(http://code.google.com/p/pylifegame/)就是好例子!醉了,不多说了,自己看去,我要睡觉去了,嗯 ...
Python and vim: Two great tastes that go great together用 python 扩展 vim ,想法倒是不新,不过第一次看到 tutotial 。记得 tocer 说过要用 python 写个 vim 库的,不知道有没有进展哈,呵呵。
http://dis.4chan.org/read/prog/1180084983/哈哈,有点意思,再加一个:Python 2.5 programmer:def fact(x): return x * fact(x - 1) if x > 1 else 1print fact(6)
字典(或者叫哈希表、关联数组..)与动态语言的渊源可谓极深。动态语言之所以动态,归根结底是因为把对变量的求值放在了运行时完成而非静态语言的编译时确定。动态语言程序中众多的不同层次的名字空间(或者说作用范围)其实就是一个个的字典,变量名为 key,对象为 value。 而对变量求值的过程就是对所在名字空间查找的过程,根据变量名,找出相应的对象,有时候在局部名字空间中没找到,还可能会自动跑到外部名字空间或是全局名字空间去找。 对于支持 OO 的动态语言,对对象的实现其实也都是字典,属性名为 key,属性值为 value ,属性的获取也就变成了对字典的查找。有时子类中找不到还会到父类中去 ...
老早就写了这些代码,但一直懒得为它写篇博客,我觉得我永远也无法理解为什么会有人发明这种奇怪的东西。不过终于还是决定写一篇吧,多一点有意思的代码也许能吸引更多人对 python 的兴趣呢,呵呵。虽然我对 ruby 的这个东西有许多贬义词想说,不过想想既然有人用,也就应该有其理由吧。且看代码:def update( klass, bases, attrs ): for k,v in attrs.items(): if not k.startswith('__') or not k.endswith('__'): setattr(klass, k, v) ...
第一次从静态语言到动态语言的人肯定在思维上需要一个比较大的跳跃,主要是许多静态语言中编译器干的事情到动态语言中后,或是不存在了,或是需要在运行时进行。 典型的例子包括:类型检查,重载,访问控制,常量。(暂时就想到这几个,还有一些代码生成的技术像define、template我们就不提了) 1、类型检查。 对于类型检查我想大部分人倾向于可选地进行,毕竟动态语言不是静态语言,duck typing还是给动态语言带来了巨大的灵活性的。 python对类型检查的实现只搜到这么一个:http://oakwinter.com/code/typec ...
2007-01-17

Build extensible application with egg

关键字: PEAK python
在 python 社区中 egg 已经是一种广为人知的格式了。众所周知对于 python 来说 egg 是一种用来生小蛇的东西,小蛇自然就是 python 软件包了(纯属瞎扯 ;-)。 简单地说,egg 之于 python 正如 jar 之于 java。是一种软件包打包的格式——要注意的是这个格式并非文件格式,实际上 egg 可以使用多种文件格式,当然最常用的还是 zip ——这里的格式主要是指组织其中包含的文件的格式。 只是把软件包打包成 zip 格式的话,那就不足为奇了。egg 显然不光是用来干这个的,egg 最重要的作用是给软件 ...
http://huangyilib.googlecode.com/svn/trunk/tudou_dl.py 只要给它视频播放页面的地址,比如: http://www.tudou.com/programs/view/AmYV7YnHqBU/ 它能帮你找出实际的 flv 视频下载地址: http://hot.tudou.com/flv/003/900/922/3900922.flv#81100#1 这可是我辛辛苦苦反编译了它的 flash 播放器的代码才找到的方法啊,希望 tudou 不要太快升级才好 ;-)
2007-01-01

理解 python 的 method 和 function 兼谈 descriptor

关键字: python language method function descriptor
总是看到有人对 python 中的 method 和 function 之间关系的困惑,其实初学 python 时我也困惑过,不过现在自认为对这个问题还是基本清楚了 ;-)。 我在前面写过的 selfless python 里面说过 method 本质上就是 function,这个从它们的形式上也看得出来,呵呵,而让人困惑的问题主要就是那个隐式传入的 self 参数。这其实是利用了descriptor 机制,请看代码: >>> class Temp(object):... def test(self, a):... print self, a...> ...
2006-12-24

python virtual machines

关键字: python language vm IronPython pypy
Jython,IronPython,PyPy。这几个项目相信玩过 python 的兄弟都不会陌生。Jython 好像是没有继续下去了,就不多说了。IronPython 和 PyPy 两个项目现在都正是如日中天的时候,都有许多让人兴奋的进展! 先来看看 IronPython 吧。在讨论之前,我们不妨先下这么一个定义,对于 python 来说,通常说让它支持某个平台,不光是要让 python 程序能够在该平台上运行,更重要的是 python 程序要能与这个平台进行互操作! 我们说 python 是跨平台的,是因为 CPython 不光能让 python 程序运行在不同的操作系统上,更可 ...
2006-12-18

selfless python

关键字: python language metaclass descriptor bytecode
Eliminating self with Metaclasses 此文利用 metaclass 和字节码,使得在 class 中定义方法时不再需要显式指定 self 参数,当真妙极! 关于这个 self 参数是否多余,本身也是仁者见仁、智者见智的事情。我认为 python 这么做是有它充分的理由的,那就是 class 中定义的方法本质上还是函数,是函数就应该遵循函数的规矩,没必要对方法进行特殊照顾,隐藏掉 self 参数只是增加了一份 magic。 也许你会问了:那这个 self 是怎么传进去的呢?这里不又是一个 magic 吗?其实,这是利用了 descriptor 对函数进 ...
2006-12-16

python types and objects

关键字: python language metaclass OO
在探寻 metaclass 的过程中,对以前熟知的 OO 又有了全新的认识。我开始感觉到,只有在动态语言的世界,才有可能对这些概念有如此通透的理解。 在静态语言中,type 和 instance 之间永远隔着编译期和运行期之间的鸿沟。而在动态语言中,简单的 object 的概念统一世界,type 和 instance 突然变得如此的一致(都是object),其间并没有本质的区别。我们只有按照逻辑对其进行区分。 虽然由于现实世界问题概念本身的局限性,和 python 提供的各种方便的“语法糖”,使得普通的 python 程序和静态语言程序似乎区别不大。但其实当 ...
2006-12-12

metaclass in python (part 2)

关键字: python language metaclass OO
接着上一篇的讲。 现在我们知道了,metaclass 生 class,class 生 instance。 但是 metaclass 还可以有它的 metametaclass,metametaclass 还可以有... 如果反复,永无止境。这样想起来,脑袋就有点晕了。 其实在 python 中万物皆对象而已,所有对象皆有其类型,对象的类型也还是对象!而类型对象的类型就是它自己。 而前面说过的所谓 instance、class、metaclass 等东西,都只是不同种类的对象而已。 判断对象是什么对象的唯一方法就是通过其提供的“接口”,这就是所谓的 duc ...
2006-12-12

metaclass in python (part 1)

关键字: python language metaclass OO
python 的东西虽然概念上容易理解 ,但是实际用起来却也不都是那么容易的。这个 metaclass 就是典型一例。虽然早知道了它是什么,不过要说出它具体能干点啥,一时半会还真想不起来。 先看看官方文档中的定义吧: __metaclass__ This variable can be any callable accepting arguments for name, bases, and dict. Upon class creation, the callable is used instead of the built-in type(). New in version 2. ...
2006-12-04

a python tutorial

关键字: python language tutorial
A Very Brief Introduction To Python And It's Data-Types 一篇短小精悍的 python tutorial 。对一些容易被忽视的问题讲得很清楚!很专业的 tutorial!摘录片段如下: The Python 'philosophy' emphasises readability, clarity and simplicity, whilst maximising the power and expressiveness available to the programmer. 看到这句话我不自觉地就想起了c++ ...
2006-10-19

Be Pythonic

关键字: python language pythonic
Be PythonicWhat is PythonicPython is not Javapath 操纵文件系统的 pythonic 的做法
2006-09-19

compatibility of IronPython

关键字: python language IronPython
IronPython 1.0 的发布,在邮件列表中引起了很多争论 ,有的人担心 IronPython 会污染了 CPython 标准的纯洁,也有人希望 IronPython 的兴起会给 Python 社区注入新的力量。 而在我看来,这些争论归根到底,就是一个兼容性的问题。在 .net 程序员看来,它是 IronPython 和 .net 的兼容性,和其它 .net 程序的互操作性如何;而在 python 程序员看来,它就是 IronPython 和 CPython 的兼容性了,和 其它 python 程序互操作性如何。 在 IronPython 与 CPython 2.4.3 的兼容性 ...
2006-09-18

python is obvious !

关键字: python language
初识 python 的时候常常会被一些陌生的概念绊倒,而当熟悉了这些概念之后你会发现它们原来是如此的简单明了!由于它们是如此的简单,所以我试图在*一*篇文章中就想把它们全部都介绍一遍。 万物皆对象,甚至一个小小的整数也不例外;而变量只是一个名字,它可以绑定到任何一个对象;使用内置函数 id 可以查看绑定的对象的 id ,语言的实现会保证两个不同对象的 id 是绝对不一样的。 >>> a = 1>>> id(a)11541872>>> a = 2>>> id(a)11541860>>> ...
2006-09-16

意外收获:get_caller

关键字: python language code
阅读 PLY 的 lex.py 的时候,看到这么一段代码 (line:449): try: raise RuntimeErrorexcept RuntimeError: e,b,t = sys.exc_info() f = t.tb_frame f = f.f_back # Walk out to our calling function ldict = f.f_globals # Grab its globals dictionary 哈哈,这种用法还真是前所未见(也许是见识还不够吧)!自己抛出异常自己捕捉,然后就可以访问到 frame stack 了 ...
2006-09-16

PLY: 一个以教学为目的的lex、yacc实现

关键字: python ply lex yacc
官方网站 想学或正在学编译原理的同学可不要错过了,要是上个学期我就看到了它的话,我的编译原理课也不至于考得这么糟糕吧。 = =||| 现在突然又涌起研究下编译原理的冲动,谁知道能持续多久呢。 不过现在实现一门语言的关键技术还在虚拟机上,编译器的技术已经太成熟了! 不过原理呢还是懂点为好,不是吗 :)
huangyiiiiii
搜索本博客
最近加入圈子
存档
最新评论
评论排行榜