Diskussion:Python (Programmiersprache)

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen
Diese Diskussionsseite dient dazu, Verbesserungen am Artikel „Python (Programmiersprache)“ zu besprechen. Persönliche Betrachtungen zum Thema gehören nicht hierher. Für allgemeine Wissensfragen gibt es die Auskunft.

Füge neue Diskussionsthemen unten an:

Klicke auf Abschnitt hinzufügen, um ein neues Diskussionsthema zu beginnen.
Archiv
/Archiv/1 · /Archiv/2
Wie wird ein Archiv angelegt?

Zugriff auf Elemente in Closures[Quelltext bearbeiten]

Die Aussage Auf diese Weise erhält man die drei Funktionsobjekte pop, push, is_empty, um den Stack zu modifizieren bzw. auf enthaltene Elemente zu prüfen, ohne l direkt modifizieren zu können. ist schlichtweg falsch. Es bedarf nur einer Python Installation um dies selbst zu verifizieren. [1]

push('Hello world')
l = pop.__closure__[1].cell_contents
print(l)
l.append(42)
print(pop())

Warum meine Änderung unter Verweis auf die Belegpflicht entfernt wurde, obgleich o.g. Falschaussage genau so wenig belegt ist, erschließt sich mir nicht. Wissenschaftliche Artikel zu diesem speziellen Feature der Programmiersprache Python sind mir nicht geläufig. --2001:16B8:6463:B600:7A1A:C2A0:31DF:FE56 00:58, 28. Feb. 2022 (CET)Beantworten

Das geht schlicht und ergreifend am Thema vorbei. Python ist eine introspektive Sprache, daher kann man immer auf (fast) alle Objekte direkt zugreifen und Kapselungen umgehen; dies liegt in der Natur der Sprache. Kapselung wird nicht erzwungen (mit einer Ausnahme, aber das würde hier zu weit führen); das gilt z.B. auch für Klassen- und Instanz-Attribute, für Properties und vieles mehr. Dies wird bereits an anderer Stelle im Artikel erwähnt. Das einzige, das an dem ursprünglichen Satz verbessert werden könnte, ist das Wort „können“ durch „müssen“ zu ersetzen. --Winof (Diskussion) 16:54, 2. Mär. 2022 (CET)Beantworten
Könnte man den Satz nicht einfach streichen, da er nachweislich (s.o.) sachlich falsch ist? --2001:9E8:6C65:B400:7627:EAFF:FEA9:DF7D 18:41, 8. Mär. 2022 (CET)Beantworten
PS: Der geänderte Text ist sachlich nicht mehr falsch. Allerdings fehlt zu der Aussage ein Beleg. Wie belegt man die Aussage
Auf diese Weise erhält man die drei Funktionsobjekte pop, push, is_empty, um den Stack zu modifizieren bzw. auf enthaltene Elemente zu prüfen, ohne dabei auf l direkt zuzugreifen.
am besten? --2001:9E8:6C65:B400:177B:F79D:C488:2501 18:52, 8. Mär. 2022 (CET)Beantworten

Funktionale Programmierung[Quelltext bearbeiten]

Meiner Meinung nach könnte der Abschnitt zur funktionalen Programmierung einen Hinweis auf functools vertragen. Hingegen verstehe ich nicht, warum als erstes auf Coconut hingewiesen wird, da es eine komplett andere Programmiersprache ist. (nicht signierter Beitrag von 2001:9E8:6C65:B400:177B:F79D:C488:2501 (Diskussion) 19:03, 8. Mär. 2022 (CET))Beantworten

match - Verzweigung[Quelltext bearbeiten]

Anders als im Artikeltext beschrieben, gibt es in Python ein Semi-Äquivalent von switch. Dieses heißt jedoch match und funktioniert etwas anders. --FF-11(Disk.|Bewertung|Beiträge)•Jungwikipedianer 18:27, 22. Jun. 2022 (CEST)Beantworten

