2012-09-14 43 views
6

使用python並使用pypy編譯器時,python編程有區別嗎?我想嘗試使用pypy,以便我的程序執行時間變得更快。 python中的所有語法是否也可以在pypy中使用?如果沒有區別,你能告訴我如何在debian lunux上安裝pypy並在pypy上使用一些例子嗎?除了描述外,谷歌並沒有在pypy上包含太多信息。pypy編譯器的用法

回答

11

從pypy features page

PyPy 1.9實現的Python 2.7.2和運行在Intel 86(IA-32)和 x86_64的平臺,與ARM和PPC是正在進行中。它支持所有 的核心語言,通過Python測試套件。

這意味着幾乎所有你在Python 2.7中編寫的代碼都可以工作。值得一提的唯一例外是用C編寫的一些python擴展,如numpy

安裝應該相當容易,你可以download a linux binary from here。然後簡單地提取解釋器。從這一點來說,你可以運行你的python程序,就像你用普通的python解釋器運行它們一樣。

代替

在命令行:

python my_program.py 

用途:

path/to/where/you/installed/pypy my_program.py 

有關如何/爲什麼你可能想使用pypy的例子,從2012年PYCON

退房 this video
+2

另請參見http://pypy.org/compat.html,其中列出了PyPy和當前2.x CPython之間所有主要已知的區別,並鏈接到了所有已知的差異,直到細節的瑣碎程度。 – abarnert

+0

一般不快嗎?當我使用pypy執行我的程序時,它比正常執行python腳本的時間要多兩倍。奇怪的...!! –

+3

Pypy在許多情況下會更快,但不是全部。在更大,更長的執行程序中,您將更有可能看到更大的加速。在這裏有很多不同的任務,CPython和PyPy之間有一個速度比較:http://speed.pypy.org/請注意,PyPy比其他的更好。 – Wilduck

2

pypy是python語言的兼容替代實現。這意味着幾乎沒有(有意的)差異。少數差異之一是pypy不使用引用計數。這意味着,例如,您必須手動關閉文件,當文件變量超出作用域時,它們將不會像CPython中那樣自動關閉。

+0

「*少數*有意的語法差異」?而不是沒有?你能給出任何語法差異嗎? – delnan

+0

啊我很sl。。我的意思是差異,而不是語法差異。 –

+2

文件*將*自動關閉,你不能立即依靠它發生。所以'open('foo','w')。write('test');打印打開('foo','r')。read()'不太可能打印「測試」。但是,無論如何,這是一個糟糕的Python,因爲(a)官方的Python文檔不能保證它會被使用,更重要的是(b)依賴由超出範圍的事情引發的副作用,以便對方式產生有意義的影響你的程序運行是「明顯優於暗含」的嚴重違反。 – Ben