The History of Python

2010年7月5日星期一

import antigravity

英文原文链接: http://python-history.blogspot.com/2010/06/import-antigravity.html
原文作者: Guido van Rossum

反重力(antigravity)模块源自一幅XKCD漫画,由Skip Montanaro 添加至Python 3中。进一步的详情可以参考如下链接,这是我所知道最早提及此事的出处: http://sciyoshi.com/blog/2008/dec/30/import-antigravity/


但是反重力(antigravity)模块实际起源于更早时候的Google App Engine!App Engine于2008年4月7号发布,反重力(antigravity)模块在临近发布前才添加进来。在距离发布前几周时间,App Engine大多数代码已经冻结,Google的App Engine项目组认为我们应对添加一个复活节彩蛋,当时征集到许多提案,有的过于复杂,有的难于理解,还有些则存在危险性,最后我们选择了“反重力(antigravity)”模块。App Engine的反重力(antigravity)模块比Python3中的对应实现稍微多了一点变化。它定义了一个fly函数可以随机的做如下两件事情之一:有10%的可能重定向到XKCD的反重力(antigravity)漫画;另外90%的可能则是简单的把漫画中的文字显示在HTML页面中(最后一行有漫画链接地址)。要在App Engine的应用中调用反重力(antigravity)模块,需要如下简单代码:


import antigravity

def main():
antigravity.fly()

if __name__ == '__main__':
main()



更新: Python 3 标准库中的反重力模块还有一个彩蛋中的彩蛋,如果你查看源码会发现它定义了一个实现XKCD 中 GEO 哈希算法(geohashing)的函数.

3 条评论:

sevevever 说...

如何在appengine里面飞起来啊?

Traceback (most recent call last):
File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 3197, in _HandleRequest
self._Dispatch(dispatcher, self.rfile, outfile, env_dict)
File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 3140, in _Dispatch
base_env_dict=env_dict)
File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 522, in Dispatch
base_env_dict=base_env_dict)
File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 2399, in Dispatch
self._module_dict)
File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 2309, in ExecuteCGI
reset_modules = exec_script(handler_path, cgi_path, hook)
File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 2207, in ExecuteOrImportScript
script_module.main()
File "", line 4, in main
AttributeError: 'module' object has no attribute 'fly'

python3 说...

@sevevever, 可能有两个原因,一个是Python版本问题,AppEngine 需要2.5版本而不是3.1版本,可以去 http://www.python.org/ftp/python/2.5.4/ 下载安装。

另外一个原因这个反重力模块在本地SDK无法运行,需要上载到Google AppEngine。
我刚才试了一下,两种效果都看到了。

python3 说...

前面回复过,不知为何没有显示。我再简单写一下。
@sevevever,可能你安装的是Python 3.1版本, Google AppEngine需要Python2.5版本,两者不完全兼容。
另外,需要上载到Google AppEngine上面,本地看不到效果。
我尝试了一下,上载以后,多次刷新,分别看到了两种效果(显示文字或者页面跳转)。