Kontext: Ich kann bis jetzt nur Java und will ein Programm schreiben um die Metadaten meiner Musikbibliothek zu verändern. Die Bibliothek die das Möglich macht unterstützt nur Python. Anfangs war ich echt positiv von der Einfachheit überrascht, aber mittlerweile kann ich den Hass auf Python sehr stark verstehen. Spätestens bei den Ersten Typisierungsfehlern lernt man stark typisierte Sprachen wie Java zu schätzen.

21 points

Was ich gelernt habe ist, dass du Python so schreiben solltest als wäre es typisiert. Hab bisher nur Godot Script geschrieben, aber das ist stark an Python angelehnt, deshalb hoffe ich, dass sich das übertragen lässt.

Du kannst so ziemlich allem einen Typ geben und das so forcieren. Dann solltest du nicht durcheinander kommen.

permalink
report
reply
6 points

Das Type-Checking kann aber leider nicht mit strikt typisierten Sprachen mithalten und erfordert oft manuelle Checks, die eigentlich komplett überflüssig sind. Liegt natürlich auch daran, dass man die Typen theoretisch ständig ändern kann, egal was dran steht.

Und was schlimmer ist: Fehler in den Annotations führen teilweise dazu, dass dir vermeintliche Folgefehler an komplett anderen Stellen angezeigt werden, als sie wirklich liegen. Z.B. dass deine Variable an gegebener Stelle den falschen Typ hat, was aber eigentlich daran liegt, dass an anderer Stelle was kompatibles aber verkehrtes zugewiesen wurde, wobei du ursprünglich die Annotation vergessen hast, weil an der Stelle ein Type-Hint aufgeplopt ist, was den ersten Fehler widerum unsichtbar macht.

Klingt vielleicht konstruiert, aber eine Annotation vergisst man schnell und wenn, dann wird es schnell ärgerlich.

permalink
report
parent
reply
9 points

Hilft einem wenig, wenn man libraries verwendet.

permalink
report
parent
reply
8 points
*

Schau dir mal pydantic und allgemein Type Hints an.

permalink
report
reply
18 points

Du brauchst mypy in deinem Leben.

Oder die Hartkern-Variante: in Rust schreiben und via Python konsumierbar machen mit PyO3

permalink
report
reply
3 points

Was macht das denn genau?

permalink
report
parent
reply
6 points
*

Python kann mittlerweile statische type hints. Dabei schreibst du nur die intention (“ein int geht rein, ein bool kommt raus”). Mypy warnt dich dann wenn du in irgendeine Funktion Daten reinstecken willst, die nicht reinpassen. Zur Laufzeit werden die type gibts ignoriert. Je nachdem wen man fragt ist das entweder eine total flexible Art Typen so stark oder so lax wie man möchte in seinen code zu integrieren, oder es ist nutzlos da es keine laufzeitsicherheit bietet.

permalink
report
parent
reply
6 points

Im Prinzip ja, aber für ein One-Off-Skript zum Anpassen von Metadaten wären mir das dann wahrscheinlich doch zuviele Typen.

permalink
report
parent
reply
12 points

Python ist stark Typisiert. Was du meist ist dynamisch - statisch.

permalink
report
reply
10 points

Ich mag dynamische Typisierung. Ich möchte nicht an jeder Stelle dem Programm erklären müssen, dass ich eine Fließkommazahl speichern möchte, wenn ich eine Ganzzahl mit einer Fließkommazahl multipliziert habe. Ich möchte auch nicht bei großen 2D-Arrays Speicherplatz fressen, weil keine Spalten mit verschiedneen Typen zugelassen werden und alles in Fließkomma, oder noch schlimmer in Text umgewandelt werden muss.

permalink
report
parent
reply
11 points

a) Bei statisch typisierten Sprachen geht der Trend auch stark dort hin, dass der Complier für Dich die Typen ermittelt - zur Compile-Zeit. Auch haben viele davon auch die Möglichkeit punktuell dynamisch zu arbeiten, an genau den Stellen, wo man es braucht.

b) Oh wow, du möchtest nicht “Speicherplatz fressen”. Dann nimm eine Sprache / Werkzeug / Library, die nicht pro gespeichertem Wert einzeln tracken muss, von welchem Typ sie ist. Hier zahlst Du in dynamischen Sprachen immer einen Performance-Overhead. Deswegen wird z. B. in Python viel Number crunching auch nicht in Python selbst gemacht, sondern in NumPy

permalink
report
parent
reply
5 points

ad b) nicht nur Performance-Overhead, sondern eine dynamisch typisierte Sprache macht das ja auch nicht umsonst, da wird irgendwo ein Typen-Bit oder Byte rumfliegen.

