[Python] Un concetto difficile per me.

Daniele Zambelli daniele.zambelli a gmail.com
Lun 16 Nov 2020 21:58:54 CET


Il giorno lun 16 nov 2020 alle ore 09:44 Strap Lab <lab a strap.it> ha scritto:
> [...]
>
> >>> a = 10
> >>> def do():
> ...     a = a + 1
> ...     print(a)
> ...
> >>> print(a)
> 10
> >>> do()
> Traceback (most recent call last):
>   File "<stdin>", line 1, in <module>
>   File "<stdin>", 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 "<pyshell#13>", line 1, in <module>
    do_a()
  File "<pyshell#10>", 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,


Maggiori informazioni sulla lista Python