Anteprima
Vedrai una selezione di 3 pagine su 6
Informatica - Appunti funzioni 2  Pag. 1 Informatica - Appunti funzioni 2  Pag. 2
Anteprima di 3 pagg. su 6.
Scarica il documento per vederlo tutto.
Informatica - Appunti funzioni 2  Pag. 6
1 su 6
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

ARGOMENTI DELLA FUNZIONE:

Guardare gli aromenti della funzione come variabili

Le variabili hanno un campo di visibilità (scope) e un periodo di vitalità (liveness)

- Non sono viste da tutti e per sempre

1. A T1 -> abbiamo creato un ogg 5

2. A T2 -> istruzione di assegnamento

o A destra pero c’e un espr che coinvolge la chiamata a funzione di cube

o Si associa x=y (x è la variabile in def cube(x))

▪ Non viene pero creato un nuovo oggetto uguale a 5 perche esiste gia e

quindi sia x che y vengono associate all’ogg 5

3. A T3 -> viene creata una variabile z con istruzione di assegnamento

a. Z = x**3 a cui si associa il valore di x al cubo in questo caso 125

4. A T4 -> le VARIABILI LOCALI (negli argomenti formali della funzione e quelle associate nel

corpo della funzione cioè z e x) vengono annullate e si tiene solo la variabile t e y

a. 125 viene associata alla variabile t

b. T e y sono VARIABILI GLOBALI (scope globale)

c. X e z esistono solo durante la chiamata della funzione e basta

d. T e y esistono SEMPREEEEE

Esempio 2: (cube anche se la funzione non è associata all’elevazione

al cubo)

2. T2 -> assegno a x l’oggetto assegnato a variabile y

- x e y puntano alla stessa lista -> unico oggetto esistente

-> modifico l’elemento alla posizione x[1] = 100

-> se chiamo la variabile y mi torna la sostituzione del

valore 100 all’elemento in posizione 1 della lista

VARIABILI LOCALI E GLOBALI:

concetti di esistenza e visbilita

- Globali esistono sempre

1. definisco la funzione

SHELL: 0. Assegnamento y=5

1. Assegnmaneto t = alla funzione foo(y) -> associo a x e y l’oggetto 5

a. X è una variabile locale e scomparira una volta terminata la funzione foo

b. 125 viene associata a t -> non scompare

c. A print(t) -> z e x non esistono piu perche la funzione foo è terminata

i. Se avessi scritto print(x/z) sarebbe uscito errore

2. Faccio un’altra chiamata a foo con valore diverso 2

a. Cosa succede? Genero un’istruzione di assegnamento

b. Genero una variabile x a cui associo l’oggetto 2 e rieseguo lo stesso corpo di

istruzioni della funzione e quindi viene creata di nuovo la z con istruzioe x**3

- Y e t esistono sempre da quando vengono definite

- X e z definite solo durante la chiamata della funzione foo

o La loro visibilità è ristretta alla sola funzione -> non posso usarle al di fuori della

funzione foo

▪ se provo a scrivere print(x o z) non funziona -> ERR

esempio:

1. posto A1 -> y = 5 -> scope GLOBALE

2. A2 -> chiamo la funzione foo

a. Assegnamento x=y

b. A3 -> esisterà una var x che associa a 5

c. Se però assegno a y il valore 10

▪ Non sto modificando la variabile y=5 ma sto creando un una nuova variabile

y uguale a quella globale che associa a 10

• questa però è all’interno della funzione foo -> scope LOCALE

• -> è solo leggibile all’interno della funzione foo, ma non trascrivibile

▪ Il valore di y in a1 non viene modificata

▪ Se faccio return di y quale y viene ritornata? Quella LOCALE

• Variabile locale ha la precendeza

• Ogni volta che usero y nella funzione uso quella locale non quella

globale

3. A t viene associato il valore 10 e y sarà sempre 5 perche l’assegnamento y=10 non modifica il

suo valore

esempio 3

- Z= y (o anche x) + 5 -> usata la y globale in lettura solo se non esiste un’altra variabile con lo

stesso nome con assegnamento (come es precedente)

o Se l’assegno definisce una nuova variabile locale con stesso nome e userà sempre

quella locale sia x lettura che x scrittura

Esempio 4

PROGRAMMA A:

➢ Phyton da errore perche viene assegnato un nuovo valore a y -> variabile locale

➢ Conflitto di nome:

o Phyton visita il corpo della funzione e guarda se y viene usata a sinistra di un

assegnamento

o Se c’è una a sinistra -> phyton le trattera tutte come variabili locali anche quelle

prima dell’istruzione di assegnamento

PROGRAMMA B:

➢ Phyton guarda TUTTO il corpo della funzione

o Y appare a sinistra in y= 10 quindi non viene usata la y globale ma quella locale

o Viene però errore perche y è definita dopo l’istruzione in cui viene messa y

nell’espressione

▪ Se avessi scritto y= 1° prima di x= y+5 non ci sarebbero stati problemi

o Se la variabile y compare almeno una volta a sinistra in un’istruzione di

assegnamento all’interno del corpo della funzione

▪ Se si la funzione definisce una variabile locale e per la funzione phyton userà

solo la variabile locale x tutta la funzione

▪ Bisogna però definire prima la variabile locale y prima dell’istruzione x = y +

5

PROGRAMMA A AGAIN:

➢ Visita tutto il corpo della funzione

➢ Y appare a sinistra nella stessa istruzione -> usero quindi sempre y locale sia in scrittura che

lettura, la globale non la uso piu

➢ Viene errore però perche y non è ancora stata definita essendo il risultato dell’istruzione y+5

USO PROPRIETA GLOBAL

➢ se tolgo global y -> avro un errore perche cercherebbe y locale che viene dopo l’istruzione

(vedi porgramma A e B precedenti)

➢ 10 viene associato a t ma non viene stampato, stampo y e torna 100 perchè in funzione c’è

l’assegnamento -> y = 100

esempio

Dettagli
Publisher
A.A. 2019-2020
6 pagine
SSD Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher danyconti01 di informazioni apprese con la frequenza delle lezioni di Informatica e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Politecnico di Milano o del prof Rocco Paolo.