2013-02-12 47 views
1

爲了好玩/練習python,我試圖創建一個顯示模塊內容的程序。看起來是這樣的:可變參數的Python dir()函數

import sys 
print "Here are all the functions in the sys module: " 
print dir(sys) 
function = raw_input("Pick a function to see: ") 

cnt = True 

while cnt: 
     if function in dir(sys): 
       print "You chose:", function 
       cnt = False 
     else: 
       print "Invalid choice, please select again." 
       cnt = True 
print dir("sys." + function) 

但每一次,不管什麼字符串變量function被設定爲,在dir("sys." + function)電話始終默認爲相同的輸出dir(string)(或因此我認爲!)

是什麼發生,有沒有辦法讓我做到這一點,並得到我真正想要的輸出(例如,變量function設置爲stdin,我得到的輸出爲dir(sys.stdin))?

+1

使用'while cnt:'而不是'while cnt == True:' – jfs 2013-02-12 14:44:54

回答

4

你想從模塊中檢索實際的對象;使用getattr() function爲:

print dir(getattr(sys, function)) 

dir()不解釋你傳遞給它的對象的內容;一個恰好包含與模塊中某個函數的名稱相對應的值的字符串不會爲您解除引用。

+0

@Pieters請問你的句子中有什麼意思是''string''和''value'? – eyquem 2013-02-12 15:14:08

+0

@eyquem:String:python中的'str'類型。值:字符串的內容(字符)。 – 2013-02-12 15:18:26

+0

@Pieters你的意思是,對於字符串:**一個'str'類型的對象**? – eyquem 2013-02-12 15:24:48

1

由於目錄工作在對象上,所以您需要以某種方式從名稱中獲取對象。

第一種選擇是使用GETATTR:

print dir(getattr(sys, function)) 

如果你想更加靈活(並且準備採取安全風險),你可以使用eval:

print dir(eval('sys.' + function)) 
1
f = getattr(sys, function) # get function object 
help(f) # display help for the function 

注意:dir(f)將爲所有具有相同類型的函數返回相同的信息。