Variabili Globali

L
Lolloxox31 (1610 points)
11 16 26
asked Dec 7, 2019 in HW8 obbligatorio by Lolloxox31 (1,610 points)
Buonasera a tutti volevo chiedere un'informazione, ho letto le istruzioni dell'homework 8 e viene specificato che non si possono usare le variabili globali, ....però in questo modo, nel mio caso, dovrei ogni volta passare come parametro alla funzione ricorsiva la matrice, le parole da cercare e molte altre informazioni complicando notevolmente il codice ed aumentando di molto i tempi solo perche devo passare molti parametri........vorrei sapere se sono effettivamente proibite o si tratta solo di un copia-incolla dell'homework 6?
490 views

3 Answers

Best answer
E
Edward (25950 points)
2 4 172
answered Dec 7, 2019 by Edward (25,950 points)
selected Dec 7, 2019 by Lolloxox31
No, sono effettivamente proibite, quindi o li passi come parametri o crei delle funzioni innestate. Solo che se la funzione ricorsiva è quella innestata, non viene rilevata, quindi almeno una devi definirla al livello più esterno.
L
Lolloxox31 (1610 points)
11 16 26
commented Dec 7, 2019 by Lolloxox31 (1,610 points)
Cosa sono le funzioni innestate?
E
Edward (25950 points)
2 4 172
commented Dec 7, 2019 by Edward (25,950 points)
Funzioni definite così:

definisci funzione1(parametri):
    definisci funzione2(parametri):
        fai qualcosa
    fai altro
    chiami funzione2

Funzione2 potrà usare tutte le variabili dichiarate dentro funzione1, quindi non dovrai passarle come parametro. Devi fare attenzione quando usi questo tipo di funzione, perchè potresti incorrere ad errori logici difficili da debuggare.

Come nota, il termine italiano corretto è funzioni annidate
L
Lolloxox31 (1610 points)
11 16 26
commented Dec 7, 2019 by Lolloxox31 (1,610 points)
Ok   grazie!
B
Benigno (1020 points)
6 17 28
commented Dec 7, 2019 by Benigno (1,020 points)
È una soluzione valida dichiarare la matrice al di fuori delle funzioni e accedervi dalle funzioni senza doversela ripassare ogni volta?
E
Edward (25950 points)
2 4 172
commented Dec 7, 2019 by Edward (25,950 points)
Dipende cosa intendi, se vuoi dichiarare la matrice come variabile globale... allora no, non puoi perchè è proibito.

Se invece vuoi dichiarare la matrice dentro una funzione, e dichiarare un'altra funzione dentro quella funzione, in modo che può accedere alla matrice, allora questo è concesso. Ricorda però che la funzione ricorsiva deve essere definita al livello più esterno per essere rilevata, quindi probabilmente non è fattibile, visto che devi passare la matrice alla funzione ricorsiva.

Comunque tieni presente che la matrice è un oggetto mutabile, e quando lo passi come parametro, in realtà è come se stessi passando un puntatore. Quindi passarla come parametro non è così costoso.
B
Benigno (1020 points)
6 17 28
commented Dec 7, 2019 by Benigno (1,020 points)
Perdona l'ignoranza. Se dichiaro una variabile

variabile = [ ]

e poi la modifico dentro una funzione

def funzione( ):

     variabile.append (qualcosa)

viene considerata globale?
l
lucapla3 (650 points)
0 0 9
commented Dec 7, 2019 by lucapla3 (650 points)
Basta che la variabile sia dentro una funzione per non essere considerata globale, quindi se metti:

es1(ftesto):

    variabile = []

questa non è una variabile globale

mentre se la metti (nel nostro caso) fuori dalla funzione es1 o da altre funzioni come ad esempio:

variabile = []

es1(ftesto):

allora si è una variabile globale
B
Benigno (1020 points)
6 17 28
commented Dec 7, 2019 by Benigno (1,020 points)
Grazie. E in questo caso invece?

def es1 ( ):

    variabile = [ ]

    def funzione ( ):

        variabile.append(qualcosa)
E
Edward (25950 points)
2 4 172
commented Dec 7, 2019 by Edward (25,950 points)
nel tuo ultimo caso va bene

tieni presente però che per hw8 devi creare una funzione ricorsiva, e viene rilevata solo se dichiarata al livello più esterno (non dentro una funzione)
B
Benigno (1020 points)
6 17 28
commented Dec 7, 2019 by Benigno (1,020 points)
Grazie, mi era preso un colpo perché ho sempre usato questo sistema, temevo di aver perso tutti e tre gli HW
l
lucapla3 (650 points)
0 0 9
answered Dec 7, 2019 by lucapla3 (650 points)
Si sono effettivamente proibite come in tutti gli homework che abbiamo fatto fino ad ora.
Christian (15220 points)
2 4 77
answered Dec 7, 2019 by Christian (15,220 points)
Ciao, credo siano effettivamente proibite.
In una delle lezioni (per chi è in teledidattica) il professore sottolinea come queste possano nascondere effetti collaterali delle singole funzioni, perché verrebbero modificati valori che sono all'esterno.
andrea.sterbini (172780 points)
514 935 1789
commented Dec 7, 2019 by andrea.sterbini (172,780 points)
Sono proibite sia per motivi stilistici (possono portare a errori difficili da individuare) sia perchè permettono di fare furberie per il calcolo dei tempi.

Usate degli argomenti aggiuntivi