Commit 53eea357 authored by Tancredi Orlando's avatar Tancredi Orlando
Browse files

Various fixes.

parent f69dce09
......@@ -744,8 +744,8 @@ Hello world!
## Parametri
- La funzione può essere "predisposta" per ricevere parametri
- I parametri sono i dati in ingresso di una funzione
- La funzione deve essere "predisposta" per ricevere parametri (quantità)
- I parametri diventano variabili visibili all'interno della funzione per essere
usati
......@@ -777,14 +777,12 @@ Hello world!
----
## Parametri con valori di default
## Parametri di default
- Alcuni parametri possono essere resi opzionali
- Si fa assegnando ai parametri dei valori di default
- Se omettiamo l'argomento, la funzione userà quello di default
- Alcuni parametri possono essere opzionali
- Se non specificati assumono un valore di default
```python
```
def f(a, b=3, c=6):
print(a, b, c)
```
......@@ -802,31 +800,80 @@ def f(a, b=3, c=6):
----
## Variabili locali
## Scoping
- Le variabili definite dentro una funzione sono **locali**
- Non sono correlate con variabili dello stesso nome, definite fuori
- Lo scoping modifica la **visibilità** delle variabili
- Le variabili definite all'interno di uno scope sono accessbili solo al
suo interno
- Gli scope sono definiti da funzioni, classi e moduli
- Le classi sono contenitori di funzioni e di variabili
- I moduli sono contenitori di classi, di funzioni e di variabili
----
## Lo statement `global`
```
>>> x = 'globale'
>>> def f():
... x = 'locale'
```
- Permette di definire una variabile globale all'intero di una funzione
- Unico modo per modificare una variabile definita fuori dalla funzione
```
>>> f()
>>> print(x)
globale
```
```python
>>> x = 3
>>> def increment_x():
... global x
... x = x + 1
...
>>> increment_x()
>>> x
4
- All'interno della funzione `f()` viene creata una seconda varibile di nome `x`
accessibile solo all'interno della funzione
- La variabile `x` **all'interno della funzione** è chiamata **locale**
- La variabile `x` **al di fuori della funzione** è chiamata **globale**
- Sono due variabili **diverse**
----
Se all'interno della funzione non è stato usato il nome di una variabile
globale è possibile accedere ad essa in lettura.
```
>>> x = 'globale'
>>> def f():
... print(x)
>>> f()
globale
```
Notes:
Accennare alle virtù della programmazione priva di side effects.
Tuttavia non è possibile modificarla.
```
>>> x = 'globale'
>>> def f():
... print(x)
... x = 'variabile ' + x
>>> f()
UnboundLocalError: local variable 'x' referenced before assignment
```
L'interprete ci informa che stiamo chiamando una variabile `x` che non è stata
assegnata. Infatti dentro la funzione la variabile `x` non esiste.
----
### Evadere dallo scope
È tuttavia possibile accedere in scrittura a una variabile globale,
specificandolo esplicitamente con l'istruzione **`global`**.
```
>>> x = 'globale'
>>> def f():
... global x
... print(x)
... x = 'variabile ' + x
... print(x)
>>> f()
globale
variabile globale
```
----
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment