Wertübernahme aus Liste direkt in Funktionsaufruf möglich?

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
harryberlin
User
Beiträge: 227
Registriert: Donnerstag 17. Dezember 2015, 12:17

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]
empty Sig
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:

Code: Alles auswählen

spam(arg) = parrot
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.
harryberlin
User
Beiträge: 227
Registriert: Donnerstag 17. Dezember 2015, 12:17

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)
empty Sig
Antworten