Mostra notizie nelle discussioni
  • Avatar
    ☺
    Scritto da
    il 2017-06-22 12:28:12.0 alle 2017-06-22 12:28:12.0
    Trollate totali: 6369
    python memory bindings and scopes
    also, come va? che dite?


    ad ogni modo, ho una questione di informatica che mi cruccia, sto perdendo un po di tempo per rilassarmi ergo python.



    diciamo che io abbia questo codice:
    def f(x):
        x = x+1
        print("il valore di x nella funzione f(x) e:", x)
        return x
    
    x = 5
    z = f(x)
    print(x)
    print(z)


    il risultato di questa corsa e':
    ('il valore di x nella funzione f(x) e:', 6)
    5
    6
    


    se invece io lo modifico cosi:

    def f(x):
        x = x+1
        print("il valore di x nella funzione f(x) e:", x)
        return x
    
    x = 5
    x = f(x)
    print(x)
    print(x)


    alla fine della corsa dice:
    ('il valore di x nella funzione f(x) e:', 6)
    6
    6
    


    se provo a seguire i memory binding passo passo mi sorgono delle questioni, seguendoli in ordine:

    1) definizione della funzione f(x) <- cosa succede ai memory binding?
    2) binding di x=5
    3) binding di x=f(x) <- e' qua il cambio di scope? questo non puo essere un binding dato il comportamento del programma, o sbaglio?
    4) cambio di scope
    5) esecuzione di x = x+1

    come cazzo a fatto a farlo prendendo il primo binding di x=5 se io gli ho fatto rifafre il binding come x=f(x)? x=5 a quel punto non dovrebbe essere diventato cibo per il garbage collector? evidentemente no, o si? e come mai nel primo caso nonostate io abbia alla fine della funzione un return x il valore di x printato e' 5 invece di 6, il print(x) in quel caso e' stato fatto dopo il return della funzione dove x e' stato incrementato, la variabile z si e' occupata di chiamare la funzione, cosa e' successo.


    sono consufo, fa caldo.
    Please consider the environment before printing this message, 50% of the above is useless!
    • Avatar
      Scritto da
      Non Autenticato
      il 2017-06-22 12:41:27.0 alle 2017-06-22 12:41:27.0
      Re: python memory bindings and scopes
      Ciao dada, se un gatto - uno a caso - volesse studiare ingegneria genetica per capirne qualcosa, dove e come dovrebbe iniziare?

      Un testo universitario di biologia generale.
      Un testo universitario di genetica generale.

      Già qui occorrono i testi giusti che non faciano perdere tempo.

      E poi?
      • Avatar
        ☺
        Scritto da
        il 2017-06-22 13:18:31.0 alle 2017-06-22 13:18:31.0
        Trollate totali: 6369
        Re: python memory bindings and scopes
        Scritto da:
        > Ciao dada, se un gatto - uno a caso - volesse studiare ingegneria genetica per capirne qualcosa, dove e come dovrebbe iniziare?
        >
        > Un testo universitario di biologia generale.
        > Un testo universitario di genetica generale.
        >
        > Già qui occorrono i testi giusti che non faciano perdere tempo.
        >
        > E poi?

        e' un po strano l'orientamento riguardo ai testi, il primo problema e' la velocita' a cui stanno cambiando le cose nell'ambiente, anche a livello basilare.

        nature ha risolto il problema cosi' e questo testo lo usano davvero nelle universita'

        http://www.nature.com/nature_education/interactive...
        non lo ho comprato ma mi piacerebbe farlo.

        ad ogni modo la biologia e' vasta, i professori stessi ti riempiono di dispense prese da testi diversi e li usano principalmente per le immagini. per assurdo i libri di testo delle superiori, se abbastanza recenti, ti forniscono gia' una bella serie di immagini ed diagrammi che ti assicuro sono tutt'altro che semplici, in italiano i vari campbell edition sono quelli che usano dalle superiori alla prima reintroduzione alla biologia all'universita', come introduzione generale vanno benissimo se approfondisci con qualche risorsa internet.

        dopodiche' cmq mi sembra di capire che questo yoda qualunque, pardon, gatto qualunque, voglia conoscere la scorciatotia per capire qualcosa di genetica, ecco quella non sta sui libri di biologia ma passa da almeno due libri di testo interi, scegline uno a caso da qualche libreria universitaria che sia almeno degli anni 2010 e li intorno riguardo a:

        Citologia ed istologia

        poi

        chimica organica

        e subito dopo puoi gettarti sulla genetia vera e propria, ovvero

        biologia molecolare

        genetica

        di tutte queste parole chiave trovi libri di testo interi dedicati all'argomento, welcome aboard.

        Please consider the environment before printing this message, 50% of the above is useless!
        • Avatar
          Scritto da
          Non Autenticato
          il 2017-06-23 00:02:42.0 alle 2017-06-23 00:02:42.0
          Re: python memory bindings and scopes
          Scritto da: dada216
          > Scritto da:
          > > Ciao dada, se un gatto - uno a caso - volesse studiare ingegneria genetica per capirne qualcosa, dove e come dovrebbe iniziare?
          > >
          > > Un testo universitario di biologia generale.
          > > Un testo universitario di genetica generale.
          > >
          > > Già qui occorrono i testi giusti che non faciano perdere tempo.
          > >
          > > E poi?
          >
          > e' un po strano l'orientamento riguardo ai testi, il primo problema e' la velocita' a cui stanno cambiando le cose nell'ambiente, anche a livello basilare.
          >
          > nature ha risolto il problema cosi' e questo testo lo usano davvero nelle universita'
          >
          > http://www.nature.com/nature_education/interactive...
          > non lo ho comprato ma mi piacerebbe farlo.
          >
          > ad ogni modo la biologia e' vasta, i professori stessi ti riempiono di dispense prese da testi diversi e li usano principalmente per le immagini. per assurdo i libri di testo delle superiori, se abbastanza recenti, ti forniscono gia' una bella serie di immagini ed diagrammi che ti assicuro sono tutt'altro che semplici, in italiano i vari campbell edition sono quelli che usano dalle superiori alla prima reintroduzione alla biologia all'universita', come introduzione generale vanno benissimo se approfondisci con qualche risorsa internet.
          >
          > dopodiche' cmq mi sembra di capire che questo yoda qualunque, pardon, gatto qualunque, voglia conoscere la scorciatotia per capire qualcosa di genetica, ecco quella non sta sui libri di biologia ma passa da almeno due libri di testo interi, scegline uno a caso da qualche libreria universitaria che sia almeno degli anni 2010 e li intorno riguardo a:
          >
          > Citologia ed istologia
          >
          > poi
          >
          > chimica organica
          >
          > e subito dopo puoi gettarti sulla genetia vera e propria, ovvero
          >
          > biologia molecolare
          >
          > genetica
          >
          > di tutte queste parole chiave trovi libri di testo interi dedicati all'argomento, welcome aboard.

          Ma io vorrei una scorciatoia, spendere poco, e del cioccolato.

          La cosa che mi disturba è che a seconda di come hai il cervello certi libri fanno per te e altri no, e non puoi saperlo prima di averli letti.
        • Avatar
          Scritto da
          Non Autenticato
          il 2017-06-30 17:03:12.0 alle 2017-06-30 17:03:12.0
          Re: python memory bindings and scopes
          Scritto da: dada216
          > Scritto da:
          > > Ciao dada, se un gatto - uno a caso - volesse studiare ingegneria genetica per capirne qualcosa, dove e come dovrebbe iniziare?
          > >
          > > Un testo universitario di biologia generale.
          > > Un testo universitario di genetica generale.
          > >
          > > Già qui occorrono i testi giusti che non faciano perdere tempo.
          > >
          > > E poi?
          >
          > e' un po strano l'orientamento riguardo ai testi, il primo problema e' la velocita' a cui stanno cambiando le cose nell'ambiente, anche a livello basilare.
          >
          > nature ha risolto il problema cosi' e questo testo lo usano davvero nelle universita'
          >
          > http://www.nature.com/nature_education/interactive...
          > non lo ho comprato ma mi piacerebbe farlo.
          >
          > ad ogni modo la biologia e' vasta, i professori stessi ti riempiono di dispense prese da testi diversi e li usano principalmente per le immagini. per assurdo i libri di testo delle superiori, se abbastanza recenti, ti forniscono gia' una bella serie di immagini ed diagrammi che ti assicuro sono tutt'altro che semplici, in italiano i vari campbell edition sono quelli che usano dalle superiori alla prima reintroduzione alla biologia all'universita', come introduzione generale vanno benissimo se approfondisci con qualche risorsa internet.
          >
          > dopodiche' cmq mi sembra di capire che questo yoda qualunque, pardon, gatto qualunque, voglia conoscere la scorciatotia per capire qualcosa di genetica, ecco quella non sta sui libri di biologia ma passa da almeno due libri di testo interi, scegline uno a caso da qualche libreria universitaria che sia almeno degli anni 2010 e li intorno riguardo a:
          >
          > Citologia ed istologia
          >
          > poi
          >
          > chimica organica
          >
          > e subito dopo puoi gettarti sulla genetia vera e propria, ovvero
          >
          > biologia molecolare
          >
          > genetica
          >
          > di tutte queste parole chiave trovi libri di testo interi dedicati all'argomento, welcome aboard.

          Perché anche citologia e istologia?

          Se uno dei miei scopi fosse clonare un essere vivente da cellule non più vitali (es. una foglia secca, un pezzo di legno) ci sono testi specifici? È attualmente possibile?
          • Avatar
            ☺
            Scritto da
            il 2017-06-30 18:06:32.0 alle 2017-06-30 18:06:32.0
            Trollate totali: 6369
            Re: python memory bindings and scopes
            Scritto da:
            > Scritto da: dada216
            > > Scritto da:
            > > > Ciao dada, se un gatto - uno a caso - volesse studiare ingegneria genetica per capirne qualcosa, dove e come dovrebbe iniziare?
            > > >
            > > > Un testo universitario di biologia generale.
            > > > Un testo universitario di genetica generale.
            > > >
            > > > Già qui occorrono i testi giusti che non faciano perdere tempo.
            > > >
            > > > E poi?
            > >
            > > e' un po strano l'orientamento riguardo ai testi, il primo problema e' la velocita' a cui stanno cambiando le cose nell'ambiente, anche a livello basilare.
            > >
            > > nature ha risolto il problema cosi' e questo testo lo usano davvero nelle universita'
            > >
            > > http://www.nature.com/nature_education/interactive...
            > > non lo ho comprato ma mi piacerebbe farlo.
            > >
            > > ad ogni modo la biologia e' vasta, i professori stessi ti riempiono di dispense prese da testi diversi e li usano principalmente per le immagini. per assurdo i libri di testo delle superiori, se abbastanza recenti, ti forniscono gia' una bella serie di immagini ed diagrammi che ti assicuro sono tutt'altro che semplici, in italiano i vari campbell edition sono quelli che usano dalle superiori alla prima reintroduzione alla biologia all'universita', come introduzione generale vanno benissimo se approfondisci con qualche risorsa internet.
            > >
            > > dopodiche' cmq mi sembra di capire che questo yoda qualunque, pardon, gatto qualunque, voglia conoscere la scorciatotia per capire qualcosa di genetica, ecco quella non sta sui libri di biologia ma passa da almeno due libri di testo interi, scegline uno a caso da qualche libreria universitaria che sia almeno degli anni 2010 e li intorno riguardo a:
            > >
            > > Citologia ed istologia
            > >
            > > poi
            > >
            > > chimica organica
            > >
            > > e subito dopo puoi gettarti sulla genetia vera e propria, ovvero
            > >
            > > biologia molecolare
            > >
            > > genetica
            > >
            > > di tutte queste parole chiave trovi libri di testo interi dedicati all'argomento, welcome aboard.
            >
            > Perché anche citologia e istologia?

            perche' se vuoi capire come funziona tutto il meccanismo del dna devi capire come funziona una cellula, poi chimica organica e poi biologia molecolare.

            >
            > Se uno dei miei scopi
            >fosse clonare un essere vivente da cellule non più vitali (es. una foglia secca, un pezzo di legno) ci sono testi specifici? È attualmente possibile?

            ci stanno provando in molti, probabilmente e' fattibile date alcune condizioni, ad esempio i tizi che vogliono riportare in vita i mammuth probabilmente ce la farebbero e li prendono tutti molto sul serio al riguardo, al punto che si sta gia discutendo della morale della cosa dando per scontato che con un po di soldi (stiamo comunque parlando di laboratori, strututre e costi da mln di euro) ce la si farebbe.

            tu a casa oggi puoi gia' fare un sacco di cose cmq, ad esempo estrarre del dna se lo desideri, con un paio di step in piu' (dovrebbe essere fattibile farlo a casa con al massimo dei kit) potresti isolarne delle parti e farle replicare.

            cmq
            http://learn.genetics.utah.edu/content/labs/extrac...
            Please consider the environment before printing this message, 50% of the above is useless!
            • Avatar
              Scritto da
              Non Autenticato
              il 2017-06-30 19:18:49.0 alle 2017-06-30 19:18:49.0
              Re: python memory bindings and scopes
              Scritto da: dada216
              > Scritto da:
              > > Scritto da: dada216
              > > > Scritto da:
              > > > > Ciao dada, se un gatto - uno a caso - volesse studiare ingegneria genetica per capirne qualcosa, dove e come dovrebbe iniziare?
              > > > >
              > > > > Un testo universitario di biologia generale.
              > > > > Un testo universitario di genetica generale.
              > > > >
              > > > > Già qui occorrono i testi giusti che non faciano perdere tempo.
              > > > >
              > > > > E poi?
              > > >
              > > > e' un po strano l'orientamento riguardo ai testi, il primo problema e' la velocita' a cui stanno cambiando le cose nell'ambiente, anche a livello basilare.
              > > >
              > > > nature ha risolto il problema cosi' e questo testo lo usano davvero nelle universita'
              > > >
              > > > http://www.nature.com/nature_education/interactive...
              > > > non lo ho comprato ma mi piacerebbe farlo.
              > > >
              > > > ad ogni modo la biologia e' vasta, i professori stessi ti riempiono di dispense prese da testi diversi e li usano principalmente per le immagini. per assurdo i libri di testo delle superiori, se abbastanza recenti, ti forniscono gia' una bella serie di immagini ed diagrammi che ti assicuro sono tutt'altro che semplici, in italiano i vari campbell edition sono quelli che usano dalle superiori alla prima reintroduzione alla biologia all'universita', come introduzione generale vanno benissimo se approfondisci con qualche risorsa internet.
              > > >
              > > > dopodiche' cmq mi sembra di capire che questo yoda qualunque, pardon, gatto qualunque, voglia conoscere la scorciatotia per capire qualcosa di genetica, ecco quella non sta sui libri di biologia ma passa da almeno due libri di testo interi, scegline uno a caso da qualche libreria universitaria che sia almeno degli anni 2010 e li intorno riguardo a:
              > > >
              > > > Citologia ed istologia
              > > >
              > > > poi
              > > >
              > > > chimica organica
              > > >
              > > > e subito dopo puoi gettarti sulla genetia vera e propria, ovvero
              > > >
              > > > biologia molecolare
              > > >
              > > > genetica
              > > >
              > > > di tutte queste parole chiave trovi libri di testo interi dedicati all'argomento, welcome aboard.
              > >
              > > Perché anche citologia e istologia?
              >
              > perche' se vuoi capire come funziona tutto il meccanismo del dna devi capire come funziona una cellula, poi chimica organica e poi biologia molecolare.
              >
              > >
              > > Se uno dei miei scopi
              > > fosse clonare un essere vivente da cellule non più vitali (es. una foglia secca, un pezzo di legno) ci sono testi specifici? È attualmente possibile?
              >
              > ci stanno provando in molti, probabilmente e' fattibile date alcune condizioni, ad esempio i tizi che vogliono riportare in vita i mammuth probabilmente ce la farebbero e li prendono tutti molto sul serio al riguardo, al punto che si sta gia discutendo della morale della cosa dando per scontato che con un po di soldi (stiamo comunque parlando di laboratori, strututre e costi da mln di euro) ce la si farebbe.
              >
              > tu a casa oggi puoi gia' fare un sacco di cose cmq, ad esempo estrarre del dna se lo desideri, con un paio di step in piu' (dovrebbe essere fattibile farlo a casa con al massimo dei kit) potresti isolarne delle parti e farle replicare.
              >
              > cmq
              > http://learn.genetics.utah.edu/content/labs/extrac...

              Porc! M'ero dimenticato di Learn Genetics! L'ho messo nell'apposita cartella e l'ho dimenticato.
    • Avatar
      ☺
      Scritto da
      avvelentani
      Cubicolario
      il 2017-06-22 13:24:58.0 alle 2017-06-22 13:24:58.0
      Trollate totali: 18184
      Re: python memory bindings and scopes
      Scritto da: dada216
      > also, come va? che dite?
      >
      >
      > ad ogni modo, ho una questione di informatica che mi cruccia, sto perdendo un po di tempo per rilassarmi ergo python.
      >
      >
      >
      > diciamo che io abbia questo codice:
      >
      > def f(x):
      > x = x+1
      > print("il valore di x nella funzione f(x) e:", x)
      > return x
      > 
      > x = 5
      > z = f(x)
      > print(x)
      > print(z)

      >
      > il risultato di questa corsa e':
      >
      > ('il valore di x nella funzione f(x) e:', 6)
      > 5
      > 6
      > 

      >
      > se invece io lo modifico cosi:
      >
      >
      > def f(x):
      > x = x+1
      > print("il valore di x nella funzione f(x) e:", x)
      > return x
      > 
      > x = 5
      > x = f(x)
      > print(x)
      > print(x)

      >
      > alla fine della corsa dice:
      >
      > ('il valore di x nella funzione f(x) e:', 6)
      > 6
      > 6
      > 


      Sei confuso perche' ci sono due variabili 'x' in questo codice.

      1. La variabile x globale definita alla riga
      x = 5
      


      il cui scope e` globale

      2. La variable x locale alla funziona f definita alla riga
      def f(x):
      


      il cui scope e` limitato all'interno della funzione f.

      >
      > se provo a seguire i memory binding passo passo mi sorgono delle questioni, seguendoli in ordine:
      >
      > 1) definizione della funzione f(x) <- cosa succede ai memory binding?

      Viene creata una variabile chiamata 'f' a cui viene assegnato il codice della funzione

      > 2) binding di x=5

      viene creata una variabile globale x e gli viene assegnato il valore 5

      > 3) binding di x=f(x) <- e' qua il cambio di scope? questo non puo essere un binding dato il comportamento del programma, o sbaglio?

      succedono due cose su questa riga:

      1. viene chiamata la funzione f, per fare questo viene creato un nuovo binding per la variabile x [b]locale alla funzione f[/b] e gli viene assegnato il valore 5, risultato della valutazione della variabile x [b]globale[/b].
      2. il risultato della chiamata ad f viene assegnato alla variabile x [b]globale[/b]

      > 4) cambio di scope

      si` ma lo scope globale resta sempre attivo.

      > 5) esecuzione di x = x+1
      >
      > come cazzo a fatto a farlo prendendo il primo binding di x=5 se io gli ho fatto rifafre il binding come x=f(x)?

      in questo momento esistono due variabili x, la variabile globale e l'argomento di f.

      > x=5 a quel punto non dovrebbe essere diventato cibo per il garbage collector? evidentemente no, o si?

      No perche' lo scope globale continua ad esistere anche durante l'esecuzione di f. Mentre f viene eseguita la x globale non e` "out of scope" ma "shadowed", ovvero inaccessibile perche' coperta dalla variabile x locale ad f. Quando f termina la variabile locale x va out of scope e la variabile globale x smette di essere shadowed.

      I think happiness is love
      - Vladimir Putin
      • Avatar
        ☺
        Scritto da
        il 2017-06-22 14:46:05.0 alle 2017-06-22 14:46:05.0
        Trollate totali: 6369
        Re: python memory bindings and scopes
        Scritto da: avvelentani
        > Scritto da: dada216
        > > also, come va? che dite?
        > >
        > >
        > > ad ogni modo, ho una questione di informatica che mi cruccia, sto perdendo un po di tempo per rilassarmi ergo python.
        > >
        > >
        > >
        > > diciamo che io abbia questo codice:
        > >
        > > def f(x):
        > > x = x+1
        > > print("il valore di x nella funzione f(x) e:", x)
        > > return x
        > > 
        > > x = 5
        > > z = f(x)
        > > print(x)
        > > print(z)

        > >
        > > il risultato di questa corsa e':
        > >
        > > ('il valore di x nella funzione f(x) e:', 6)
        > > 5
        > > 6
        > > 

        > >
        > > se invece io lo modifico cosi:
        > >
        > >
        > > def f(x):
        > > x = x+1
        > > print("il valore di x nella funzione f(x) e:", x)
        > > return x
        > > 
        > > x = 5
        > > x = f(x)
        > > print(x)
        > > print(x)

        > >
        > > alla fine della corsa dice:
        > >
        > > ('il valore di x nella funzione f(x) e:', 6)
        > > 6
        > > 6
        > > 

        >
        > Sei confuso perche' ci sono due variabili 'x' in questo codice.
        >

        esattamente, lo ho provato a fare per capire meglio cosa stava succeddendo ai bindings.

        > 1. La variabile x globale definita alla riga
        >
        > x = 5
        > 

        >
        > il cui scope e` globale
        >
        > 2. La variable x locale alla funziona f definita alla riga
        >
        > def f(x):
        > 

        >
        > il cui scope e` limitato all'interno della funzione f.

        aha, pero' viene in effetti gia' creato un binding al momento del parsing, binding di cosa di preciso?
        lo scope quindi e' indipendente dai binding?

        i binding vengono effettuati sequenzialmente e poi l'esecuzione delle istruzioni all'interno dei vari scope (dipendente dalla posizione ed ordine delle chiamate alle varie funzioni) dipende dal flow del programma? correct?

        >
        > >
        > > se provo a seguire i memory binding passo passo mi sorgono delle questioni, seguendoli in ordine:
        > >
        > > 1) definizione della funzione f(x) <- cosa succede ai memory binding?
        >
        > Viene creata una variabile chiamata 'f' a cui viene assegnato il codice della funzione

        "il codice della funzione", ovvero? stiamo proprio parlando delle istruzioni che ho scritto nell'indentatura? vengono prese e messe in memoria bindate alla variabile f? a questo punto il parametro che io specifico tra parentesi che cosa indica di preciso?

        perche' se io faccio questo piccolo cambiamento e invece che def f(x) scrivo def f(y)

        def f(y):
            x = x+1
            print('il valore di x nella funzione f(y) e:', x)
            return x
        
        x = 5
        x = f(y)
        print(x)
        print(x)


        il risultato e':
        Traceback (most recent call last):
          File "example.py", line 7, in <module>
            x = f(y)
        NameError: name 'y' is not defined
        


        ergo ho pensato di renderlo tutto coerente con l'utilizzo di due variabili con nomi diversi

        def f(y):
            y = x+1
            print('il valore di y nella funzione f(y) e:', y)
            return y
        
        x = 5
        y = f(y)
        print(x)
        print(y)


        il risultato e'
        Traceback (most recent call last):
          File "example.py", line 7, in <module>
            y = f(y)
        NameError: name 'y' is not defined



        quando mi verrebbe invece di pensare che se la sarebbe dovuta cavare ed avrebbe dovuto (nelle mie intenzioni) fare 5 + 1 ed assegnare il valore 6 alla variabile y.
        quindi non ho capito un cazzo riguardo ai parametri delle funzioni ed a cosa sto scrivendo.

        >
        > > 2) binding di x=5
        >
        > viene creata una variabile globale x e gli viene assegnato il valore 5
        >
        > > 3) binding di x=f(x) <- e' qua il cambio di scope? questo non puo essere un binding dato il comportamento del programma, o sbaglio?
        >
        > succedono due cose su questa riga:
        >
        > 1. viene chiamata la funzione f, per fare questo viene creato un nuovo binding per la variabile x [b]locale alla funzione f[/b] e gli viene assegnato il valore 5, risultato della valutazione della variabile x [b]globale[/b].

        se eseguo il codice modificato con y infatti si lamenta del fatto che y non e' stato definito, quindi l'unica ragione per la quale il codice con due variabili con lo stesso nome funziona e' proprio perche' hanno lo stesso nome?

        > 2. il risultato della chiamata ad f viene assegnato alla variabile x [b]globale[/b]
        >
        > > 4) cambio di scope
        >
        > si` ma lo scope globale resta sempre attivo.
        >
        > > 5) esecuzione di x = x+1
        > >
        > > come cazzo a fatto a farlo prendendo il primo binding di x=5 se io gli ho fatto rifafre il binding come x=f(x)?
        >
        > in questo momento esistono due variabili x, la variabile globale e l'argomento di f.
        >
        > > x=5 a quel punto non dovrebbe essere diventato cibo per il garbage collector? evidentemente no, o si?
        >
        > No perche' lo scope globale continua ad esistere anche durante l'esecuzione di f. Mentre f viene eseguita la x globale non e` "out of scope" ma "shadowed", ovvero inaccessibile perche' coperta dalla variabile x locale ad f. Quando f termina la variabile locale x va out of scope e la variabile globale x smette di essere shadowed.

        grande, ho capito perche' x nei print successivi alla chiamata x poteva valere sia 5 sia 6, il valore 5 rimaneva shadowed e riscritto se ad effettuare la chiamata fosse x = f(x) ma non quando ad effettuarla era z = f(x).

        pero' non ho ancora caapito perche' questo non funziona.

        def f(y):
            y = x+1
            print('il valore di x nella funzione f(y) e:', x)
            print('il valore di y nella funzione f(y) e:', y)
            return y
        
        x = 5
        y = f(y)
        print(x)
        print(y)


        -->

        Traceback (most recent call last):
          File "example2.py", line 8, in <module>
            y = f(y)
        NameError: name 'y' is not defined
        
        



        In lacrime

        **Modificato dall'autore il 22.06.2017 14:48**
        Please consider the environment before printing this message, 50% of the above is useless!
        • Avatar
          ☺
          Scritto da
          avvelentani
          Cubicolario
          il 2017-06-22 15:30:44.0 alle 2017-06-22 15:30:44.0
          Trollate totali: 18184
          Re: python memory bindings and scopes
          Scritto da: dada216
          > > 1. La variabile x globale definita alla riga
          > >
          > > x = 5
          > > 

          > >
          > > il cui scope e` globale
          > >
          > > 2. La variable x locale alla funziona f definita alla riga
          > >
          > > def f(x):
          > > 

          > >
          > > il cui scope e` limitato all'interno della funzione f.
          >
          > aha, pero' viene in effetti gia' creato un binding al momento del parsing,

          No. Viene creata una variabile.

          > binding di cosa di preciso?
          > lo scope quindi e' indipendente dai binding?

          Sono concetti collegati, il binding dipende dallo scope. Se tu chiamassi la tua funzione f due volte la variabile x (quella locale a f) avrebbe due binding differenti, uno per chiamata.
          Ogni binding (in python) vive finche' lo scope che definisce la variabile e` attivo.
          In pratica e` l'allocazione in memoria dello spazio necessario a rappresentare una variabile.
          Non pensare troppo ai binding, e` un concetto complicato se non pensi a come viene implementato il linguaggio di programmazione.

          > i binding vengono effettuati sequenzialmente e poi l'esecuzione delle istruzioni all'interno dei vari scope (dipendente dalla posizione ed ordine delle chiamate alle varie funzioni) dipende dal flow del programma? correct?

          Sia il binding che l'esecuzione delle istruzioni dipende dal flusso del programma.

          > > Viene creata una variabile chiamata 'f' a cui viene assegnato il codice della funzione
          >
          > "il codice della funzione", ovvero? stiamo proprio parlando delle istruzioni che ho scritto nell'indentatura? vengono prese e messe in memoria bindate alla variabile f? a questo punto il parametro che io specifico tra parentesi che cosa indica di preciso?

          Stiamo parlando delle istruzioni in bytecode:

          Type "help", "copyright", "credits" or "license" for more information.
          >>> def f(x):
          ...     x = x + 1
          ...     print x
          ...     return x
          ... 
          >>> f
          <function f at 0x7ff5f6aea5f0>
          >>> dir(f)
          ['__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__', '__dict__', '__doc__', '__format__', '__get__', '__getattribute__', '__globals__', '__hash__', '__init__', '__module__', '__name__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'func_closure', 'func_code', 'func_defaults', 'func_dict', 'func_doc', 'func_globals', 'func_name']
          >>> f.__code__
          <code object f at 0x7ff5f6b268b0, file "<stdin>", line 1>
          >>> [ord(x) for x in f.__code__.co_code]
          [124, 0, 0, 100, 1, 0, 23, 125, 0, 0, 124, 0, 0, 71, 72, 124, 0, 0, 83]
          >>> import dis
          >>> dis.dis(f)
            2           0 LOAD_FAST                0 (x)
                        3 LOAD_CONST               1 (1)
                        6 BINARY_ADD          
                        7 STORE_FAST               0 (x)
          
            3          10 LOAD_FAST                0 (x)
                       13 PRINT_ITEM          
                       14 PRINT_NEWLINE       
          
            4          15 LOAD_FAST                0 (x)
                       18 RETURN_VALUE        
          
          


          >
          >
          > quando mi verrebbe invece di pensare che se la sarebbe dovuta cavare ed avrebbe dovuto (nelle mie intenzioni) fare 5 + 1 ed assegnare il valore 6 alla variabile y.
          > quindi non ho capito un cazzo riguardo ai parametri delle funzioni ed a cosa sto scrivendo.

          Esatto. Nello scope in cui fai la chiamata a f (globale) la variabile y non esiste, di conseguenza la sottoespressione 'y' dell'espressione 'f(y)' non puo` essere valutata.

          > se eseguo il codice modificato con y infatti si lamenta del fatto che y non e' stato definito, quindi l'unica ragione per la quale il codice con due variabili con lo stesso nome funziona e' proprio perche' hanno lo stesso nome?

          Funziona perche' non stai cercando di valutare il valore di variabili out of scope.


          **Modificato dall'autore il 22.06.2017 15:36**
          I think happiness is love
          - Vladimir Putin
          • Avatar
            ☺
            Scritto da
            il 2017-06-22 16:08:52.0 alle 2017-06-22 16:08:52.0
            Trollate totali: 6369
            Re: python memory bindings and scopes
            Scritto da: avvelentani
            >
            > No. Viene creata una variabile.

            il binding viene creato solo quando io assegno qualcosa a quella variabile.

            >
            >
            > Sono concetti collegati, il binding dipende dallo scope. Se tu chiamassi la tua funzione f due volte la variabile x (quella locale a f) avrebbe due binding differenti, uno per chiamata.

            aha


            > Ogni binding (in python) vive finche' lo scope che definisce la variabile e` attivo.
            > In pratica e` l'allocazione in memoria dello spazio necessario a rappresentare una variabile.
            > Non pensare troppo ai binding, e` un concetto complicato se non pensi a come viene implementato il linguaggio di programmazione.
            >

            sono stati introdotti subito, dopodiche' dai loop si e' passati a quell'esempio e si e' parlato di scope senza menzionare piu' i binding, ma sospettavo fossero collegati perche' di fatto si tratta della gestione della memoria.

            e' una roba python specific o rimane fondamentalmente uguale tra i vari linguaggi?

            >
            > Sia il binding che l'esecuzione delle istruzioni dipende dal flusso del programma.
            >
            >
            > Stiamo parlando delle istruzioni in bytecode:
            >
            >
            > Type "help", "copyright", "credits" or "license" for more information.
            > ...     x = x + 1
            > ...     print x
            > ...     return x
            > ... 
            > <function f at 0x7ff5f6aea5f0>
            > ['__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__', '__dict__', '__doc__', '__format__', '__get__', '__getattribute__', '__globals__', '__hash__', '__init__', '__module__', '__name__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'func_closure', 'func_code', 'func_defaults', 'func_dict', 'func_doc', 'func_globals', 'func_name']
            > <code object f at 0x7ff5f6b268b0, file "<stdin>", line 1>
            > [124, 0, 0, 100, 1, 0, 23, 125, 0, 0, 124, 0, 0, 71, 72, 124, 0, 0, 83]
            > 2           0 LOAD_FAST                0 (x)
            > 3 LOAD_CONST               1 (1)
            > 6 BINARY_ADD          
            > 7 STORE_FAST               0 (x)
            > 
            > 3          10 LOAD_FAST                0 (x)
            > 13 PRINT_ITEM          
            > 14 PRINT_NEWLINE       
            > 
            > 4          15 LOAD_FAST                0 (x)
            > 18 RETURN_VALUE        
            > 
            > 

            >
            >
            > Esatto. Nello scope in cui fai la chiamata a f (globale) la variabile y non esiste, di conseguenza la sottoespressione 'y' dell'espressione 'f(y)' non puo` essere valutata.
            >
            >
            > Funziona perche' non stai cercando di valutare il valore di variabili out of scope.
            >

            infatti cosi fa quello che volevo ottenere.

            def f(x):
                y = x+1
                print('il valore di x nella funzione f(x) e:', x)
                print('il valore di y nella funzione f(x) e:', y)
                return y
            
            x = 5
            y = f(x)
            print(x)
            print(y)


            ('il valore di x nella funzione f(x) e:', 5)
            ('il valore di y nella funzione f(x) e:', 6)
            5
            6
            


            e lo fa in maniera differente da

            def f(x):
                x = x+1
                print("il valore di x nella funzione f(x) e:", x)
                return x
            
            x = 5
            z = f(x)
            print(x)
            print(z)


            che corre cosi

            ('il valore di x nella funzione f(x) e:', 6)
            5
            6


            tutto molto interessante, grazie per il dilettevole ozio.
            Innamorato

            **Modificato dall'autore il 22.06.2017 16:09**
            Please consider the environment before printing this message, 50% of the above is useless!
            • Avatar
              ☺
              Scritto da
              avvelentani
              Cubicolario
              il 2017-06-22 16:32:28.0 alle 2017-06-22 16:32:28.0
              Trollate totali: 18184
              Re: python memory bindings and scopes
              Scritto da: dada216
              > Scritto da: avvelentani
              > >
              > > No. Viene creata una variabile.
              >
              > il binding viene creato solo quando io assegno qualcosa a quella variabile.

              In python si`. Nota che non tutti gli assegnamenti creano un binding. As esempio 'x = x+1' dentro f non crea un nuovo binding.

              > > Ogni binding (in python) vive finche' lo scope che definisce la variabile e` attivo.
              > > In pratica e` l'allocazione in memoria dello spazio necessario a rappresentare una variabile.
              > > Non pensare troppo ai binding, e` un concetto complicato se non pensi a come viene implementato il linguaggio di programmazione.
              > >
              >
              > sono stati introdotti subito, dopodiche' dai loop si e' passati a quell'esempio e si e' parlato di scope senza menzionare piu' i binding, ma sospettavo fossero collegati perche' di fatto si tratta della gestione della memoria.
              >
              > e' una roba python specific o rimane fondamentalmente uguale tra i vari linguaggi?

              esiste in tutti i linguaggi, i dettagli variano.
              I think happiness is love
              - Vladimir Putin
<softv>

Pagina generata in 124 millisecondi

Utenti attivi: 8 nell'ultimo minuto, 28 negli ultimi cinque minuti, 62 negli ultimi 15 minuti