Seite 1 von 1

Module und Klassen durchsuchen und verstehen

Verfasst: Sonntag 3. November 2019, 23:26
von paifndev
Hallo zusammen,

ich habe bisher nur mit statisch typisierten Programmiersprachen gearbeitet. Nun möchte ich Python (für Data Science und Machine Learning) lernen.

Allerdings habe ich mit Python meine Schwierigkeiten.

Wie kann ich herausfinden, welche Funktionen in einem Modul oder einer Klasse mir zur Verfügung stehen, wenn ich den Typ nicht wirklich kenne?

Beispiel:

Code: Alles auswählen

import matplotlib.pyplot as pyplot

axes = pyplot.axes()
Ich habe nun folgende Fragen zu diesem kleinen Quelltext und dem Typ hinter axes:
  • Wie kann ich herausfinden, mit welchem Objekt ich arbeite, ohne mit print(type(...)) zu arbeiten?
  • Wie kann ich die mir zur Verfügung stehenden Funktionen und Variablen herausfinden, ohne in die Dokumentation schauen zu müssen?
  • Wo befindet sich z.B. die Funktion set_xlim?
  • Wieso wird der Rückgabetyp derart versteckt bzw. dynamisch aufgebaut, dass es schwer zu verstehen ist?
  • Wie geht ihr vor, wenn ihr euch fremde Quelltexte anschauen und bspw. zum richtigen bzw. endgültigen Rückgabewert gelangen wollt?
Ich versuche in meinen Quelltexten Type Hints zu benutzen und mir die Entwicklung auch mit PyCharm stärker zu vereinfachen. Aber auch ohne die Type Hints interessiert mich, wie auf die Datentypen, Funktionen und Variablen z.B. hinter axes komme, ohne in die Dokumentation schauen zu müssen.

Vielen Dank und viele Grüße

paifndev

Re: Module und Klassen durchsuchen und verstehen

Verfasst: Sonntag 3. November 2019, 23:44
von __deets__
Du wirst um das lesen von Dokumentation nicht herumkommen. So mache ich das, und jeder andere, der lange Python programmiert. Wenn das nicht reicht, arbeite ich ebenfalls mit print oder dem eingebauten Debugger.

Und zur Frage des wieso: weil man sich bei Python entscheiden hat, die durch den Verzicht auf statische Typisierung gewonnene Flexibilität auch zu nutzen. Sonst hat man ja nix davon. Also gibt es zb “dependent types”, was nichts anderes heißt, als das der Typ einer Funktion von den konkreten Werten ihrer Eingabe abhängen kann. Das erlaubt viel generischeres programmieren. Etwas das in anderen Sprachen schwer oder nur mit großen Schmerzen geht, zb C++ Meta Template Programmierung.

Re: Module und Klassen durchsuchen und verstehen

Verfasst: Montag 4. November 2019, 03:57
von __blackjack__
@paifndev: Was hast Du gegen Dokumentation? Neben der Frage was für Funktionen, Klassen, und Methoden man zur Verfügung hat, interessiert doch auch was die machen und was die Argumente bedeuten, worauf man achten muss, und so weiter. Ich schaue auch bei statisch typisierten Programmiersprachen regelmässig in die Dokumentation.

``print(type(…))`` kann man in Programmen machen, aber meistens schaue ich mir solche Sachen in einer interaktiven Python-Shell an. Ich verwende IPython bzw. Jupyter-Notebooks dafür. Da kann man ”live” mit den Bibliotheken und Objekten herum spielen, und sich die im Code eingebettete Dokumentation und den Quelltext anschauen.

Mit `matplotlib` hast Du ein Beispiel gewählt was wirklich *sehr* dynamisch ist und aus Softwareentwicklersicht auch eine schlimme API hat, mit dem globalen Zustand zum Beispiel. Und mit der `axes()`-Funktion hast Du auch genau eines der Beispiele erwischt die __deets__ wahrscheinlich meinte mit dem ausnutzen der Möglichkeiten von Python die in den meisten statisch typisierten Programmiersprachen so nicht möglich sind. Selbst die Dokumentation weiss an der Stelle ja nicht welche Argumente die `axes()`-Funktion hat weil die Schlüsselwortargumente an die konkrete `Axes`-Klasse durchgereicht werden, und man dann *dort* nachsehen muss.

Ein Grossteil der API von `matplotlib` richtet sich an Leute die etwas wie das Plotten in Matlab in Python machen wollen, in einer Umgebung wie Jupyter(Lab)-Notebooks oder der Spyder-IDE. Also eher interaktiv als ”normal” programmiert.

Zu `set_xlim()`: Dokumentation von Python-Modulen/-Bibliotheken haben in aller Regel einen Index wo die ganzen Module, Funktionen, Klassen, und Methoden drin stehen. Matplotlib's Dokumentation ist da keine Ausnahme. Der Index hat für `set_xlim()` folgende Links: https://matplotlib.org/api/_as_gen/matp ... s.set_xlim und https://matplotlib.org/api/_as_gen/mpl_ ... D.set_xlim