Seite 1 von 1
input() aus modul im Hauptcode weiterverarbeiten
Verfasst: Donnerstag 15. Februar 2018, 18:30
von tholle
Hi Leute,
ich stehe seit ein paar Stunden auf dem Schlauch und komme nicht weiter.
Ich habe ganz einfaches Modul, welches entweder via sys.arg[] Parameter entgegen nehmen soll, oder via input().
Das Modul sieht wie folgt aus:
Code: Alles auswählen
import sys
def get_player():
if len(sys.argv[1:]) > 0:
player = sys.argv[1:]
else:
player = input()
player = player.split()
Im Haupteil meines Programms moechte ich die Liste
player weiterverarbeiten.
Das player-Modul binde ich wie folgt ein:
Allerdings kann ich mir den Inhalt von
lmscontrol.player.get_player() nicht ausgeben lassen. Da kommt dummerweise
None zurueck.
Gehe ich von der Denkweise her falsch heran oder mache ich einfach nur im Coding etwas falsch.
Das Modul laesst stand-alone aufrufen und die Liste
player ist dann auch mit Werten gefuellt.
z.B:
Gibt
BUERO aus.
Kann mich da mal bitte jemand in die richtige Spur bringen?
thx und Gruss,
tholle
Re: input() aus modul im Hauptcode weiterverarbeiten
Verfasst: Donnerstag 15. Februar 2018, 18:34
von __deets__
Du musst den gewuenschten Wert schon mit "return" aus der Funktion bugsieren. Und wenn du mit argv arbeitest, lohnt ein Blick auf das schon eingebaute argparse-Modul, womit sich gleich viel besser arbeiten laesst.
Re: input() aus modul im Hauptcode weiterverarbeiten
Verfasst: Donnerstag 15. Februar 2018, 18:44
von tholle
return hatte ich auch schon versucht. Auch da kommt
None zurueck.
Code: Alles auswählen
import sys
def get_player():
if len(sys.argv[1:]) > 0:
player = sys.argv[1:]
else:
player = input()
player = player.split()
return
argparse schaue ich mir an.
Vielen Dank schon mal.
Gruss,
tholle
EDIT:// Funktionert! Muss natuerlich
return player heissen.
Argparse habe ich mir angeschaut, aber fuer meinen Anwendungsfall noch keinen Mehrwert gefunden. Ich will beim meinem Programmaufruf einfach nur Playernamen uebergeben, die dann im weiteren Verlauf verarbeitet werden.
z.B:
Diese Parameter (
BUERO, KUECHE, WOHNZIMMER) sollen als Liste im Programm
soundtool.py landen.
Re: input() aus modul im Hauptcode weiterverarbeiten
Verfasst: Donnerstag 15. Februar 2018, 19:04
von noisefloor
Hallo,
du musst dem `return` auch einen Wert mitgeben, in deinem Fall `player`. Ein nacktes return gibt standardmäßig `None` zurück, wie du ja schon festgestellt hast.
Gruß, noisefloor
Re: input() aus modul im Hauptcode weiterverarbeiten
Verfasst: Donnerstag 15. Februar 2018, 19:09
von tholle
@noisefloor,
vielen Dank. Hatte ich auch gerade herausgefunden.
Viele Gruesse,
tholle
Re: input() aus modul im Hauptcode weiterverarbeiten
Verfasst: Freitag 16. Februar 2018, 08:16
von Sirius3
@tholle: vermeide, in tief verschachtelten Modulen so globale Variablen wie sys.argv zu benutzen. Das ist sehr fehleranfällig, falls man mal doch auf die Idee kommt, Programmargumente für etwas anderes zu verwenden.
Normalerweise übergibt man aus dem Hauptprogramm sys.argv an die Funktion, die die Verarbeitung übernimmt:
Code: Alles auswählen
import sys
def parse_args(argv):
if argv[1:]:
players = argv[1:]
else:
players = input().split()
return players
def main():
players = parse_args(sys.argv)
...
if __name __ == '__main__':
main()
Re: input() aus modul im Hauptcode weiterverarbeiten
Verfasst: Samstag 17. Februar 2018, 11:24
von tholle
Vielen Dank fuer den Hinweis.
Ich haette gedacht, man soll so viel wie moeglich modulieren.
So hatte ich angenommen, es waere sinnvoll, in einem eigenen Modul den Player entgegen zu nehmen, und dieses Modul wiederum in den Hauptcode einzubinden, um auf dessen Funktionen zugreifen zu koennen.
Aber generell habe ich echte Schwierigkeiten, mit dem Einbinden von Modulen. Irgendwie blicke ich das nicht so ganz, wann man wie und was einbinden muss. Ich habe nun verschiedene Tutorials und die Python-Doku zum Thema Module mehrfach gelesen und kann das alles beim Lesen auch irgendwie nachvollziehen, aber wenn ich dann die Sachen in meinem Code umsetzen will, klappt das einfach alles nicht.
Ich verstehe einfach nicht wirklich, wann man z.B.
from A import B,
from .A import B,
import B,
form A.B import C usw. anwendet.
Ich bin kurz davor den ganz Mist einfach aufzugeben.
Mir scheint fuer's Programmieren eine Hirnwindung zu fehlen. :K
Gruss,
tholle
Re: input() aus modul im Hauptcode weiterverarbeiten
Verfasst: Samstag 17. Februar 2018, 13:40
von kbr
tholle hat geschrieben:Ich verstehe einfach nicht wirklich, wann man z.B. from A import B, from .A import B, import B, form A.B import C usw. anwendet.
Ich bin kurz davor den ganz Mist einfach aufzugeben.
Mir scheint fuer's Programmieren eine Hirnwindung zu fehlen.
Die verschiedenen import statements machen alle das gleiche: sie binden ein Modul als Namensraum ein. Sie unterscheiden sich aber darin, wie das Modul gefunden wird und wie es später als Namensraum erreichbar ist.
Falls Du der Ansicht bist, dass Programmieren nicht Dein Ding ist, dann gebe ruhig mit gutem Gewissen auf. Das ist kein Manko, sondern geht vielen Menschen so. Deren Stärken liegen dann oft in Bereichen, die andere weniger gut können.
Re: input() aus modul im Hauptcode weiterverarbeiten
Verfasst: Samstag 17. Februar 2018, 14:07
von tholle
Aufgeben ist dann doch irgendwie uncool.
Ich habe mittlerweile herausgefunden, was mir bei dem Thema import Schwierigkeiten gemacht hat.
Was import genau tut, war mir schon irgendwie klar, nur eben nicht, welche Art der Importmoeglichkeiten man wie/wann einsetzt.
Entscheidend ist, von wo aus man das Modul/Paket sucht (ich glaube, das ist, was du meinst mit "... wie das Modul gefunden wird..."). Oder mit anderen Worten, ob das Programm, in welchem die Module eingebunden werden sollen, im Ordner wie die Module liegt, oder eine Ebene hoeher. Und ob man aus einem Modul eine selektive Funktion, bzw. Methode importieren will, oder das ganze Modul, inklusive all seiner Funktionen/Methoden, Classen, Attribute, etc.
Wenn das erst einmal klar ist, dann geht's auch weiter.
thx und Gruss,
tholle
Re: input() aus modul im Hauptcode weiterverarbeiten
Verfasst: Sonntag 18. Februar 2018, 09:02
von Tholo
@Tholle
Ich war auch immer der Ansicht, dass das Coden oberhalb mein Verständnisses ist.
Schau mal auf
https://www.udemy.com (warten bis die bei Anboten zwischen 10-15$ Kosten)und Youtube dort gibt es Python Webinare in Deutsch.
Das hat mir geholfen.
Klar benötigt man für "Kleinigkeiten" wie das Importieren von Modulen manchmal Stunden, was andere in paar Minuten machen.
Aber das ist halt so.
Mein erstes Projekt hat mittlerweile 100 Zeilen Code (in verschiedenen) und wenn du eine Funktion gangbar gemacht hast, dann freut man sich darüber.
Ich würde dir auch Pycharm als IDE empfehlen. Da die Textvervollständigung viele die Fehler nicht zulässt und man ein evtl. argen gleich erkennt.
Re: input() aus modul im Hauptcode weiterverarbeiten
Verfasst: Sonntag 18. Februar 2018, 09:39
von tholle
Hi Tholo,
danke fuer's Mutmachen.
Auf udemy.com habe ich mir Anfang Januar den Kurs von Jannis Seeman (Python Bootcamp) gekauft. Finde ich an sich auch ganz gut, nur geht er genau bei dem Thema Module/Pakete etwas schnell drueber. Ich habe aber den kompletten Kurs noch nicht durch.
Als IDE nutze ich iPyhton3. Zumindest, wenn ich mal etwas Code ausprobieren will. Zum eigentlichen Coden nutze ich VIM mit dem YCM-Plugin (YouCompleteMe). Macht im Grunde das Selbe wie Pycharm.
Vim nutze ich, weil ich remote programmiere. Heisst, ich entwickle auf einem entfernten Rechner, nicht lokal.
Viele Gruesse,
tholle