简介 实现一个Lisp方言实在是太简单了,尤其是作为方言之一的Scheme,所以各个语言版本的Lisp实现层出不穷,Python平台上也是如此。最著名的当属Peter Norvig的lis.py。 其中最靠谱的当属clojurepy,直接将源代码编译为Python字节码执行,无论是速度还是与Python库的互通性都是无与伦比。不过Scheme就没这么靠谱的实现了,大部分都是个简单的Demo,或者没办法调用Python代码,或者很多特性没实现。 Lizpop相对不错一些,不过没有官网和文档,只有个简单的README,并且到目前位置代码已经一年没有更新了。看名字作者是个日本人,不知道以后会不会维护下去。 安装与运行 用pip的同学就简单了,直接pip install lizpop即可。 »
Python的pickle模块是个相当方便的序列化数据的方法。但它究竟是如何运行的,对于很多人来说非常神秘。实际上它很简单。pickle的输出结果其实是一段可以生成Python数据结构的程序代码。一门功能有限的基于栈的语言可以拿来写这些代码。这里说的功能有限,但仍然可以写类似for循环和if判断等语句。并且学起来还蛮带感的。 这篇文章里会用下面这个简单的解释器来从pickle对象中读取数据。把下面的代码拷到本地文件中: #!/usr/bin/python import code import pickle import sys sys.ps1 = "pik> " »
Python虽然被冠以脚本语言之名,但是事实上在运行的时候也是需要编译步骤的,与python源代码同名的.pyc文件既是编译后的结果,类似Java的字节码。 同时与Java相比,Python的字节码要更加“高级”,因此编译速度是非常之快的,几乎很少感觉到编译消耗的时间,所以往往将编译与执行的步骤合并,不需要手动进行编译。在输入python xxx.py的时候,解释器在内存中将源代码解析生成字节码,并直接执行。但编译的过程毕竟还是有开销的,因此直接将字节码保存在文件中作为缓存,方便下次使用,保存的文件就是pyc文件。 因为有.pyc文件的存在,就有可能绕开Python前端编译器来自己生成字节码交给解释器执行,甚至将自己的语言编译为字节码,就像JVM上的Scala、 »