2008-09-30 175 views
1

當我打電話擴展功能和「幫助」

help(Mod.Cls.f) 

(國防部是一個C擴展模塊),我得到的輸出

Help on method_descriptor: 

f(...) 
    doc_string

什麼我需要做的,以便幫助輸出是的形式

Help on method f in module Mod: 

f(x, y, z) 
    doc_string

像它是爲random.Random.shuffle,例如?

我PyMethodDef條目是目前:

{ "f", f, METH_VARARGS, "doc_string" } 

回答

2

你不能。檢查模塊是'pydoc'和'help()'使用的,沒有辦法確定C函數的確切簽名是什麼。你能做的最好的是什麼樣的內置函數做的:包括在文檔字符串的第一行簽名:

>>> help(range) 
Help on built-in function range in module __builtin__: 

range(...) 
    range([start,] stop[, step]) -> list of integers 

... 

原因random.shuffle的文檔字符串看起來「正確」的是,它是不是一個C函數。這是一個用Python編寫的函數。

+0

謝謝,但它爲什麼說method_descriptor,而不是方法和模塊的名稱? – 2008-09-30 14:30:05

1

托馬斯的答案當然是對的。

我想簡單地補充一下,許多C擴展模塊都在它們周圍有一個Python「包裝器」,以便它們可以支持標準功能簽名和其他動態語言功能(例如描述符協議)。