2017-03-04 23 views
0

我試圖讓在Python的腳本,在執行時,要求一個函數名的用戶和打印功能.__doc__ 例如:詢問用戶的函數名,然後打印.__ doc__會給出,不工作

>>> print abs.__doc__ 
abs(number) -> number 

Return the absolute value of the argument. 

問題是,它不適用於raw_input。以下是我的代碼,它在執行時會發生什麼。 代碼:

f = raw_input("Your function: ") 
print f.__doc__ 

執行:

Your function: abs 
str(object='') -> string 

Return a nice string representation of the object. 
If the argument is a string, the return value is the same object. 

我在做什麼錯?

+1

'f'是一個字符串對象,而不是一個函數對象。 – cdarke

+0

您可以使用'__builtins __.__ dict __ [f] .__ doc__'。但是,只適用於內置函數:) – MSeifert

+0

你對abs'.__ doc__'有什麼期望? – jonrsharpe

回答

1

嗯,你問到打印的f__doc__f在這種情況下,像'abs'

如果你這樣做你會得到同樣的結果。所以你叫'abs'.__doc__這是一個字符串的__doc__

現在,您可以用內置函數查詢然而:

func = getattr(__builtins__,f) 
print func.__doc__ 

然而,這將只爲內置函數工作。您還可以查找globals()locals()這些字典是分別存儲全局變量和局部變量的字典。

-1

在這種情況下,abs是一種查詢__doc__的方法。 raw_input將輸入值轉換爲一個字符串,所以你真正執行__doc__的是一個字符串。

z = '' 
print z.__doc__ 
0

正如其他人所說的,您的問題是試圖使用來自raw_input()的字符串答覆作爲函數對象。你可以通過調用getattr()來獲得函數對象,但是你需要知道它在哪個模塊中。OK,所以你可以通過全局命名空間來尋找它,但是有一個更簡單的解決方案,只需使用pydoc

f = raw_input("Your function: ") 

help(f) 
相關問題