2017-09-29 72 views
2

我用用Cython教程(http://docs.cython.org/en/latest/src/tutorial/cython_tutorial.htmlCython .pyx中定義的函數變得內置了嗎?

玩,我有一個目錄,如下所示:

somedir/ExampleCython.py 
somedir/fib.pyx 
somedir/fib.so 
somedir/function_file.py 
somedir/setup.py 

凡fib.pyx從上面鏈接的用Cython教程,function_file.py定義函數FIB包含以下定義:

def moopy(param): 
    param += 1 
    return param 

和ExampleCython.py包含以下內容:

import fib as moo 

print moo.fib 

from function_file import moopy 

print moopy 

我使用python setup.py build_ext --inplace打造fib.so,然後我運行python ExampleCython.py,我得到下面的輸出:

<built-in function fib> 
<function moopy at 0x1002b4398> 

現在,我知道有沒有內置蟒蛇-in叫做fib,只是爲了測試我試着把名字'fib'改成'poopypants'這樣的傻名字,而且它仍然說它是內置的。 fib函數的命名空間發生了什麼?我在其他地方的一個更大的代碼塊中遇到了這個問題,這阻止了我創建一個我創建的類 - pickle抱怨說它無法在它所屬的模塊中找到我的函數 - 但我想我會簡化它問題在這裏。

僅供參考 - 蟒蛇2.7.11 /用Cython 0.26在OSX 10.12.6

+1

「內置」是誤導 - 它只是意味着它是一個在C庫中實現的函數(就像您期望的那樣)。你可能更好地創建一個[mcve]來說明你的pickle問題(這似乎是你真正想要解決的問題) – DavidW

+0

好的,那麼我應該怎麼做呢?使用更新的示例編輯它,或關閉它或將其標記爲回答或其他內容? –

+0

我想編輯這個問題。由於沒有人回答,所以我認爲對它進行相當大的編輯並不是問題。 (雖然你的選擇 - 兩個選項都是合理的!) – DavidW

回答

2

這是解決了註釋,但張貼的完整性答案:

Python是描述爲「功能內置在函數中「純粹意味着它是用C語言編譯的,而不是意味着它是一個標準的庫函數,所以存在這個問題 - 在正確的模塊中找到了正確的函數。

在我的電腦上,它顯示爲<cyfunction module.function_name at 0xsome_address>這是一條更有幫助的消息。我認爲這可能是一個Python 3的改進(但我不是100%肯定)。

相關問題