511

システムに Python モジュールがインストールされており、そのモジュールで使用できる関数/クラス/メソッドを確認したいと考えています。

helpそれぞれで関数を呼び出したい。ClassName.methodsRuby では、そのクラスで使用可能なすべてのメソッドのリストを取得するようなことができます。Pythonに似たようなものはありますか?

例えば。何かのようなもの:

from somemodule import foo
print(foo.methods)  # or whatever is the correct method to call
4

20 に答える 20

569

を使用dir(module)して、使用可能なすべてのメソッド/属性を表示できます。PyDocs もチェックしてください。

于 2008-09-26T12:40:20.183 に答える
238

inspectモジュールを使用します。

from inspect import getmembers, isfunction

from somemodule import foo
print(getmembers(foo, isfunction))

pydocモジュール、help()対話型インタープリターの関数、およびpydoc必要なドキュメントを生成するコマンドライン ツールも参照してください。ドキュメントを表示したいクラスを指定するだけです。たとえば、HTML 出力を生成してディスクに書き込むこともできます。

于 2008-09-26T12:41:04.690 に答える
210

モジュールを編集したらimport、次のことができます。

help(modulename)

... すべての機能に関するドキュメントを一度にインタラクティブに取得する。または、次を使用できます。

dir(modulename)

... モジュールで定義されているすべての関数と変数の名前を単純にリストします。

于 2008-09-26T15:08:54.350 に答える
121

inspect.getmembersモジュール内のすべての変数/クラス/関数などを取得するために使用しinspect.isfunction、述語として渡して関数だけを取得します。

from inspect import getmembers, isfunction
from my_project import my_module
    
functions_list = getmembers(my_module, isfunction)

getmembers(object_name, object)名前のアルファベット順にソートされたタプルのリストを返します。

モジュールisfunction内の他のisXXX関数に置き換えることができます。inspect

于 2012-03-20T20:59:57.110 に答える
74
import types
import yourmodule

print([getattr(yourmodule, a) for a in dir(yourmodule)
  if isinstance(getattr(yourmodule, a), types.FunctionType)])
于 2008-09-26T12:50:39.190 に答える
61

完全を期すために、コードをインポートする代わりに解析したい場合があることを指摘しておきます。Animportはトップレベルの式を実行しますが、これが問題になる可能性があります。

たとえば、zipappで作成されるパッケージのエントリ ポイント関数をユーザーが選択できるようにしています。誤ったコードを使用importinspectて実行すると、クラッシュ、ヘルプ メッセージの出力、GUI ダイアログのポップアップなどにつながるリスクがあります。

代わりにastモジュールを使用して、トップレベルの関数をすべてリストします。

import ast
import sys

def top_level_functions(body):
    return (f for f in body if isinstance(f, ast.FunctionDef))

def parse_ast(filename):
    with open(filename, "rt") as file:
        return ast.parse(file.read(), filename=filename)

if __name__ == "__main__":
    for filename in sys.argv[1:]:
        print(filename)
        tree = parse_ast(filename)
        for func in top_level_functions(tree.body):
            print("  %s" % func.name)

このコードlist.pyを入力してそれ自体を入力として使用すると、次のようになります。

$ python list.py list.py
list.py
  top_level_functions
  parse_ast

もちろん、AST は非常に低レベルであるため、Python のような比較的単純な言語であっても、AST をナビゲートするのは難しい場合があります。しかし、シンプルで明確なユースケースがあれば、それは実行可能で安全です。

ただし、欠点は、実行時に生成される関数 ( など) を検出できないことですfoo = lambda x,y: x*y

于 2015-06-23T14:39:55.100 に答える
42

評価したくないコードについては、AST ベースのアプローチ ( cslの回答など) をお勧めします。

import ast

source = open(<filepath_to_parse>).read()
functions = [f.name for f in ast.parse(source).body
             if isinstance(f, ast.FunctionDef)]

それ以外の場合は、検査モジュールが正しいです。

import inspect

import <module_to_inspect> as module

functions = inspect.getmembers(module, inspect.isfunction)

これにより、 の形式で 2 タプルのリストが得られます[(<name:str>, <value:function>), ...]

上記の簡単な回答は、さまざまな回答やコメントで示唆されていますが、明示的には言及されていません。

于 2017-09-07T21:42:46.770 に答える
26

これでうまくいきます:

dir(module) 

ただし、返されたリストを読むのが面倒な場合は、次のループを使用して、1行に1つの名前を取得してください。

for i in dir(module): print i
于 2008-09-26T23:41:16.630 に答える
22

dir(module)ほとんどの回答で述べられているように、スクリプトまたは標準インタープリターを使用する場合の標準的な方法です。

ただし、IPythonのようなインタラクティブな python シェルでは、タブ補完を使用して、モジュールで定義されているすべてのオブジェクトの概要を取得できます。printこれは、スクリプトを使用してモジュールで定義されている内容を確認するよりもはるかに便利です。

  • module.<tab>モジュールで定義されているすべてのオブジェクト (関数、クラスなど) が表示されます。
  • module.ClassX.<tab>クラスのメソッドと属性を表示します
  • module.function_xy?またはmodule.ClassX.method_xy?、その関数/メソッドのdocstringが表示されます
  • module.function_x??またはmodule.SomeClass.method_xy??、関数/メソッドのソース コードが表示されます。
于 2012-04-09T20:51:58.233 に答える
3

次のメソッドを使用して、シェルからモジュール内のすべての関数のリストを取得できます。

import module

module.*?
于 2016-10-18T21:26:53.523 に答える
2
r = globals()
sep = '\n'+100*'*'+'\n' # To make it clean to read.
for k in list(r.keys()):
    try:
        if str(type(r[k])).count('function'):
            print(sep+k + ' : \n' + str(r[k].__doc__))
    except Exception as e:
        print(e)

出力:

******************************************************************************************
GetNumberOfWordsInTextFile : 

    Calcule et retourne le nombre de mots d'un fichier texte
    :param path_: le chemin du fichier à analyser
    :return: le nombre de mots du fichier

******************************************************************************************

    write_in : 

        Ecrit les donnees (2nd arg) dans un fichier txt (path en 1st arg) en mode a,
        :param path_: le path du fichier texte
        :param data_: la liste des données à écrire ou un bloc texte directement
        :return: None


 ******************************************************************************************
    write_in_as_w : 

            Ecrit les donnees (2nd arg) dans un fichier txt (path en 1st arg) en mode w,
            :param path_: le path du fichier texte
            :param data_: la liste des données à écrire ou un bloc texte directement
            :return: None
于 2020-04-01T10:21:21.477 に答える
1

現在のファイルで定義されているすべての関数のリストを取得したい場合は、次のように実行できます。

# Get this script's name.
import os
script_name = os.path.basename(__file__).rstrip(".py")

# Import it from its path so that you can use it as a Python object.
import importlib.util
spec = importlib.util.spec_from_file_location(script_name, __file__)
x = importlib.util.module_from_spec(spec)
spec.loader.exec_module(x)

# List the functions defined in it.
from inspect import getmembers, isfunction
list_of_functions = getmembers(x, isfunction)

アプリケーションの例として、単体テスト スクリプトで定義されたすべての関数を呼び出すためにそれを使用します。

これは、ここでのThomas Woutersadrianの回答、および別の質問に関するSebastian Rittauからのコードの組み合わせです。

于 2021-01-16T01:11:58.090 に答える