Re: [Python] Un concetto difficile per me.

2021-01-15 Per discussione Gabriele Battaglia

Reply to the Daniele Zambelli's message, wrote on 16/11/2020 at 21:58:

Il giorno lun 16 nov 2020 alle ore 09:44 Strap Lab  ha scritto:

[...]


a = 10
def do():

... a = a + 1
... print(a)
...

print(a)

10

do()

Traceback (most recent call last):
   File "", line 1, in 
   File "", line 2, in do
UnboundLocalError: local variable 'a' referenced before assignment


Per aggiungere un esempio che forse può aiutarti a chiarire le idee, o
a confonderle del tutto:


a = 10
def do_b():

 b = a + 1
 print(b)



def do_a():

 a = a + 1
 print(a)



a

10

do_b()

11

do_a()

Traceback (most recent call last):
   File "", line 1, in 
 do_a()
   File "", line 2, in do_a
 a = a + 1
UnboundLocalError: local variable 'a' referenced before assignment




In questo ultimo caso, la variabile a poiché si trova a sinistra
dell'uguale, è una variabile locale alla funzione e "nasconde" la
variabile a globale. Ma quando Python tenta di eseguire a + 1, a
(quella locale) non è ancora istanziata e Python non sa cosa fare.


Grazie anche a te Daniele, buona giornata!
Gabriele.
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] Un concetto difficile per me.

2021-01-15 Per discussione Gabriele Battaglia

Reply to the Strap Lab's message, wrote on 16/11/2020 at 09:44:



On Fri, Nov 13, 2020 at 4:02 PM Gabriele Battaglia > wrote:


[...]


Ciao,

Qual è l'inghippo?


Lo scope delle variabili.


a = 10
def do():

...     a = a + 1
...     print(a)
...

print(a)

10

do()

Traceback (most recent call last):
   File "", line 1, in 
   File "", line 2, in do
UnboundLocalError: local variable 'a' referenced before assignment

def do():

...     a = 15
...     return a
...

print(a)

10

print(do())

15

print(a)

10

Qui un bell'articolo che ti spiega tutto bene bene: 
https://realpython.com/python-scope-legb-rule/ 



Sani
Strap

Meglio tordi che mais!

Grazie Sani, il tuo esempio e quell'articolo erano veramente chiari.
Direi che ora ho finalmente capito.

Grazie mille e scusa per il feedback tardivo.

Gabriele.
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] Un concetto difficile per me.

2020-11-16 Per discussione Daniele Zambelli
Il giorno lun 16 nov 2020 alle ore 09:44 Strap Lab  ha scritto:
> [...]
>
> >>> a = 10
> >>> def do():
> ... a = a + 1
> ... print(a)
> ...
> >>> print(a)
> 10
> >>> do()
> Traceback (most recent call last):
>   File "", line 1, in 
>   File "", line 2, in do
> UnboundLocalError: local variable 'a' referenced before assignment

Per aggiungere un esempio che forse può aiutarti a chiarire le idee, o
a confonderle del tutto:

>>> a = 10
>>> def do_b():
b = a + 1
print(b)


>>> def do_a():
a = a + 1
print(a)


>>> a
10
>>> do_b()
11
>>> do_a()
Traceback (most recent call last):
  File "", line 1, in 
do_a()
  File "", line 2, in do_a
a = a + 1
UnboundLocalError: local variable 'a' referenced before assignment
>>>

In questo ultimo caso, la variabile a poiché si trova a sinistra
dell'uguale, è una variabile locale alla funzione e "nasconde" la
variabile a globale. Ma quando Python tenta di eseguire a + 1, a
(quella locale) non è ancora istanziata e Python non sa cosa fare.

Ciao

-- 

Daniele

www.fugamatematica.blogspot.com

giusto!
nel verso
forse è perché non guardiamo le cose
Quando non ci capiamo,
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] Un concetto difficile per me.

2020-11-16 Per discussione Gabriele Battaglia


> On 16 Nov 2020, at 09:44, Strap Lab  wrote:
> 
> Qui un bell'articolo che ti spiega tutto bene bene: 
> https://realpython.com/python-scope-legb-rule/ 
> 
> Ciao Sani,
Ti ringrazio. Leggerò l’articolo che mi hai indicato con attenzione.
Il problema è che ogni volta mi pare d’aver capito, ma poi l’errore mi torna 
sempre.
Una variabile dichiarata fuori da ogni funzione, ad inizio file, non dovrebbe 
essere considerata globale?
Ad ogni odo, ora riprovo a resettare tutto nella mia testa e a riaffrontare 
l’argomento da capo.
Grazie. Buona giornata.

Gabry.

___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] Un concetto difficile per me.

2020-11-16 Per discussione Federico Fissore

Mauro Casini wrote on 16/11/20 14:41:

a = 1
def func():
   global a
   a += 1



E l'equivalente quando a è in una funzione

def out():
a = 1
def func():
nonlocal a
a += 1

federico
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] Un concetto difficile per me.

2020-11-16 Per discussione Mauro Casini
Gabriele Battaglia  writes:

> Bene, essendo prima di tutto, ed essendo al livello minimo di
> indentazione, le variabili a b e c dovrebbero essere viste da ogni
> punto dello script, giusto? Da qualsiasi funzione.
> Com'è possibile allora che mi compaia
> UnboundLocalError: local variable 'totmaxval' referenced before assignment
>
> totmaxval = 0 è una delle primissime istruzioni, dopo i commenti
> iniziali del file.

Se le asegni un valore all'interno della funzione, viene considerata una
variabile locale, e se la usi prima dell'assegnamento ti da errore.
Per usare la variabile globale anche in caso di assegnamento bisogna
dichiararla global:

a = 1
def func():
  global a
  a += 1

___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] Un concetto difficile per me.

2020-11-16 Per discussione Strap Lab
On Fri, Nov 13, 2020 at 4:02 PM Gabriele Battaglia  wrote:

> [...]
>

Ciao,

Qual è l'inghippo?
>
>
Lo scope delle variabili.

>>> a = 10
>>> def do():
... a = a + 1
... print(a)
...
>>> print(a)
10
>>> do()
Traceback (most recent call last):
  File "", line 1, in 
  File "", line 2, in do
UnboundLocalError: local variable 'a' referenced before assignment
>>> def do():
... a = 15
... return a
...
>>> print(a)
10
>>> print(do())
15
>>> print(a)
10

Qui un bell'articolo che ti spiega tutto bene bene:
https://realpython.com/python-scope-legb-rule/

Sani
Strap
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


[Python] Un concetto difficile per me.

2020-11-13 Per discussione Gabriele Battaglia

Ciao.
Non posto il codice perchè qui è una questione di concetto.
E prima o poi mi trovo sempre a fare i conti con questa cosa.

Quindi, lo schema è:

All'inizio del file dichiaro delle variabili:
a=0
b=1
c=2

poi seguono tutte le definizioni di funzioni

dopo ancora c'è il main diciamo... Un ciclo while che chiama tutte le 
funzioni a seconda del caso.


Bene, essendo prima di tutto, ed essendo al livello minimo di 
indentazione, le variabili a b e c dovrebbero essere viste da ogni punto 
dello script, giusto? Da qualsiasi funzione.

Com'è possibile allora che mi compaia
UnboundLocalError: local variable 'totmaxval' referenced before assignment

totmaxval = 0 è una delle primissime istruzioni, dopo i commenti 
iniziali del file.

Qual è l'inghippo?

Gabriele.
--
Gabriele Battaglia, IZ4APU (Libero)
Sent from TB on Windows 10, Genus Bononiae's computer.
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python