2016-07-06 34 views
0

什麼是在ipython環境中有相同的類共存的最佳方法。在ipython中的Cython和Python類共存?

我想逐步遷移層次結構中的一些類(從根類開始),從Python到Cython。 我希望能夠運行兩個版本(在ipython env中),因此我可以比較性能,並在需要時能夠回退。

有沒有其他方法可以工作,即使不完全符合我的要求。

對於我目前的實驗,我開始重命名這些類並分別導入它們。 F.e. :

import pyximport; pyximport.install() 
from blah import * 
from c_blah import * 
b = Blah() 
cb = c_Blah() 

%timeit -n 1000 b.op() 
%timeit -n 1000 cb.op() 

這很麻煩,因爲我不得不重新命名所有class-attr/method訪問。 此外,一旦我進入層次結構,這並不能解決我的困境。

其他想法如何解決這個問題? 我的意思是在Cython中增量重新編碼。


cswiercz是一個很好的點:

from blah import Blah 
from cblah import Blah as cBlah 

這是確定的,但配套層次需要修改。 將保持開放的其他想法。

+2

你爲什麼使用'import *'?停止這樣做,你的問題立即消失。 – user2357112

+0

我通常使用每個文件一個類..所以它不會很重要 – user1019129

+1

「我每個文件正常使用一個類」 - 也是一個壞主意。這裏不是Java。你並不總是需要上課,而當你這樣做時,沒有理由限制你每個文件一個。 – user2357112

回答

3

您可以使用import x as y方法重命名模塊中的定義。例如,如果foo.py包含一個函數funcbar.pyx還包含功能func(也許這就是你想要寫的foo.func()一個用Cython版本),那麼你可以做你的時間腳本如下:

# separate imports 
from foo import func as func_py 
from bar import func as func_cy 

# use the code 
func_py(2.0) 
func_cy(2.0) 

這樣您可以在foobar模塊中保留一個有意義的命名方案。