Nun ja, man muss das etwas differenziert betrachten; „etwas anders“ ist eine Untertreibung. Konstrukte wie switch in C/C++ oder case in der Bourne-Shell sind im Grunde genommen nichts weiter als ein Ersatz für ifelse-Kaskaden, d.h. if-Abfragen mit mehreren Alternativen (Mehrfachverzweigung). Dagegen dient das matchcase-Konstrukt, das kürzlich mit Python 3.10 eingeführt wurde, für „structured pattern matching“ (ich bin nicht sicher, ob es einen etablierten deutschen Fachbegriff dafür gibt), wie es vor allem in funktionalen Sprachen verbreitet ist, z. B. Haskell, Erlang und Scala, wobei das Binden von Werten aus dem Pattern auf lokale Variablen ein zentraler Aspekt ist. Man kann dies auch für einfache (aber nicht alle!) Anwendungsfälle von ifelse-Kaskaden „missbrauchen“, aber es gibt da ein paar Stolpersteine. Der folgende Schnipsel hat z B. nicht das Ergebnis, das man vielleicht erwarten würde:
RED = 1
GREEN = 2
BLUE = 3

...

switch mycolor:
    match RED:
        print ("Farbe ist rot")
    ...
Dieser Code ist fehlerhaft (also bitte nicht als Beispiel verwenden!) und gibt immer den Text „Farbe ist rot“ aus, egal welchen Wert die Variable mycolor hat, weil das Pattern-Matching eben anders funktioniert als ein if-Ausdruck. Aus diesem Grund ist die Aussage durchaus weiterhin korrekt, dass Python kein gleichwertiges Äquivalent von switch (C/C++), case (Shell) o. ä. hat. Nichtsdestotrotz ist das neue Pattern-Matching in Python ein extrem mächtiges Werkzeug, das in dem Artikel einen eigenen Abschnitt verdient hat. Wer neugierig ist, dem empfehle ich die Lektüre des Tutorials in PEP 636. --Winof (Diskussion) 12:43, 23. Jun. 2022 (CEST)Beantworten
Es geht mir um genau zu sein um den Abschnitt #Syntax vor der ersten Unterüberschrift. Dort wird beschrieben, dass Python zur besseren Lesbarkeit switch nicht böte. Mit match scheint das aber nicht mehr so wirklich zutreffend zu sein (trotz der großen Unterschiede). --FF-11(Disk.|Bewertung|Beiträge)•Jungwikipedianer 18:15, 23. Jun. 2022 (CEST)Beantworten
Es trifft durchaus immer noch zu; ältere PEPs für die Einführung eines „klassischen“ switch-Statements wurden u. a. mit dieser Begründung abgelehnt, und daran hat sich nichts geändert. Es wurde ja kein solches Statement eingeführt. Aber ich gebe dir insofern recht, dass die Formulierung zu Missverständnissen und Verwechslungen führen kann. Daher tendiere ich dazu, den Satz komplett zu entfernen, denn so wichtig ist es nun auch wieder nicht (zum Vergleich: im Artikel C (Programmiersprache) wird das switch/case-Statement überhaupt nicht erläutert). Stattdessen sollte ein eigener Abschnitt zum structured pattern matching hinzugefügt werden; evtl. denke ich mir dazu etwas aus, wenn ich ein bisschen Zeit habe. --Winof (Diskussion) 09:24, 24. Jun. 2022 (CEST)Beantworten
Ich habe jetzt den fraglichen Satz entfernt, wie ich oben schrieb. Aber nach genauerem Hinschauen fällt auf, dass eigentlich der ganze Abschnitt überarbeitungsbedürftig ist. Dort steht, Python habe wenig „syntaktische Konstruktionen“ (sehr schwammig – was soll das genau sein?), und führt dann lediglich for, while und if auf. Das stimmt so nicht bzw. es erweckt einen falschen Eindruck; man müsste mindestens auch tryexcept und with erwähnen, sowie das neue matchcase. Natürlich sind auch Funktions- und Klassen-Definitionen „syntaktische Konstruktionen“, und dann gibt es noch Dinge wie async, Coroutinen und diverses andere. Vielleicht hat ja jemand Muße, den Abschnitt zu überarbeiten. Ich kann es auch versuchen, aber das wird vermutlich etwas dauern, da ich gerade reichlich andere Dinge zu tun habe. --Winof (Diskussion) 10:12, 24. Jun. 2022 (CEST)Beantworten

Darstellung im Bild Datentypen und Strukturen ist nicht korrekt[Quelltext bearbeiten]

