带有可变参数的Python dir()函数

时间:2013-02-12 14:39:40

标签: python dir

为了好玩/练习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}})?

3 个答案:

答案 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)将为所有具有相同类型的函数返回相同的信息。