Hallo,
ich habe folgendes Problem. Ich Möchte eine Liste erstellen die aus den output verschiedener Funktionen besteht. Am Ende Möchte ich eine Liste haben die folgender Maßen aussieht.
lc=['forward','rearward']
Ich habe nicht wirklich viel Erfahrung mit python und hoffe daher auf hiile hier aus dem Forum.
def directions(): # diese Funktion wird ausgeführt, wenn ein Toolbutton aktiviert wird
lc=[]
lc.append(direc_forw,direc_rearw)
def AddForward(Cbox_forward,a,b) #diese Funktion wird ausgeführt wenn eine Checkbox aktiviert wird
direc_forw=[]
if guitk.BCCheckBoxIsChecked(CBox_forward): #das ist ein Software spezifischer Befehl und sagt das wenn eine CheckBox aktiviert ist, direc_forw=[]
durch direc_forw=['forward' ersetz werden soll und auch aus diese Funktion ausgegeben werden soll(darum der return)
direc_forw=['forward']
return direc_forw
else:
return direc_forw
def AddRearward(CBox_rearward,a,b):
direc_rearw=[]
if guitk.BCCheckBoxIsChecked(CBox_rearward):
direc_rearw=['rearward']
return direc_rearw
else:
return direc_rearw
So ich hoffe das ist ausreichend erklärt und hoffe, dass ich schnell ein paar Antworten erhalte.
Grüße
Funktionen mit einander verknüpfen
- __blackjack__
- User
- Beiträge: 14053
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@micha_le: Das ist so nicht lesbar und auch wenn man das aus dem Quelltext des Beitrags kopiert müsste man sich die Arbeit machen den BBCode den Du in den Quelltext geschrieben hast da wieder raus zu operieren.
Im vollständigen Beitragseditor gibt es eine Schaltfläche (</>) um Code-Tags einzufügen, damit Quelltext lesbar und mit Einrückungen im Beitrag steht.
Im vollständigen Beitragseditor gibt es eine Schaltfläche (</>) um Code-Tags einzufügen, damit Quelltext lesbar und mit Einrückungen im Beitrag steht.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
ah ok ich sehe was du meinst.. ok mein erster Beitrag schon mal in die Hose gegangen war wohl zu spät...
Ich bin mir auch nicht sicher, ob dieses der richtige Weg ist. Für weitere Anregungen und/oder Lösungswege bin ich natürlich offen und dankbar.
Ziel:
Ich Möchte eine Liste erstellen die aus den output verschiedener Funktionen besteht. Am Ende Möchte ich eine Liste haben die folgender Maßen aussieht.
lc=['forward','rearward']
Ich bin mir auch nicht sicher, ob dieses der richtige Weg ist. Für weitere Anregungen und/oder Lösungswege bin ich natürlich offen und dankbar.
Ziel:
Ich Möchte eine Liste erstellen die aus den output verschiedener Funktionen besteht. Am Ende Möchte ich eine Liste haben die folgender Maßen aussieht.
lc=['forward','rearward']
Code: Alles auswählen
[/def RUNfunction():
lc=[]
lc.append(direc_forw,direc_rearw)
def AddForward(CBox_forward,data,a): #diese Funktion wird ausgeführt wenn eine Checkbox aktiviert wird
direc_forw=[]
if guitk.BCCheckBoxIsChecked(CBox_forward): #das ist ein Software spezifischer Befehl und sagt das wenn eine CheckBox aktiviert ist, direc_forw=[] durch direc_forw=['forward' ersetz werden soll und auch aus diese Funktion ausgegeben werden soll(darum der return)
direc_forw=['forward']
return direc_forw
else:
return direc_forw
def AddRearward(CBox_rearward,data,a):
direc_rearw=[]
if guitk.BCCheckBoxIsChecked(CBox_rearward):
direc_rearw=['rearward']
return direc_rearw
else:
return direc_rearwcode]
- __blackjack__
- User
- Beiträge: 14053
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@micha_le: Der Code macht nicht so wirklich Sinn und ich verstehe auch nicht so wirklich was da am Ende passieren soll.
Namen werden in Python klein_mit_unterstrichen geschrieben. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (MixedCase).
In `RUNfunction()` wird `lc` (schlechter Name) an eine leere Liste gebunden und in der nächsten Zeile wird `append()` mit zwei Argumenten aufgerufen. `append()` erwartet aber nur *ein* Argument. Und es macht nicht so wirklich Sinn das überhaupt zu verwenden wenn man den oder die Werte in einer Zeile davor ganz einfach beim erstellen der Liste in das Listenliteral hätte schreiben können. Aaaaber, beide Namen von den Argumenten vom `append()`-Aufruf sind auch gar nicht definiert.
Und danach wird mit der Liste auch gar nichts mehr gemacht.
Weder `data` noch `a` werden bei den beiden anderen Funktionen verwendet, warum werden die dann übergeben? `a` ist kein guter Name, weil der dem Leser nichts darüber sagt, was dieser Wert bedeutet. Namen sollten keine kryptischen Abkürzungen enthalten. Wenn man `checkbox` meint, sollte man nicht nur `cbox` schreiben. Bei `direc_forw` rate ich jetzt mal `forward_direction` (wir sind ja auch nicht Yoda), aber man sollte da halt gar nicht erst raten müssen.
Erst eine leere Liste an einen Namen zu binden und die gegebenfalls durch eine Liste mit einem Element zu ersetzen, um zu entscheiden ob eine leere Liste oder eine mit diesem einen Element zurückgegeben werden soll ist ziemlich umständlich. Man könnte da einfach gleich den passenden Wert bei den ``return``-Anweisungen angeben, ohne den vorher an einen lokalen Namen zu binden.
Und das lässt sich dann mit einem bedingten Ausdruck in einer Zeile ausdrücken:
Die letzte Funktion ist im Grunde gleich aufgebaut, die unterscheidet sich nur durch die Zeichenkette. Man kann also *eine* Funktion schreiben aus der man dann die beiden anderen mittels `functools.partial()` erstellt:
Das `add_` in den Funktionsnamen ist komisch/falsch, weil die Funktionen nichts hinzufügen.
Namen werden in Python klein_mit_unterstrichen geschrieben. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (MixedCase).
In `RUNfunction()` wird `lc` (schlechter Name) an eine leere Liste gebunden und in der nächsten Zeile wird `append()` mit zwei Argumenten aufgerufen. `append()` erwartet aber nur *ein* Argument. Und es macht nicht so wirklich Sinn das überhaupt zu verwenden wenn man den oder die Werte in einer Zeile davor ganz einfach beim erstellen der Liste in das Listenliteral hätte schreiben können. Aaaaber, beide Namen von den Argumenten vom `append()`-Aufruf sind auch gar nicht definiert.
Und danach wird mit der Liste auch gar nichts mehr gemacht.
Weder `data` noch `a` werden bei den beiden anderen Funktionen verwendet, warum werden die dann übergeben? `a` ist kein guter Name, weil der dem Leser nichts darüber sagt, was dieser Wert bedeutet. Namen sollten keine kryptischen Abkürzungen enthalten. Wenn man `checkbox` meint, sollte man nicht nur `cbox` schreiben. Bei `direc_forw` rate ich jetzt mal `forward_direction` (wir sind ja auch nicht Yoda), aber man sollte da halt gar nicht erst raten müssen.
Erst eine leere Liste an einen Namen zu binden und die gegebenfalls durch eine Liste mit einem Element zu ersetzen, um zu entscheiden ob eine leere Liste oder eine mit diesem einen Element zurückgegeben werden soll ist ziemlich umständlich. Man könnte da einfach gleich den passenden Wert bei den ``return``-Anweisungen angeben, ohne den vorher an einen lokalen Namen zu binden.
Code: Alles auswählen
def add_forward(checkbox, _data, _a):
direc_forw = []
if guitk.BCCheckBoxIsChecked(checkbox):
direc_forw = ['forward']
return direc_forw
else:
return direc_forw
# <=>
def add_forward(checkbox, _data, _a):
if guitk.BCCheckBoxIsChecked(checkbox):
return ["forward"]
else:
return []
Code: Alles auswählen
def add_forward(checkbox, _data, _a):
return ["forward"] if guitk.BCCheckBoxIsChecked(checkbox) else []
Code: Alles auswählen
from functools import partial
...
def run_function():
pass
def _add(result, checkbox, _data, _a):
return [result] if guitk.BCCheckBoxIsChecked(checkbox) else []
add_forward = partial(_add, "forward")
add_rearward = partial(_add, "rearward")
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Hmm ok.
Also am Ende soll halt eine Liste erzeugt werden.
Diese wird dann in einem anderen Script angezogen und weiter verarbeitet.
Diese Liste gibt quasi vor was ausgewertet werden soll, welche Richtung. Das will ich mit einer Oberfläche steuern(Checkboxen) jede Richtung bekommt eine Box.
Wenn die Box aktiviert ist wird ein Kenner (forward) in die Liste geschrieben, die dann als input für das eigentliche Auswertescript herangezogen werden soll. Gestarten wird es dann mit einem Button(das wird die runfunction)
Ich habe ja gesagt , dass ich absolut kein Profi bin und für jede Hilfe dankbar.
Mit der Formatierung (Groß-, Kleinschreibung) hast recht... In der Software in der ich das schreibe sind diese Befehle halt so.
Auch mit append() das weis ich natürlich, dass da dann nur ein Argument rein darf... Ich wollte abkürzen.. Ich merke jetzt das ich dir da einwenig die Zeit gestohlen habe. Ich versuche es besser zu machen.
Tja und das mit dem data und a da bin ich selber noch nicht so richtig durch gestiegen..
Also ich glaube das sind Argumente von der Oberfläche..
Die kann man bennen wie man will.
Z.B. In der add_forward Funktion da sind die ja und ich weiß nicht wozu man die benötigt. Nur wenn man sie weglässt bekomme ich einen Fehler. Den kann ich morgen mal schicken.
Ich glaube das das mit der Software in der ich das programmiere so sein muss. Das ist halt alles so ein hybrid aus python und Systemfunktionen. Das macht es für einen Anfänger nicht grade leichter.
Aber schon mal vielen Dank für die Hilfe. Probiere ich morgen mal aus.
Also am Ende soll halt eine Liste erzeugt werden.
Diese wird dann in einem anderen Script angezogen und weiter verarbeitet.
Diese Liste gibt quasi vor was ausgewertet werden soll, welche Richtung. Das will ich mit einer Oberfläche steuern(Checkboxen) jede Richtung bekommt eine Box.
Wenn die Box aktiviert ist wird ein Kenner (forward) in die Liste geschrieben, die dann als input für das eigentliche Auswertescript herangezogen werden soll. Gestarten wird es dann mit einem Button(das wird die runfunction)
Ich habe ja gesagt , dass ich absolut kein Profi bin und für jede Hilfe dankbar.
Mit der Formatierung (Groß-, Kleinschreibung) hast recht... In der Software in der ich das schreibe sind diese Befehle halt so.
Auch mit append() das weis ich natürlich, dass da dann nur ein Argument rein darf... Ich wollte abkürzen.. Ich merke jetzt das ich dir da einwenig die Zeit gestohlen habe. Ich versuche es besser zu machen.
Tja und das mit dem data und a da bin ich selber noch nicht so richtig durch gestiegen..
Also ich glaube das sind Argumente von der Oberfläche..
Die kann man bennen wie man will.
Z.B. In der add_forward Funktion da sind die ja und ich weiß nicht wozu man die benötigt. Nur wenn man sie weglässt bekomme ich einen Fehler. Den kann ich morgen mal schicken.
Ich glaube das das mit der Software in der ich das programmiere so sein muss. Das ist halt alles so ein hybrid aus python und Systemfunktionen. Das macht es für einen Anfänger nicht grade leichter.
Aber schon mal vielen Dank für die Hilfe. Probiere ich morgen mal aus.