为了好玩/练习python,我正在尝试创建一个显示模块内容的程序。看起来像这样:
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
,我得到{的输出{1}})?
答案 0 :(得分:4)
您想要从模块中检索实际对象;使用getattr()
function:
print dir(getattr(sys, function))
dir()
不会解释传递给它的对象的内容;碰巧包含与模块中函数名称对应的值的字符串不会被解除引用。
答案 1 :(得分:1)
当dir处理对象时,你需要以某种方式从名称中获取对象。
第一个选项是使用getattr:
print dir(getattr(sys, function))
如果您想要更灵活(并准备承担安全风险),您可以使用eval:
print dir(eval('sys.' + function))
答案 2 :(得分:1)
f = getattr(sys, function) # get function object
help(f) # display help for the function
注意:dir(f)
将为所有具有相同类型的函数返回相同的信息。