Seite 1 von 1
Wertübernahme aus Liste direkt in Funktionsaufruf möglich?
Verfasst: Sonntag 28. August 2016, 08:31
von harryberlin
Guten Morgen
Ist es möglich werte aus Listen direkt an eine Funktion zu übergeben?
Ich habe folgenden Code:
Code: Alles auswählen
# Text, Visible, Enable
MAINLABEL = {0: ['ON-BOARD', True, True], 1: ['ON-BOARD', True, True], 2: ['GAUGES', True, True]}
obc_screen = 0 # or 1 or 2
mainlabel = xbmcgui.Window(1150).getControl(200)
text, visible, enable = MAINLABEL[obc_screen]
mainlabel.setLabel(text)
mainlabel.setVisible(visible)
mainlabel.setEnabled(enable)
kann man das irgendwie so direkt aufrufen?
so in etwa stelle ich mir das vor:
Code: Alles auswählen
mainlabel.setLabel(text), mainlabel.setVisible(visible), mainlabel.setEnabled(enable) = MAINLABEL[obc_screen]
Re: Wertübernahme aus Liste direkt in Funktionsaufruf möglich?
Verfasst: Sonntag 28. August 2016, 09:19
von BlackJack
@harryberlin: Nein das geht nicht. Das wäre letztendlich ja auch nicht eindeutig, denn woher sollte Python wissen welcher der Namen in einem Ausdruck durch den Wert auf der rechten Seite der Zuweisung ersetzt werden soll. Damit das funktioniert was Du Dir das vorstellst, müsste ja auch der einfache Fall funktionieren, also:
Was sollte das nun bedeuten? Das `spam` durch den Wert von `parrot` ersetzt wird oder das `arg` ersetzt wird? Was ist bei:
Code: Alles auswählen
spam(arg, another_one) = parrot
spam(frobnicate(arg, another_one)) = parrot
spam(frobnicate(arg, another_one)) = parrot
spam(arg, frobnicate(another_one)) = parrot
spam(frobnicate(arg), another_one) = parrot
spam(arg)(another_one) = parrot
spam(arg).frobnicate(another_one) = parrot
Wie sollte da eine allgmeine, leicht nachvollziehbare, *und* sinnvolle Regel aussehen, nach der Python einen Namen auf der linken Seite der Zuweisung durch den Wert von `parrot` ersetzt?
Ein Wörterbuch das von 0 an fortlaufende ganz Zahlen auf Werte abbildet ist übrigens eher eine Liste.
Re: Wertübernahme aus Liste direkt in Funktionsaufruf möglich?
Verfasst: Sonntag 28. August 2016, 20:29
von harryberlin
Du hast recht, das dictionary ist tatsächlich eine Liste.
Habe mir nun eine kleine Helperfunktion gebaut.
Da der Platzhalter für das control nun auf -1 liegt, ist es so jetzt sinnvoller dict zu nutzen?
Den Platzhalter könnte ich ja eigentlich auch weglassen.
Code: Alles auswählen
def set_control(control, obc_screen):
control[-1].setLabel(control[obc_screen][0])
control[-1].setVisible(control[obc_screen][1])
control[-1].setEnabled(control[obc_screen][2])
# Control, Text, Visible, Enable
MAINLABEL = {-1: None, 0: ['ON-BOARD', True, True], 1: ['ON-BOARD', True, True], 2: ['GAUGES', True, True]}
obc_screen = 0 # or 1 or 2
MAINLABEL[-1] = xbmcgui.Window(1150).getControl(200)
set_control(MAINLABEL, obc_screen)