Python 'Benzingespräche'

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Benutzeravatar
sparrow
User
Beiträge: 4165
Registriert: Freitag 17. April 2009, 10:28

Nee, weil es schrecklich ist.
Es ignoriert halt alles, was zu deinem Code gesagt wurde. Sich mit diesem Thema zu beschäftigen ist also reine Zeitverschwendung.
Natürlich kannst du gegen die Progammiersprache programmieren und irgendwie außergewöhnlich schwer verständlichen Coden schreiben. Es ist dann halt aber außergewöhnlich schwer verständlicher Code und hat mit dem, was Python aus macht, nichts zu tun.

Eine gute Lösung für dein Problem wurde dir her im Thread bereits gezeigt. Ich sehe nicht, wo dein Code dem überlegen sein sollte. Ich sehe aber viele Argumente dagegen. Und auch die wurden hier schon alle benannt.
Benutzeravatar
snafu
User
Beiträge: 6731
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Also nach seinem letzten Beitrag hat er sich für mich stark trollverdächtig gemacht. Aber wer weiß. Hier tummeln sich ja öfter mal so schräge Vogel rum, die tatsächlich ernst meinen, was sie schreiben.
ulipy
User
Beiträge: 83
Registriert: Mittwoch 17. November 2021, 21:42
Wohnort: Ba-Wü

Vorneweg:
an die TOCTOU-Racecondition z. B. hatte ich zu dem Zeitpunkt einfach nicht gedacht

Wenn das hier so rauskommt tut mir das leid - "schräger Vogel" wäre dann im Vergleich die eher treffende Einschätzung.

Was mir das zeigt:
Die Energie, welche erforderlich wäre, "pythonische" Regeln und Stil einzuhalten, wird keine meiner Optionen sein. Das ist auf einer Ebene zwar schade - die Welt geht dadurch jedoch nicht unter. Wichtig ist, dass mir das klar bewusst ist.

Was folgt daraus?
Python als Werkzeug zur Umsetzung funktionaler anwendungssicherer Programme zu verwenden.

Das "Problem" Lesbarkeit hier auf dieser Ebene stammt mit Sicherheit aus dem Unterschied in der grundsätzlichen "Denke". Wenn jemand - wie praktisch alle hier - mit OOP "aufgewachsen" ist, erscheint die Lesbarkeit "schwierig". Im umgekehrten Fall, wenn jemand OOP nie gelernt oder angewandt hat, kann er mit dem Code hier einigermaßen sicher umgehen.

Ich bin/war(?) tatsächlich dankbar für die vielen Hilfen!
Py::: 1. funktional zuverlässig, 2. Anfänger-lesbar, 3. Py-Konformität
Benutzeravatar
sparrow
User
Beiträge: 4165
Registriert: Freitag 17. April 2009, 10:28

ulipy hat geschrieben: Donnerstag 9. Dezember 2021, 18:25Das "Problem" Lesbarkeit hier auf dieser Ebene stammt mit Sicherheit aus dem Unterschied in der grundsätzlichen "Denke". Wenn jemand - wie praktisch alle hier - mit OOP "aufgewachsen" ist, erscheint die Lesbarkeit "schwierig". Im umgekehrten Fall, wenn jemand OOP nie gelernt oder angewandt hat, kann er mit dem Code hier einigermaßen sicher umgehen.
Nö. Die Einschätzung ist falsch.
Mit Objektorientierung hat dein Code hier nichts zu tun.
Du versuchst hier Erklärungen für schlechten Stil zu finden - da ist aber keine.
Ich wiederhole mich: Wie es richtig, gut und simpel geht wurde hier ausreichend dargelegt. Ganz ohne Objektorientierung.
Was mir fehlt ist deine Erklärung warum deine Lösung mit dem magischen ersten Argument besser sein soll als korrekt benannte Funktionen.

Es sollte selbsterklärend sein, dass dem Leser (und das bist auch du bei deinem eigenen Code)

Code: Alles auswählen

