584 Stimmen

Wie kann man alle Funktionen in einem Python-Modul auflisten?

Ich habe ein Python-Modul auf meinem System installiert und würde gerne sehen, welche Funktionen/Klassen/Methoden darin verfügbar sind.

Ich möchte die help Funktion für jeden einzelnen. In Ruby kann ich etwas tun wie ClassName.methods um eine Liste aller für diese Klasse verfügbaren Methoden zu erhalten. Gibt es etwas Ähnliches in Python?

z. B. so etwas wie:

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

624voto

camflan Punkte 15513

Sie können verwenden dir(module) um alle verfügbaren Methoden/Attribute zu sehen. Sehen Sie sich auch PyDocs an.

21 Stimmen

Das ist nicht ganz richtig. Die dir() Die Funktion "versucht, die relevantesten und nicht die vollständigsten Informationen zu liefern". Quelle: docs.python.org/library/functions.html#dir .

16 Stimmen

@jAckOdE Zitiert? Dann erhalten Sie die verfügbaren Methoden und Attribute des String-Moduls.

0 Stimmen

@OrangeTux: ups, das sollte eine Frage sein. ja, du hast sie beantwortet.

286voto

Thomas Wouters Punkte 124421

Verwenden Sie die inspect Modul:

from inspect import getmembers, isfunction

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

Siehe auch die pydoc Modul, das help() Funktion im interaktiven Interpreter und die pydoc Befehlszeilentool, das die gewünschte Dokumentation erstellt. Sie geben einfach die Klasse an, für die Sie die Dokumentation wünschen. Es kann auch z. B. HTML-Ausgaben erzeugen und auf die Festplatte schreiben.

4 Stimmen

Ich habe mich für die Verwendung der ast Modul in bestimmten Situationen in meine Antwort .

64 Stimmen

TL;DR der Antworten unten: verwenden dir um Funktionen und Variablen zurückzugeben; verwenden Sie inspect nur für Filterfunktionen; und verwenden Sie ast zu parsen, ohne zu importieren.

0 Stimmen

Es lohnt sich, jeden der von Sheljohn zusammengefassten Ansätze auszuprobieren, da sich die Ergebnisse von einer Lösung zur nächsten drastisch unterscheiden.

237voto

Dan Lenski Punkte 72055

Sobald Sie die import des Moduls können Sie einfach tun:

help(modulename)

... Um die Dokumentationen zu allen Funktionen auf einmal zu erhalten, interaktiv. Oder Sie können verwenden:

dir(modulename)

... Zur einfachen Auflistung der Namen aller im Modul definierten Funktionen und Variablen.

3 Stimmen

@sheljohn was ist der Sinn dieser Kritik? Meine Lösung auch listet Funktionen auf, und die inspect Modul kann auch Variablen auflisten, auch wenn dies hier nicht ausdrücklich verlangt wird. Diese Lösung erfordert nur eingebaute Objekte, was in einigen Fällen sehr nützlich sein kann, wenn Python in einer eingeschränkten/abgesperrten/gebrochenen Umgebung installiert ist.

0 Stimmen

Danke, das hätte fast funktioniert, aber ich dachte, dass dir würde die Ergebnisse ausdrucken, aber es sieht so aus, als ob Sie Folgendes tun müssten print(dir(modulename)) .

3 Stimmen

Diese Antwort war definitiv die hilfreichste. Vielen Dank für diesen Tipp! Ich finde jetzt help(modulname) zu meinem Favoriten.

133voto

adnan Punkte 1264

Verwenden Sie inspect.getmembers um alle Variablen/Klassen/Funktionen usw. in einem Modul zu erhalten, und übergeben Sie in inspect.isfunction als Prädikat, um nur die Funktionen zu erhalten:

from inspect import getmembers, isfunction
from my_project import my_module

functions_list = getmembers(my_module, isfunction)

getmembers gibt eine Liste von Tupeln zurück (object_name, object) alphabetisch nach Namen sortiert.

Sie können ersetzen isfunction mit einem der anderen isXXX Funktionen im inspect module .

30 Stimmen

getmembers kann ein Prädikat annehmen, also könnte Ihr Beispiel auch so geschrieben werden: functions_list = [o for o in getmembers(my_module, isfunction)]

36 Stimmen

@ChristopherCurrie, Sie könnten auch das nutzlose Listenverständnis vermeiden mit functions_list = getmembers(my_module, predicate) weil es bereits eine Liste zurückgibt ;)

7 Stimmen

Um herauszufinden, ob die Funktion in diesem Modul definiert (und nicht importiert) ist, fügen Sie hinzu: zu "if isfunction(o[1]) und o[1].__module__ == mein_modul.__name__ " -- beachten Sie, dass es nicht unbedingt funktioniert, wenn die importierte Funktion aus einem Modul mit demselben Namen wie dieses Modul stammt.

76voto

Oli Punkte 14359
import types
import yourmodule

print([getattr(yourmodule, a) for a in dir(yourmodule)
  if isinstance(getattr(yourmodule, a), types.FunctionType)])

8 Stimmen

Verwenden Sie für diese Route getattr(yourmodule, a, None) anstelle von yourmodule.__dict__.get(a)

5 Stimmen

Your_module.__dict__ ist meine Wahl, weil Sie tatsächlich ein Diktat erhalten, das functionName:<function> enthält und Sie nun die Möglichkeit haben, diese Funktion dynamisch aufzurufen. gute Zeiten!

2 Stimmen

Python 3 freundlich mit etwas Zucker: import types def print_module_functions(module): print(' \n '.join([str(module.__dict__.get(a).__name__) for a in dir(module) if isinstance(module.__dict__.get(a), types.FunctionType)]))

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X