1

为了好玩/练习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,我得到输出dir(sys.stdin))?

4

3 回答 3

4

您想从模块中检索实际对象;使用该getattr()功能

print dir(getattr(sys, function))

dir()不解释您传递给它的对象的内容;恰好包含与模块中函数名称相对应的值的字符串不会为您取消引用。

于 2013-02-12T14:41:36.147 回答
2
f = getattr(sys, function) # get function object
help(f) # display help for the function

注意:dir(f)将为具有相同类型的所有函数返回相同的信息。

于 2013-02-12T14:44:03.973 回答
1

由于 dir 适用于对象,因此您需要以某种方式从名称中获取对象。

第一种选择是使用 getattr:

print dir(getattr(sys, function))

如果你想更灵活(并准备好承担安全风险),你可以使用 eval:

print dir(eval('sys.' + function))
于 2013-02-12T14:43:29.087 回答