Sternchen < ja / nein >

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.
Antworten
Nobuddy
User
Beiträge: 994
Registriert: Montag 30. Januar 2012, 16:38

Hallo zusammen,
was mich interessiert, ist dass ich beim Googeln von Python-Code immer wieder darauf stoße:

Code: Alles auswählen

from PyQt5.QtWidgets import *
ich habe es bisher so gehandhabt:

Code: Alles auswählen

from PyQt5.QtWidgets import (
	QApplication,
	QMainWindow,
	.....
	)
Habe da noch im Hinterkopf, dass Sternchen verpönt sind.
Hat sich da etwas geändert?

Grüße Nobuddy
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Nein. Immer noch verpönt. Aber da draußen sind halt ne Menge Leute, die das Internet voll kleistern mit schlechtem Code.
narpfel
User
Beiträge: 643
Registriert: Freitag 20. Oktober 2017, 16:10

Und Google ist halt auch einfach eine *sehr* schlechte Quelle zum Lernen. Die ersten Suchtreffer für Python-Themen sind quasi durchgängig Seiten, die extremes SEO betreiben, damit ganz oben bei Google landen, und gleichzeitig unterirdisch schlechten Code zeigen.
Benutzeravatar
bwbg
User
Beiträge: 407
Registriert: Mittwoch 23. Januar 2008, 13:35

Ich versuche mir gerade auszumalen, wann *-Importe sinnvoll wären. Im Grunde sind diese nur innerhalb eines packages zu erlauben als Import einer Art prelude für Datenklassen, Protokollen, ABCs, etc.

Hier kann ich selbst steuern, welche Namen ich „rausblase“ mittels __all__.

*-Importe, wie bei tkinter-Tutorien (oder eben Qt) oft gesehen, wären somit unzulässig.
"Du bist der Messias! Und ich muss es wissen, denn ich bin schon einigen gefolgt!"
Benutzeravatar
DeaD_EyE
User
Beiträge: 1012
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Dann kann man auch gleich in C/C++ programmieren. Bei C++ habe ich mal gehört, dass es Namespaces gibt.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Benutzeravatar
/me
User
Beiträge: 3554
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Bei Stackoverflow stieß ich neulich auf so etwas ähnliches (hier in vereinfachter Form):

Code: Alles auswählen

a, e, i = 2, 3, 4
from math import *
print(a * e * i)
Und dann kam die Frage auf, warum das Ergebnis nicht 24 ist, wie es sich gehört, sondern 21.74625462767236.

Wenn es jemandem nicht sofort klar ist: viel Spaß beim Suchen und Lernen. :)
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

@Dead_Eye: was meinst du? Sowas wie * Importe gibt es in C++ nicht. Es gibt Namensräume. Aber die sind offen, und es gibt keinen Weg, alles, was in einem enthalten ist, in einen include zu bekommen.
Nobuddy
User
Beiträge: 994
Registriert: Montag 30. Januar 2012, 16:38

Hallo und Danke für Euren Input!
Für mich waren die Sternchen nie eine Option.
Auf den ersten Blick zwar einfacher, aber wenn es dann um das Nachlesen bestimmter Module geht, habe ich den gleichen Arbeitsaufwand, wie ich es gleich richtig gemacht hätte.

Grüße Nobuddy
Benutzeravatar
DeaD_EyE
User
Beiträge: 1012
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

__deets__ hat geschrieben: Freitag 2. Dezember 2022, 10:28 @Dead_Eye: was meinst du? Sowas wie * Importe gibt es in C++ nicht. Es gibt Namensräume. Aber die sind offen, und es gibt keinen Weg, alles, was in einem enthalten ist, in einen include zu bekommen.
Die Namensräume sind bei C++ dazugekommen (use).
Bei C gibt es die nicht, soweit ich weiß. Für mein Verständnis wird der gesamte Code aus dem Header inkludiert und hat keinen eigenen Namensraum (C).
Man muss dann also nur genügend Header inkludieren, damit man dann irgendwann eine Namenskollision hat. Ich gehe mal von aus, dass man dann den Code einfach nicht compilieren kann.

Bei Python kann ich so viel importieren, bis der RAM voll ist und es wird keine einzige Kollision geben.
So wie ich jetzt gelernt habe, gibt es wohl bei C++ keine Möglichkeit Namensräume nicht zu nutzen?
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Antworten