[Python] self, generatori e liste.

Andrea D'Amore and.damore a gmail.com
Ven 19 Gen 2018 22:42:23 CET


2018-01-18 16:43 GMT+01:00 Federico Cerchiari <federicocerchiari a gmail.com>:
> Ciao Luca,
> non ho controllato, ma "a naso" direi che un generatore, anche se definito
> in line è un oggetto function, e come tale ha il suo namespace chiuso che
> non può accedere all'esterno.

Mi sembra forzata come spiegazione, per il generatore self è un
oggetto dell'argomento come gli altri, no?

L'esempio che segue funziona, anche su py2 come l'OP usa. Si dovrebbe
vedere il codice che ha dato l'errore inizialmente per capire il
problema.

    class Schedule(object):
      weeks = {
          3: 'three',
          9: 'nine',
          1: 'one',
          }

      def original_sorting(self):
        for o in (self.weeks[s] for s in sorted(self.weeks)):
          print(o)

    Schedule().original_sorting()

produce:

    $ ipython test.py
    one
    three
    nine


Ma quell'accesso al valore nel generatore mi sembra un po' intricato, io userei:

      def simpler_sorting(self):
        for k, v in sorted(self.weeks.iteritems()):
          print(v)

che si legge più semplicemente.


-- 
Andrea


Maggiori informazioni sulla lista Python