Der Fakt, dass Bool ein integraler Typ ist, aber parallel zu int existiert ist leider falsch und führt in speziellen Fällen auch zu unerwarteten Problemen. Tatsächlich ist bool eine Ableitung von int (leicht zu prüfen mit issubclass(bool, int) bzw. so steht es auch auf der verwiesenen Seite: 'The Boolean type is a subtype of the integer type'). Für ein Grundverständnis kann die Darstellung sicher so bleiben, dem Anspruch auf exakte Darstellung genügt das aber nicht. --Matthias Kupfer 14:56, 30. Jul. 2023 (CEST)Beantworten

Wikipedia - ein allgemeines Nachschlagewerk?[Quelltext bearbeiten]

Wiki ist einmal angetreten, das Buch als Lexikon abzulösen. Ich habe mehrere Programmiersprachen gelernt, ua C++, und habe dennoch Mühe, das Kauderwelsch zu verstehen. Mir scheint, das ist eine Spielwiese für Informatiker. --2003:F7:AF31:7800:4DBA:BCA7:846D:88C9 23:27, 13. Feb. 2024 (CET)Beantworten

WP:Sei mutig und verbessere den Artikel. --Sebastian.Dietrich  ✉  08:58, 14. Feb. 2024 (CET)Beantworten

"Für Programmierneulinge wird der Zwang zu lesbarem Stil aber als Vorteil gesehen."[Quelltext bearbeiten]

Was soll mir diese sinnentstellende Aussage bitte sagen? Wen interessiert es, was Programmier"neulinge" denken; ab wann sind Programmier"neulinge" keine Programmier"neulinge" mehr und haben die dann eine andere Meinung, die auch wieder keinen interessiert?

Wie begründet denn ein Programmier"neuling" den angeblichen "Vorteil" und wen juckt das? --79.204.211.7 00:39, 18. Mai 2024 (CEST)Beantworten

Warum sollte ein Neuling das begründen? Wenn er Python nutzt/nutzen muss, wird ihm das so vorgeschrieben.
Ernsthaft, diese Aussage muss als TF betrachtet werden, solange es keine (reputable) Quelle gibt, die sich damit beschäftigt. Vielleich hat ja Landin selbst etwas dazu gesagt? Interessanterweise erwähnt en:Offside-Rule einen Scala-Profi, der den Produktivitätsgewinn herausstreicht. Kannst gerne mutig sein :-) --Burkhard (Diskussion) 16:56, 18. Mai 2024 (CEST)Beantworten
Hab die Programmierneulinge mal herausgenommen, und ersetzt mit Guido's Meinung dazu. --Heronils (Diskussion) 16:04, 21. Mai 2024 (CEST)Beantworten
Danke, schon mal besser. Von überlangen Code-Zeilen lese ich in der verlinkten Quelle aber nichts (und kann das als Argument auch nicht wirklich nachvollziehen) - oder habe ich etwas übersehen? Die Formulierung "beseitigt ... Irrtümer des Programmierers" ist sprachlich etwas seltsam - natürlich gibt es auch mit Einrückungen immer noch genügend andere Möglichkeiten, sich zu verhaun :-(. Gemeint ist doch wohl eher, dass optisch leichter zu erkennen ist, welche Statements zu einem Block gehören? Just BTW: erfahrene Programmiererinnen wissen auch so, wie man sich nicht in den eigenen Fuß schiesst - aber das ist eine andere Diskussion. Gruß, --Burkhard (Diskussion) 17:09, 21. Mai 2024 (CEST)Beantworten
Ja, das mit den überlangen Codezeilen habe ich aus dem letzten Absatz falsch herausgelesen. Der meinte ja, dass der Code vertikal wächst, nicht horizontal. Habe ich korrigiert. Das C Codebeispiel in der Quelle ist auch diskussionswürdig, dieser Fehler entsteht ja nur, weil C die Verwendung von Klammern nicht immer erzwingt, was ich für einen Fehler halte und selbst niemals machen würde. Aber das im Lemma zu erwähnen wäre ja Theoriefindung. Ich bin im übrigen auch skeptisch bezüglich der Python Einrückung, wegen Argumenten wie diesen. Auch macht es Lambdas zu lächerlichen Ein-Zeilen-Konstrukten, nicht vergleichbar mit etwa anonymen Funktionen in Javascript oder anderen Sprachen. Aber wie schon gesagt, das wäre Theoriefindung. --Heronils (Diskussion) 02:04, 22. Mai 2024 (CEST)Beantworten