Ich glaube, dass hinter der vorangehenden (also nicht deiner) Aussage, die Unkenntnis über effiziente Speichermodelle steht. Ein auf fp32 basiertes Modell ist für hohen Durchsatz garantiert geeigneter als irgendwas gemischtes. Deswegen ist der Speicherplatz egal, das wird eh alles in den Cache gerammelt und die sind groß genug. Und bei Nudelmaschinen (SIMD) muss man eh Homogenität gewährleisten.

permalink
report
parent
reply
16 points

Provokativer Nimm: Wenn du dynamische Typisierung in einer Matrix brauchst, ist dein Programm vermutlich nicht besonders performant.

Genau wegen sowas würde ich Python nie für mehr als einfache Skripte nehmen, aber da stehe ich vermutlich eher allein auf weiter Flur.

permalink
report
parent
reply
3 points

Sowas macht in modernem Python auch niemand. Dem type checker für solche Konstrukte einen Typ beizubringen ist quasi unmöglich. Wer außerhalb von winzigen skripten keine type hints nutzt, machts mMn falsch.

permalink
report
parent
reply
2 points

dynamische Typisierung

“Spalten mit verschiedenen Typen” klingt für mich stark nach Tabelle, a.k.a. Excel-Tabelle oder ne Art Datenbank-Table.

permalink
report
parent
reply
8 points

[Zensierte abfällige und zynische Bemerkungen über Python]

permalink
report
reply
8 points

[Sarkastisch formulierter Vorwurf des mangelnden Verständnisses von Python]

permalink
report
parent
reply
1 point

Verstehe ich so gar nicht, meine Erfahrung mit Pyth🤢 warte kurz 🤮

permalink
report
parent
reply
4 points

[Patzige Antwort über GIL, furchtbare Syntax und brechende Veränderungen]

permalink
report
parent
reply

ich_iel

!ich_iel@feddit.org

Create post

Die offizielle Zweigstelle von ich_iel im Fediversum.

Alle Pfosten müssen den Titel ‘ich_iel’ haben, der Unterstrich darf durch ein beliebiges Symbol oder Bildschriftzeichen ersetzt werden. Ihr dürft euch frei entfalten!



📱 Empfohlene Schlaufon-Applikationen für Lassmich


Befreundete Kommunen:


Regeln:

1. Seid nett zueinander

Diskriminierung anderer Benutzer, Beleidigungen und Provokationen sind verboten.

2. Pfosten müssen den Titel 'ich_iel' oder 'ich iel' haben

Nur Pfosten mit dem Titel ‘ich_iel’ oder ‘ich iel’ sind zugelassen. Alle anderen werden automatisch entfernt.

Unterstrich oder Abstand dürfen durch ein beliebiges Textsymbol oder bis zu drei beliebige Emojis ersetzt werden.

3. Keine Hochwähl-Maimais oder (Eigen)werbung

Alle Pfosten, die um Hochwählis bitten oder Werbung beinhalten werden entfernt. Hiermit ist auch Eigenwerbung gemeint, z.b. für andere Gemeinschaften.

4. Keine Bildschirmschüsse von Unterhaltungen

Alle Pfosten, die Bildschirmschüsse von Unterhaltungen, wie beispielsweise aus WasistApplikaton oder Zwietracht zeigen, sind nicht erlaubt. Hierzu zählen auch Unterhaltungen mit KIs.

5. Keine kantigen Beiträge oder Meta-Beiträge

ich_iel ist kein kantiges Maimai-Brett. Meta-Beiträge, insbesondere über gelöschte oder gesperrte Beiträge, sind nicht erlaubt.

6. Keine Überfälle

Wer einen Überfall auf eine andere Gemeinschaft plant, muss diesen zuerst mit den Mods abklären. Brigadieren ist strengstens verboten.

7. Keine Ü40-Maimais

Maimais, die es bereits in die WasistApplikation-Familienplauderei geschafft haben oder von Rüdiger beim letzten Stammtisch herumgezeigt wurden, sind besser auf /c/ichbin40undlustig aufgehoben.

8. ich_iel ist eine humoristische Plattform

Alle Pfosten auf ich_iel müssen humorvoll gestaltet sein. Humor ist subjektiv, aber ein Pfosten muss zumindest einen humoristischen Anspruch haben. Die Atmosphäre auf ich_iel soll humorvoll und locker gehalten werden.

9. Keine Polemik, keine Köderbeiträge, keine Falschmeldungen

Beiträge, die wegen Polemik negativ auffallen, sind nicht gestattet. Desweiteren sind Pfosten nicht gestattet, die primär Empörung, Aufregung, Wut o.Ä. über ein (insbesonders, aber nicht nur) politisches Thema hervorrufen sollen. Die Verbreitung von Falschmeldungen ist bei uns nicht erlaubt.


Bitte beachtet auch die Regeln von Feddit.org

Community stats

  • 2.3K

    Monthly active users

  • 3.6K

    Posts

  • 38K

    Comments