2013-02-12 2 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

ответ

4

Вы хотите получить фактический объект из модуля; использовать getattr() function для этого:

print dir(getattr(sys, function)) 

dir() не интерпретирует содержимое объектов, проходящих к нему; строка, которая содержит значение, которое соответствует имени функции в модуле, не разыменовывается для вас.

+0

@Pieters Какие чувства имеют слова '' string'' и '' value'' в вашем предложении? – eyquem

+0

@eyquem: String: тип 'str' в python. Значение: содержимое (символы) строки. –

+0

@Pieters Вы имеете в виду, для строки: ** объект типа 'str' **? – eyquem

1

Поскольку dir работает с объектами, вам нужно как-то получить объект от имени.

Первый вариант заключается в использовании 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) вернет ту же информацию для всех функций одного типа.

 Смежные вопросы

  • Нет связанных вопросов^_^