Ankündigung

Einklappen
Keine Ankündigung bisher.

- √ - Unterschiedliches Verhalten: Items einer List hinzufügen mit += und append

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    - √ - Unterschiedliches Verhalten: Items einer List hinzufügen mit += und append

    Hi!

    In einem Plugin greife ich auf die "watch_item" Ausdrücke zu um über alle Items zu iterieren und bestimmte Items in eine eigene "List zu packen":

    Code:
        logic.dim_items = []
        for item_expression in logic.watch_item:
            for item in sh.match_items(item_expression):
                # EAFP - just try to access 'nacht_helligkeitswert'
                try:
                    dim_item = item.return_parent()
                    logger.info('{}: dim_item = {} with dim-value = {}'.format(logic.name, dim_item, item.conf['nacht_helligkeitswert']))
                    #logic.dim_items += dim_item #fügt auch alle Children hinzu!?
                    logic.dim_items.append(dim_item)
                except:
                    pass
    Nun habe ich unerwarteter Weise bei "+=" ein anderes Verhalten als bei "append": Bei "+=" werden der Liste alle "Children" des Items hinzugefügt! Bei "append" wird nur das durch "return_parent" (und auch ausgegebene Item!) hinzugefügt ( = erwartetes Verhalten).

    Steh ich auf dem Schlauch oder wurde das "+=" irgendwie unschön überladen?

    Grüße
    Robert

    #2
    Hi Robert,

    die Reihenfolge in normalen Py-Listen ist leider nicht fest.
    Die kann sich ändern, das hängt auch von den Operationen ab.

    Und append ist nicht +=.

    Bis bald

    Marcus

    P.S. ich hab daran nichts verändert

    Kommentar


      #3
      Zitat von mknx Beitrag anzeigen
      Hi Robert,

      die Reihenfolge in normalen Py-Listen ist leider nicht fest.
      Die kann sich ändern, das hängt auch von den Operationen ab.
      Ne, das wäre auch von mir erwartet und auch kein Problem.

      Zitat von mknx Beitrag anzeigen
      Und append ist nicht +=.
      Mhhhm, ja. 8-) - ich hätte wohl eher += [dim_item] nehmen sollen - "+=" konkateniert halt Listen. Mir ist dann auf die Füße gefallen, dass Python (oder doch DU!?) in Eurer Weisheit versuchen mir zu Liebe aus EINEM Item eine Liste zu machen - indem die Children reingepackt werden (item.py, wahrscheinlich "def __iter__(self)".

      Viele Grüße
      Robert

      Kommentar


        #4
        Hallo Robert,

        Zitat von Robert Beitrag anzeigen
        Mir ist dann auf die Füße gefallen, dass Python (oder doch DU!?) in Eurer Weisheit versuchen mir zu Liebe aus EINEM Item eine Liste zu machen - indem die Children reingepackt werden (item.py, wahrscheinlich "def __iter__(self)".
        ich versteht zwar nicht was Du mit Eurer Weisheit meinst, aber das Item passt sich dem Kontext an. Wenn Du es als Liste behandelst verhält es sich als Liste.

        Davon abgesehen ist ein MeineListe.append(item) vorzuziehen, da es schneller sein müsste.

        Bis bald

        Marcus

        Kommentar


          #5
          Zitat von mknx Beitrag anzeigen
          ich versteht zwar nicht was Du mit Eurer Weisheit meinst, aber das Item passt sich dem Kontext an. Wenn Du es als Liste behandelst verhält es sich als Liste.
          Um eine mögliche Irritation auszuschließen:
          - "Eure Weisheit" = genau was danach steht, also in weiser Vorraussicht handelnd -> positiv gemeint
          - "Eure grenzenlose Weisheit" - wäre ironisch gemeint gewesen.

          Also alles gut gemeint.

          Das append schneller ist hatte ich dann auch gelesen - war als Wandler zwischen C#, C und Python nur an "+=" gewohnt und über das Verhalten mit der impliziten semantikbedingten Listenbildung überrascht.

          Grüße
          Robert

          Kommentar

          Lädt...
          X