def write_settings(...
eingängiger ist als

Code: Alles auswählen

def read_or_write_settings("write", ...
Eine Funktion hat eine Aufgabe. Nicht mehrere. Auch das wurde hier bereits gesagt. Es heißt übrigens "Funktion" wie in "funktionale Programmierung" nicht wie "Funktion" in "Objektorientierte Programmierung".

Als ich von Zeitverschwendung gesprochen habe, meinte ich übrigens eher die Leute, deren Beiträge zu deinem Code du hier ignorierst - nicht dicht.
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@ulipy: Ich glaube nicht das hier alle mit OOP ”aufgewachsen” sind. Ich zum Beispiel nicht. Und bei der letzten Fragestellung mit der Funktion die mehrere Sachen macht und als Schnittstelle dann ein total undurchsichtiges ``*args`` mit zwei oder drei Argumenten bekommt, hat die Kritik ja auch gar nichts mit OOP zu tun. Das eine Funktion in der Regel genau *eine* Sachen machen sollte und nicht in der Funktion mehrere, sich ausschliessende Pfade existieren sollten, ist etwas das vor 30 Jahren als ich in Pascal, QBasic, und C programmiert habe, schon galt. Da gab es manchmal Gründe Ausnahmen zu machen, die es heute nicht mehr gibt, weil Laufzeit und Speicherverbrauch heute weniger kritisch sind und man beispielsweise nicht mehr darauf achten muss, dass ein Codesegment in 64 KiB passen muss, oder es auch noch Rechner gibt die im einstelligen Mhz-Bereich getaktet sind.

Ausserdem ist OOP ein Paradigma und nicht eine Spracheigenschaft und wenn man OOP gelernt hat, wird man sicher auch APIs in prozeduralen Programmiersprachen ”finden”, die sich sehr objektorientiert anfühlen. Der Schritt in Pascal von RECORD + Prozeduren/Funktion und gelegentlichen Prozedur- und Funktionstypen zu OBJECT und Methoden ist auch kein wirklich grosser. Und diesen Schritt konnte man ja auch vor 30 Jahren schon gehen. Ich hatte den damals im ersten Anlauf nicht richtig verstanden, unter anderem weil ich den entscheidenden Unterschied nicht sah und das erst nur für einen reinen syntaktischen Unterschied wahrnahm eigentlich das gleich zu schreiben, was ich sowieso schon hatte. So richtig Klick gemacht hatte das dann erst Ende der 90er mit Java.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
ulipy
User
Beiträge: 83
Registriert: Mittwoch 17. November 2021, 21:42
Wohnort: Ba-Wü

@sparrow
...
Was mir fehlt ist deine Erklärung warum deine Lösung mit dem magischen ersten Argument besser sein soll als korrekt benannte Funktionen.
...
Ok, das ist mit Sicherheit überwiegend, jedoch nicht ausschließlich, einem minimalistischen Ansatz zu verdanken. Dies kann ohne Übertreibung als "Eigenart" meinerseits gesehen werden.

Die gewählte Lösung wird dadurch selbstverständlich in keiner Weise "besser", verglichen mit "guten" Standards.

(Dazu eine weiter Anmerkung in der Antwort auf @__blackjack__)
Py::: 1. funktional zuverlässig, 2. Anfänger-lesbar, 3. Py-Konformität
ulipy
User
Beiträge: 83
Registriert: Mittwoch 17. November 2021, 21:42
Wohnort: Ba-Wü

@__blackjack__
@ulipy: Ich glaube nicht das hier alle mit OOP ”aufgewachsen” sind. Ich zum Beispiel nicht.
ja, das ist als bekannt vorauszusetzen, ebenso OOP als Paradigma (nicht als besondere "Eigenschaft" einer bestimmten Sprache).

Am Ende steht hier vor allem diese Geschichte:
"eine" anstelle von "zwei" Funktionen:
Es ist für mich auch beim allerbesten Willen schlicht unmöglich, in diesem Falle zwei Funktionen zu verwenden, wenn ich durch eine vielleicht etwas "eigene" Art erreiche, NIEMALS NICHT mehr über "settings" nachdenken zu müssen - in keiner Form, zu keinem Zeitpunkt, so lange nicht, bis sich etwas grundlegendes ändert.

Die Verwendung der *args hier erscheint mir persönlich dabei nun (in der aktuellen Form) tatsächlich nicht schwierig nachzuvollziehen, gleich, mit welcher persönlichen Geschichte man da herangeht.
Wenn jemand den docstring liest, hat er eigentlich alles, meine ich jedenfalls (ich kann damit natürlich falsch liegen - das würde dann jedoch entsprechende konkrete Argumente benötigen, was genau daran eigentlich "schwierig" ist. Solche kann ich hier bis heute jedenfalls nicht sehen.)

Alleine die Befolgung von Standards, hier, in diesem Falle, wird - für mich zumindest - kein Grund für einen Ansatz mit zwei Funktionen sein können.

So ticke ich halt..
Py::: 1. funktional zuverlässig, 2. Anfänger-lesbar, 3. Py-Konformität
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Was ist daran minimalistisch? Es ist doch undurchschaubar und komplex. Statt zwei Funktionen eine zu bauen, die dann innen drin wieder per if unterscheiden, worum es geht, ist nicht weniger. Es ist nur weniger strukturiert 🤷‍♂️
Benutzeravatar
sparrow
User
Beiträge: 4165
Registriert: Freitag 17. April 2009, 10:28

ulipy hat geschrieben: Donnerstag 9. Dezember 2021, 20:16Alleine die Befolgung von Standards, hier, in diesem Falle, wird - für mich zumindest - kein Grund für einen Ansatz mit zwei Funktionen sein können.

So ticke ich halt..
Dann brauchst du aber kein Forum.
Dann brauchst du einen einsamen Platz, wo du in deinem eigenen Saft schmoren möchtest..
Offensichtlich möchtest du, dass dir hier irgendw jemand sagt, dass dein Code in Ordnung ist. Ist er nicht. Du wirst dafür von keinem hier Absolution erhalten.
Deine Argumente, warum der Code so sein sollte sind augenscheinlich falsch (das wird einem spätestens klar, wenn die vorgeschlagene Lösung und deine nebeneinander liegen - dann ist sehr offensichtlich, welche von beiden minimalistisch ist).

Da du also keine nachvollziehbaren Argumente bringen kannst und alle Tipps ignorierst bin ich mal raus.
narpfel
User
Beiträge: 643
Registriert: Freitag 20. Oktober 2017, 16:10

@ulipy: Wenn der Code für dich so gut verständlich ist, wo ist das Problem?

Insbesondere nach den etlichen Iterationen hier im Thread sollte der Code also nicht nur richtig funktionieren, sondern auch gut getestet sein. Wenn da jetzt also immer noch ein Fehler drin wäre... würde das dann nicht zeigen, dass der Code nicht gut verständlich bzw. zu komplex ist? Zum Beispiel weil ein Randfall übersehen wurde, der nicht auftreten kann, wenn du den Code in sinnvolle Funktionen aufteilst?
ulipy
User
Beiträge: 83
Registriert: Mittwoch 17. November 2021, 21:42
Wohnort: Ba-Wü

__deets__ hat geschrieben: Donnerstag 9. Dezember 2021, 20:18 Was ist daran minimalistisch? Es ist doch undurchschaubar und komplex. ... ... Es ist nur weniger strukturiert 🤷‍♂️
Ok, es ist ohne Frage weniger strukturiert - undurchschaubar würde ich es jetzt nicht nennen können - jeder hier hat das durchschaut, so weit ich das mitbekommen habe :wink:
sparrow hat geschrieben: Donnerstag 9. Dezember 2021, 20:26
ulipy hat geschrieben: Donnerstag 9. Dezember 2021, 20:16Alleine die Befolgung von Standards, hier, in diesem Falle, wird - für mich zumindest - kein Grund für einen Ansatz mit zwei Funktionen sein können.

So ticke ich halt..
Dann brauchst du aber kein Forum.
...
Da du also keine nachvollziehbaren Argumente bringen kannst und alle Tipps ignorierst bin ich mal raus.
Wenn du das so siehst - ich kann dich nicht daran hindern. "Keine" Argumente gebracht und "alle" Tipps ignieriert habe ich jedenfalls m. W. nicht.
Py::: 1. funktional zuverlässig, 2. Anfänger-lesbar, 3. Py-Konformität
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Es dauert eben länger, bis man etwas versteht. Das liegt an mangelnder Struktur und schlechtem Design. Das man es trotzdem verstehen *kann* ist kein Ausweis dafür, das es gut ist.
ulipy
User
Beiträge: 83
Registriert: Mittwoch 17. November 2021, 21:42
Wohnort: Ba-Wü

narpfel hat geschrieben: Donnerstag 9. Dezember 2021, 20:27 @ulipy: Wenn der Code für dich so gut verständlich ist, wo ist das Problem?
...
Hatte deinen Einwurf nicht rechtzeitig gesehen.

Bin mir fast sicher, dass dir selbst klar ist, dass die Schlussfolgerung(en) logisch gesehen so nicht wirklich "legitim" sind - jedenfalls gibt es mit Sicherheit noch viele "Problemchen..", die dann eben auch speziell mit Python Syntax etc. zu tun haben.

Hätte ich die "42" richtig gut verstanden, wäre dies natürlich obsolet :)
Py::: 1. funktional zuverlässig, 2. Anfänger-lesbar, 3. Py-Konformität
narpfel
User
Beiträge: 643
Registriert: Freitag 20. Oktober 2017, 16:10

@ulipy: Ich bin mir sicher, dass du deine Funktion nie mit null Argumenten getestet hast, aber (fehlerhaften) Code geschrieben hast, der das behandeln soll. Dass dir das nicht aufgefallen ist, zeigt, dass der Code zu komplex ist. Insbesondere auch, weil die Prüfung komplett überflüssig wäre, wenn du den Code auf zwei Funktionen aufgeteilt hättest.
ulipy
User
Beiträge: 83
Registriert: Mittwoch 17. November 2021, 21:42
Wohnort: Ba-Wü

__deets__ hat geschrieben: Donnerstag 9. Dezember 2021, 20:54 Es dauert eben länger, bis man etwas versteht. Das liegt an mangelnder Struktur und schlechtem Design. Das man es trotzdem verstehen *kann* ist kein Ausweis dafür, das es gut ist.
Ja, ok, als "Ausweis" für eine "gute" oder gar vorzuziehende Herangehensweise hatte ich dies m. W. unmissverständlich weder gesagt oder dargestellt, denke ich zumindest - gemeint sowieso nicht
Py::: 1. funktional zuverlässig, 2. Anfänger-lesbar, 3. Py-Konformität
ulipy
User
Beiträge: 83
Registriert: Mittwoch 17. November 2021, 21:42
Wohnort: Ba-Wü

narpfel hat geschrieben: Donnerstag 9. Dezember 2021, 21:23 @ulipy: Ich bin mir sicher, dass du deine Funktion nie mit null Argumenten getestet hast, aber (fehlerhaften) Code geschrieben hast, der das behandeln soll. Dass dir das nicht aufgefallen ist, zeigt, dass der Code zu komplex ist. Insbesondere auch, weil die Prüfung komplett überflüssig wäre, wenn du den Code auf zwei Funktionen aufgeteilt hättest.
Absolut einverstanden - danke!
Es fand bisher kein nennenswertes Testen statt und ich war und bin absolut nicht der Ansicht, dass der Code - so wie er gerade ist - bereits zuverlässig verwendbar wäre.

Im Gegenteil - es war klar, dass das rein logische Nachvollziehen hier nicht ausreichernd ist, genau wegen dieser Struktur..
Py::: 1. funktional zuverlässig, 2. Anfänger-lesbar, 3. Py-Konformität
ulipy
User
Beiträge: 83
Registriert: Mittwoch 17. November 2021, 21:42
Wohnort: Ba-Wü

Nachtrag: ich gehe aber davon aus, dass der Programmierer rasch etwas bemerken würde, falls er sich so etwas einfallen ließe...
Py::: 1. funktional zuverlässig, 2. Anfänger-lesbar, 3. Py-Konformität
ulipy
User
Beiträge: 83
Registriert: Mittwoch 17. November 2021, 21:42
Wohnort: Ba-Wü

@ulipy: Ich bin mir sicher, dass du deine Funktion nie mit null Argumenten getestet hast, aber (fehlerhaften) Code geschrieben hast, der das behandeln soll. Dass dir das nicht aufgefallen ist, zeigt, dass der Code zu komplex ist. Insbesondere auch, weil die Prüfung komplett überflüssig wäre, wenn du den Code auf zwei Funktionen aufgeteilt hättest.
Jetzt muss ich doch sofort nachfragen - das ist erst mal sehr überraschend:
Weshalb genau ergibt dies einen Laufzeitfehler - ein solcher is ja deutlich unwillkommener als eine Parser-Meldung...

Mit
if 1 < len(args) > 3 or len(args) == 0:
passiert das nicht mehr :o
Py::: 1. funktional zuverlässig, 2. Anfänger-lesbar, 3. Py-Konformität
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Mit positions Argumenten hätte man lesbare Namen, und sowas passiert erst recht nicht, weil der Interpreter einen warnt. Ohne das man das vergessen kann & den Code mit solchen statements versalzt.
narpfel
User
Beiträge: 643
Registriert: Freitag 20. Oktober 2017, 16:10

@ulipy: Für welche Zahlen `x` gilt denn `1 < x > 3`?
Antworten