Please ignore secret bonuses. Secret tests do NOT award bonus. Max hw grade is 30+2 bonus efficiency

Do you need help?

Variabili Globali

L
Lolloxox31 (1610 points)
14 16 26
in HW8 obbligatorio by (1.6k 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?
717 views
closed

3 Answers

Best answer
E
Edward (25950 points)
3 4 172
by (26.0k points)
selected by
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)
14 16 26
by (1.6k points)
Cosa sono le funzioni innestate?
E
Edward (25950 points)
3 4 172
by (26.0k 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)
14 16 26
by (1.6k points)
Ok   grazie!
B
Benigno (1020 points)
9 17 28
by (1.0k 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)
3 4 172
by (26.0k 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)
9 17 28
by (1.0k 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
by (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)
9 17 28
by (1.0k points)
Grazie. E in questo caso invece?

def es1 ( ):

    variabile = [ ]

    def funzione ( ):

        variabile.append(qualcosa)
E
Edward (25950 points)
3 4 172
by (26.0k 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)
9 17 28
by (1.0k 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
by (650 points)
Si sono effettivamente proibite come in tutti gli homework che abbiamo fatto fino ad ora.
Christian (15220 points)
3 4 77
by (15.2k 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 (207920 points)
749 1267 2373
by (208k 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