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 に答える