day_1.md 18 KB
Newer Older
Tancredi Orlando's avatar
Tancredi Orlando committed
1
2
# Corsi Python 2017

Niccolò Izzo's avatar
Niccolò Izzo committed
3
4
5
6
7
8
9
10
11
12
Niccolò Izzo

**izzo.niccolo chiocciola gmail.com**

Tancredi Orlando 

**tancredi chiocciola coselosche.org**

![POuL](https://www.poul.org/wp-content/themes/hipoul/img/newlogo.svg)

Tancredi Orlando's avatar
Tancredi Orlando committed
13
14
15
16
17
18
----

Potete ottenere questa presentazione recandovi all'indirizzo:

[slides.poul.org/2017/python](https://slides.poul.org/2017/python)

edne's avatar
edne committed
19
---
Tancredi Orlando's avatar
Tancredi Orlando committed
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35

# Perché Python?

- Ottimo per i principianti
- Facile da usare
- Estremamente diffuso
- Moduli per qualunque cosa

----

## C

```c
#include <stdio.h>

int main() {
Niccolò Izzo's avatar
Niccolò Izzo committed
36
    printf("Hello, world!\n");
Tancredi Orlando's avatar
Tancredi Orlando committed
37
38
39
40
41
42
43
44
45
46
47
    return 0;
}
```

----

## Java

```java
public class HelloWorld {
    public static void main(String[] args) {
Niccolò Izzo's avatar
Niccolò Izzo committed
48
        System.out.println("Goodbye, world!");
Tancredi Orlando's avatar
Tancredi Orlando committed
49
50
51
52
53
54
55
56
57
    }
}
```

----

## Python

```python
Niccolò Izzo's avatar
Niccolò Izzo committed
58
print('Hello, world!')
Tancredi Orlando's avatar
Tancredi Orlando committed
59
60
61
62
63
64
65
66
67
68
69
70
71
72
```

----

![import antigravity](https://imgs.xkcd.com/comics/python.png)

----

## Breve storia

- Nasce nel 1991 per mano di Guido van Rossum
- Prende il nome dai Monty Python
- È in continua evoluzione
- Convivono due versioni (2 e 3)
edne's avatar
edne committed
73
- Noi useremo Python 3
Tancredi Orlando's avatar
Tancredi Orlando committed
74
75
76
77
78
79
80
81
- Fatelo anche voi

----

## Interpretato vs. compilato

- Compilato: tradotto in linguaggio macchina
- Interpretato: eseguito da un altro programma
edne's avatar
edne committed
82
- Python è interpretato (circa)
Tancredi Orlando's avatar
Tancredi Orlando committed
83
84

Notes:
Tancredi Orlando's avatar
Tancredi Orlando committed
85
86
87
Python è compilato in quanto la sintassi Python è compilata in bytecode, ed
è interpretato in quanto il bytecode è eseguito da un altro programma, la VM
Python e non eseguito direttamente dal processore.
Tancredi Orlando's avatar
Tancredi Orlando committed
88

edne's avatar
edne committed
89
----
Tancredi Orlando's avatar
Tancredi Orlando committed
90
91
92

## Cosa serve

Tancredi Orlando's avatar
Tancredi Orlando committed
93
94
95
- Per scrivere il codice, un editor di testo:
  - Multipiattaforma: Atom
  - Windows: Notepad++
edne's avatar
edne committed
96
- In quanto linguaggio interpretato, l'interprete Python
Tancredi Orlando's avatar
Tancredi Orlando committed
97
98
99
100
101
  - Linux: generalmente preinstallato, altrimenti utilizzare il package manager
  - macOS: [Installer](https://www.python.org/ftp/python/3.6.1/python-3.6.1-macosx10.6.pkg)
  - Windows: [32bit](https://www.python.org/ftp/python/3.6.1/python-3.6.1.exe)
    o [64bit](https://www.python.org/ftp/python/3.6.1/python-3.6.1-amd64.exe)

edne's avatar
edne committed
102
103
---

Tancredi Orlando's avatar
Tancredi Orlando committed
104
# Il linguaggio
edne's avatar
edne committed
105

Tancredi Orlando's avatar
Tancredi Orlando committed
106
107
108
109
110
111
----

## REPL

**R**ead, **E**val, **P**rint **L**oop

Tancredi Orlando's avatar
Tancredi Orlando committed
112
```
Tancredi Orlando's avatar
Tancredi Orlando committed
113
$ python3
Tancredi Orlando's avatar
Fixes.    
Tancredi Orlando committed
114
Python 3.6.1 (default, Mar 27 2017, 00:27:06)
Tancredi Orlando's avatar
Tancredi Orlando committed
115
[GCC 6.3.1 20170306] on linux
Niccolò Izzo's avatar
Niccolò Izzo committed
116
117
Type "help", "copyright", "credits" or "license" for more info...
>>> print('Hello, world!')
Tancredi Orlando's avatar
Tancredi Orlando committed
118
119
120
Hello world!
```

edne's avatar
edne committed
121
Per uscire: `quit()`
Tancredi Orlando's avatar
Tancredi Orlando committed
122
123

Notes:
Tancredi Orlando's avatar
Tancredi Orlando committed
124
125
126
Mostrare la differenza tra interprete (il software che converte le istruzioni
in bytecode e poi esegue quest'ultimo) e l'interfaccia REPL Python (il
software che si interfaccia con l'utente).
Tancredi Orlando's avatar
Tancredi Orlando committed
127
128
129
130
131

----

## Espressioni

edne's avatar
edne committed
132
```
Tancredi Orlando's avatar
Tancredi Orlando committed
133
134
>>> 2 + 2
4
Tancredi Orlando's avatar
Tancredi Orlando committed
135
```
edne's avatar
edne committed
136

Tancredi Orlando's avatar
Tancredi Orlando committed
137
```
Tancredi Orlando's avatar
Tancredi Orlando committed
138
139
>>> 3 * 3
9
Tancredi Orlando's avatar
Tancredi Orlando committed
140
```
edne's avatar
edne committed
141

Tancredi Orlando's avatar
Tancredi Orlando committed
142
```
edne's avatar
edne committed
143
>>> 4 < 5
Tancredi Orlando's avatar
Tancredi Orlando committed
144
145
146
147
148
True
```

----

edne's avatar
edne committed
149
150
## Commenti

Tancredi Orlando's avatar
Tancredi Orlando committed
151
Tutto ciò posto dopo il cancelletto (`#`) non è interpretato.
edne's avatar
edne committed
152

Tancredi Orlando's avatar
Tancredi Orlando committed
153
```
edne's avatar
edne committed
154
>>> 1 + 1  # qui posso scrivere quello che voglio
edne's avatar
edne committed
155
156
157
2
```

edne's avatar
edne committed
158
159
----

Tancredi Orlando's avatar
Tancredi Orlando committed
160
161
## Errori

edne's avatar
edne committed
162
```
Tancredi Orlando's avatar
Tancredi Orlando committed
163
164
165
166
167
168
>>> 3 / 0
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero
```

Niccolò Izzo's avatar
Niccolò Izzo committed
169
Il segreto degli hacker? Leggere le scritte!
edne's avatar
edne committed
170

Tancredi Orlando's avatar
Tancredi Orlando committed
171
172
173
174
175
176
([Lettura consigliata](http://www.girodivite.it/Diario-di-un-aspirante-hacker.html))

----

## Variabili

Tancredi Orlando's avatar
Tancredi Orlando committed
177
```
Tancredi Orlando's avatar
Tancredi Orlando committed
178
>>> x = 6
Tancredi Orlando's avatar
Tancredi Orlando committed
179
>>> y = 2
Tancredi Orlando's avatar
Tancredi Orlando committed
180
181
>>> x
6
Tancredi Orlando's avatar
Tancredi Orlando committed
182
183
184
>>> y
2
```
edne's avatar
edne committed
185

Tancredi Orlando's avatar
Tancredi Orlando committed
186
187
188
189
190
191
```
>>> 2 * y
4
>>> x + y
8
```
edne's avatar
edne committed
192

Tancredi Orlando's avatar
Tancredi Orlando committed
193
194
195
196
```
>>> z = x + y
>>> z
8
Tancredi Orlando's avatar
Tancredi Orlando committed
197
198
```

edne's avatar
edne committed
199
---
Tancredi Orlando's avatar
Tancredi Orlando committed
200

edne's avatar
edne committed
201
202
203
204
205
# Tipi

----

## Cosa ho di fronte?
Tancredi Orlando's avatar
Tancredi Orlando committed
206

edne's avatar
edne committed
207
```
Tancredi Orlando's avatar
Tancredi Orlando committed
208
209
>>> type(3)
<class 'int'>
Tancredi Orlando's avatar
Tancredi Orlando committed
210
```
Tancredi Orlando's avatar
Tancredi Orlando committed
211

Tancredi Orlando's avatar
Tancredi Orlando committed
212
```
Tancredi Orlando's avatar
Tancredi Orlando committed
213
214
215
216
217
218
>>> type(3.14)
<class 'float'>
```

----

edne's avatar
edne committed
219
## Interi (`int`)
edne's avatar
edne committed
220

Tancredi Orlando's avatar
Tancredi Orlando committed
221
Cifre senza punto
Niccolò Izzo's avatar
Niccolò Izzo committed
222

edne's avatar
edne committed
223
```
Niccolò Izzo's avatar
Niccolò Izzo committed
224
225
226
12       # notazione decimale
0xAB     # notazione esadecimale
0b101    # notazione binaria
edne's avatar
edne committed
227
```
edne's avatar
edne committed
228
229
230

----

edne's avatar
edne committed
231
## Decimali (`float`)
edne's avatar
edne committed
232

Tancredi Orlando's avatar
Tancredi Orlando committed
233
Cifre con punto
edne's avatar
edne committed
234
235
236
237

```
>>> 3.14 + 1.234
4.3740000000000006
Tancredi Orlando's avatar
Tancredi Orlando committed
238
```
edne's avatar
edne committed
239

Tancredi Orlando's avatar
Tancredi Orlando committed
240
```
edne's avatar
edne committed
241
242
>>> 100 / 3
33.333333333333336
Tancredi Orlando's avatar
Tancredi Orlando committed
243
```
Tancredi Orlando's avatar
Tancredi Orlando committed
244

Tancredi Orlando's avatar
Tancredi Orlando committed
245
```
edne's avatar
edne committed
246
247
248
>>> 100 // 3
33
```
Tancredi Orlando's avatar
Tancredi Orlando committed
249
250
251

----

edne's avatar
edne committed
252
## Casting
edne's avatar
edne committed
253
254

- È l'azione di conversione del tipo
edne's avatar
edne committed
255
- Si usa il nome del tipo destinazione
Tancredi Orlando's avatar
Tancredi Orlando committed
256

edne's avatar
edne committed
257
258
259
```
>>> int(4.20)
4
Tancredi Orlando's avatar
Tancredi Orlando committed
260
```
edne's avatar
edne committed
261

Tancredi Orlando's avatar
Tancredi Orlando committed
262
```
edne's avatar
edne committed
263
264
265
>>> x = float(13)
>>> x
13.0
Tancredi Orlando's avatar
Tancredi Orlando committed
266
```
edne's avatar
edne committed
267

Tancredi Orlando's avatar
Tancredi Orlando committed
268
```
edne's avatar
edne committed
269
270
271
272
273
>>> type(x)
float
>>> type(13)
int
```
Tancredi Orlando's avatar
Tancredi Orlando committed
274
275
276

----

edne's avatar
edne committed
277
## Booleani (`bool`)
Tancredi Orlando's avatar
Tancredi Orlando committed
278

edne's avatar
edne committed
279
280
281
282
- Possono assumere due valori: `True` o `False`
- Supportano operazioni logiche (`and`, `or`, `not`)
- Sono il risultato delle operazioni di confronto

Tancredi Orlando's avatar
Tancredi Orlando committed
283
284
285
286
287
----

```
>>> 4 < 5
True
Tancredi Orlando's avatar
Tancredi Orlando committed
288
```
Tancredi Orlando's avatar
Tancredi Orlando committed
289

Tancredi Orlando's avatar
Tancredi Orlando committed
290
```
Tancredi Orlando's avatar
Tancredi Orlando committed
291
292
>>> 3.14 < 2
False
Tancredi Orlando's avatar
Tancredi Orlando committed
293
```
Tancredi Orlando's avatar
Tancredi Orlando committed
294

Tancredi Orlando's avatar
Tancredi Orlando committed
295
```
Tancredi Orlando's avatar
Tancredi Orlando committed
296
297
>>> (4 < 5) or (3.14 < 2)
True
Tancredi Orlando's avatar
Tancredi Orlando committed
298
```
Tancredi Orlando's avatar
Tancredi Orlando committed
299

Tancredi Orlando's avatar
Tancredi Orlando committed
300
```
Tancredi Orlando's avatar
Tancredi Orlando committed
301
302
303
304
305
306
>>> (4 < 5) and (3.14 < 2)
False
```

----

edne's avatar
edne committed
307
```
Tancredi Orlando's avatar
Tancredi Orlando committed
308
309
>>> (3.14 < 2) or print('Hello world!')
Hello world!
Tancredi Orlando's avatar
Tancredi Orlando committed
310
```
Tancredi Orlando's avatar
Tancredi Orlando committed
311

Tancredi Orlando's avatar
Tancredi Orlando committed
312
```
Tancredi Orlando's avatar
Tancredi Orlando committed
313
314
>>> (3.14 < 2) and print('Hello world!')
False
edne's avatar
edne committed
315
316
```

Tancredi Orlando's avatar
Tancredi Orlando committed
317
- È necessario che il valore di solo un membro dell'espressione sia falso per
edne's avatar
edne committed
318
319
  rendere tutta l'espressione falsa. Tutti gli altri termini non vengono
  valutati.
Tancredi Orlando's avatar
Tancredi Orlando committed
320
321
322
- Python valuta i membri di una espressione finché ritiene sia necessario
  per la corretta esecuzione del codice

edne's avatar
edne committed
323
---
edne's avatar
edne committed
324

edne's avatar
edne committed
325
# Collezioni
Tancredi Orlando's avatar
Tancredi Orlando committed
326
327
328

----

edne's avatar
edne committed
329
## Stringhe (`str`)
Tancredi Orlando's avatar
Tancredi Orlando committed
330

Niccolò Izzo's avatar
Niccolò Izzo committed
331
- Testo
edne's avatar
edne committed
332
333
- Racchiuse tra singoli apici (`'`) o virgolette (`"`)
- Per stringhe su più righe racchiuse tra tripli apici (`'''`) o virgolette (`"""`)
Tancredi Orlando's avatar
Tancredi Orlando committed
334
- Sono *immutabili*
edne's avatar
edne committed
335
336
337
338
339
340

```
>>> a = "Hello"
>>> b = "World"
>>> a + ' ' + b
'Hello World'
Tancredi Orlando's avatar
Tancredi Orlando committed
341
342
343
344
```

----

edne's avatar
edne committed
345
## Liste (`list`)
Tancredi Orlando's avatar
Tancredi Orlando committed
346

Tancredi Orlando's avatar
Tancredi Orlando committed
347
348
349
- Collezione **ordinata** di elementi, anche di tipi diversi
- Si definiscono ponendo all'interno di parentesi quadre gli elementi
  intervallati da una virgola
Tancredi Orlando's avatar
Tancredi Orlando committed
350

Tancredi Orlando's avatar
Tancredi Orlando committed
351
352
```
lista = [False, 1, "due", 3.0, 4, 5]
edne's avatar
edne committed
353
354
```

Tancredi Orlando's avatar
Tancredi Orlando committed
355
- Il primo elemento ha indice 0 (zero-based)
Tancredi Orlando's avatar
Tancredi Orlando committed
356
357
- Si accede a un elemento della lista aggiungendo l'indice dell'elemento
  desiderato tra parentesi quadre
edne's avatar
edne committed
358
359
360
361
362
363

```
>>> lista[2]
'due'
```

Tancredi Orlando's avatar
Tancredi Orlando committed
364
365
366
367
368
369
370
----

```
>>> lista = [False, 1, "due", 3.0, 4, 5]
>>> lista
[False, 1, 'due', 3.0, 4, 5]
```
edne's avatar
edne committed
371
372
373

```
>>> lista[0] = 0.0
Tancredi Orlando's avatar
Tancredi Orlando committed
374
375
376
377
378
>>> lista
[0.0, 1, 'due', 3.0, 4, 5]
```

```
edne's avatar
edne committed
379
380
381
>>> lista.append('sei')
>>> lista
[0.0, 1, "due", 3.0, 4, 5, 'sei']
Tancredi Orlando's avatar
Tancredi Orlando committed
382
383
```

Tancredi Orlando's avatar
Tancredi Orlando committed
384
385
386
387
```
>>> lista.remove('sei')
>>> lista
[0.0, 1, "due", 3.0, 4, 5]
Tancredi Orlando's avatar
Tancredi Orlando committed
388
389
390
```

```
Tancredi Orlando's avatar
Tancredi Orlando committed
391
392
393
>>> lista.reverse()
>>> lista
[5, 4, 3.0, 'due', 1, 0.0]
Tancredi Orlando's avatar
Tancredi Orlando committed
394
395
396
```

```
Tancredi Orlando's avatar
Tancredi Orlando committed
397
398
>>> len(lista)
6
Tancredi Orlando's avatar
Tancredi Orlando committed
399
400
```

edne's avatar
edne committed
401
----
edne's avatar
edne committed
402

Tancredi Orlando's avatar
Tancredi Orlando committed
403
404
405
406
407
408
409
410
411
412
413
414
### Slicing

- Permette di formare sottoinsiemi di elementi contigui
- Bisogna indicare un intervallo di indici, separando inizio e fine con
  due punti (`:`)
- L'elemento finale non è incluso

```
>>> lista = [0.0, 1, "due", 3.0, 4, 5, 'sei']
```

```
edne's avatar
edne committed
415
>>> lista[2:5]
Tancredi Orlando's avatar
Tancredi Orlando committed
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
['due', 3.0, 4]
```

- È possibile indicare tutti gli elementi dall'inizio o fino alla fine di una
  lista omettendone l'indice

```
>>> lista[:4]
[0.0, 1, 'due', 3.0]
>>> lista[4:]
[4, 5, 'sei']
```

----

Tancredi Orlando's avatar
Tancredi Orlando committed
431
### Unpacking
edne's avatar
edne committed
432

Tancredi Orlando's avatar
Tancredi Orlando committed
433
Estrarre valori da un contenitore
edne's avatar
edne committed
434
435
436

```
>>> t = (1, 2)
Tancredi Orlando's avatar
Tancredi Orlando committed
437
```
Tancredi Orlando's avatar
Tancredi Orlando committed
438

Tancredi Orlando's avatar
Tancredi Orlando committed
439
```
edne's avatar
edne committed
440
441
442
>>> a, b = t
>>> b
2
Tancredi Orlando's avatar
Tancredi Orlando committed
443
```
edne's avatar
edne committed
444

Tancredi Orlando's avatar
Tancredi Orlando committed
445
```
edne's avatar
edne committed
446
>>> a, b = b, a
Tancredi Orlando's avatar
Tancredi Orlando committed
447
448
>>> a
2
Tancredi Orlando's avatar
Tancredi Orlando committed
449
```
Tancredi Orlando's avatar
Tancredi Orlando committed
450

Tancredi Orlando's avatar
Tancredi Orlando committed
451
```
Tancredi Orlando's avatar
Tancredi Orlando committed
452
453
>>> c, _ = t
>>> c
edne's avatar
edne committed
454
455
456
1
```

Tancredi Orlando's avatar
Tancredi Orlando committed
457
458
----

Tancredi Orlando's avatar
Tancredi Orlando committed
459
### L'operatore `in`
edne's avatar
edne committed
460

Tancredi Orlando's avatar
Tancredi Orlando committed
461
Valuta l'appartenenza di un elemento ad una collezione
Niccolò Izzo's avatar
Niccolò Izzo committed
462

edne's avatar
edne committed
463
464
465
466
467
```
>>> lista = ['a', 'b', 'c']
>>> 'c' in lista
True
```
Tancredi Orlando's avatar
Tancredi Orlando committed
468

Niccolò Izzo's avatar
Niccolò Izzo committed
469
470
471
472
473
474
475
476
- È un'espressione booleana
- Si può usare con l'operatore `not`

```
>>> lista = ['a', 'b', 'c']
>>> 'c' not in lista
False
```
edne's avatar
edne committed
477

edne's avatar
edne committed
478
479
----

Tancredi Orlando's avatar
Tancredi Orlando committed
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
## Tuple (`tuple`)

- Esattamente come le liste, ma **immutabili**
- Sono quindi anche **ordinate**
- Si definiscono con le parentesi tonde

```python
tupla = ('a', 1, 2, '3.0')
```

```
>>> tupla[1] = 1.0
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
```

```
>>> tupla.append('sei')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'tuple' object has no attribute 'append'
```

----

edne's avatar
edne committed
506
507
## Riferimenti

Tancredi Orlando's avatar
Tancredi Orlando committed
508
509
- Quando assegniamo un oggetto ad una variabile, la variabile contiene solo un
  *riferimento* all'oggetto
edne's avatar
edne committed
510
511
- **Non** l'oggetto stesso.

Tancredi Orlando's avatar
Tancredi Orlando committed
512
```
edne's avatar
edne committed
513
>>> spesa_a = ['mela', 'mango']
Tancredi Orlando's avatar
Tancredi Orlando committed
514
```
Tancredi Orlando's avatar
Tancredi Orlando committed
515

Tancredi Orlando's avatar
Tancredi Orlando committed
516
```
edne's avatar
edne committed
517
518
>>> spesa_b = spesa_a
>>> spesa_b.append('carota')
Tancredi Orlando's avatar
Tancredi Orlando committed
519
520
521
>>> spesa_b
['mela', 'mango', 'carota']
```
edne's avatar
edne committed
522

Tancredi Orlando's avatar
Tancredi Orlando committed
523
```
edne's avatar
edne committed
524
525
526
>>> spesa_a
['mela', 'mango', 'carota']
```
edne's avatar
edne committed
527
528
529

----

edne's avatar
edne committed
530
## Insiemi (`set`)
Tancredi Orlando's avatar
Tancredi Orlando committed
531

Niccolò Izzo's avatar
Niccolò Izzo committed
532
- Come gli insiemi matematici
Tancredi Orlando's avatar
Tancredi Orlando committed
533
- **Non sono ordinati**
Tancredi Orlando's avatar
Tancredi Orlando committed
534
535
- Non contengono elementi duplicati

Tancredi Orlando's avatar
Tancredi Orlando committed
536
537
```
>>> frutta = {"mele", "pere", "zucchine", "mele"}
Niccolò Izzo's avatar
Niccolò Izzo committed
538
>>> frutta
edne's avatar
edne committed
539
{'mele', 'arance', 'pere'}
Tancredi Orlando's avatar
Tancredi Orlando committed
540
541
```

Tancredi Orlando's avatar
Tancredi Orlando committed
542
----
Niccolò Izzo's avatar
Niccolò Izzo committed
543

Tancredi Orlando's avatar
Tancredi Orlando committed
544
545
546
547
Supportano le operazioni insiemistiche

```
>>> frutta = {"mele", "pere", "zucchine", "mele"}
Niccolò Izzo's avatar
Niccolò Izzo committed
548
>>> verdure = {"zucchine", "verze", "coste", "porri"}
Tancredi Orlando's avatar
Tancredi Orlando committed
549
```
Tancredi Orlando's avatar
Tancredi Orlando committed
550

Tancredi Orlando's avatar
Tancredi Orlando committed
551
```
Tancredi Orlando's avatar
Tancredi Orlando committed
552
553
>>> frutta.union(verdure)
{'porri', 'verze', 'pere', 'zucchine', 'coste', 'mele'}
Tancredi Orlando's avatar
Tancredi Orlando committed
554
```
Tancredi Orlando's avatar
Tancredi Orlando committed
555

Tancredi Orlando's avatar
Tancredi Orlando committed
556
```
Niccolò Izzo's avatar
Niccolò Izzo committed
557
558
>>> frutta.intersection(verdure)
{'zucchine'}
Tancredi Orlando's avatar
Tancredi Orlando committed
559
```
Tancredi Orlando's avatar
Tancredi Orlando committed
560

Tancredi Orlando's avatar
Tancredi Orlando committed
561
```
Tancredi Orlando's avatar
Tancredi Orlando committed
562
563
>>> frutta.difference(verdure)
{'pere', 'mele'}
Tancredi Orlando's avatar
Tancredi Orlando committed
564
```
Tancredi Orlando's avatar
Tancredi Orlando committed
565

Tancredi Orlando's avatar
Tancredi Orlando committed
566
```
Tancredi Orlando's avatar
Tancredi Orlando committed
567
568
569
570
571
572
573
574
575
576
577
>>> verdure.difference(frutta)
{'verze', 'coste', 'porri'}
```

----

La sintesi è anche espressività

```
>>> frutta = {"mele", "pere", "zucchine", "mele"}
>>> verdure = {"zucchine", "verze", "coste", "porri"}
Tancredi Orlando's avatar
Tancredi Orlando committed
578
```
Tancredi Orlando's avatar
Tancredi Orlando committed
579

Tancredi Orlando's avatar
Tancredi Orlando committed
580
```
Tancredi Orlando's avatar
Tancredi Orlando committed
581
>>> frutta | verdure
Tancredi Orlando's avatar
Tancredi Orlando committed
582
{'porri', 'verze', 'pere', 'zucchine', 'coste', 'mele'}
Tancredi Orlando's avatar
Tancredi Orlando committed
583
```
Tancredi Orlando's avatar
Tancredi Orlando committed
584

Tancredi Orlando's avatar
Tancredi Orlando committed
585
```
Tancredi Orlando's avatar
Tancredi Orlando committed
586
587
>>> frutta & verdure
{'zucchine'}
Tancredi Orlando's avatar
Tancredi Orlando committed
588
```
Tancredi Orlando's avatar
Tancredi Orlando committed
589

Tancredi Orlando's avatar
Tancredi Orlando committed
590
```
Tancredi Orlando's avatar
Tancredi Orlando committed
591
>>> frutta - verdure
Tancredi Orlando's avatar
Tancredi Orlando committed
592
{'pere', 'mele'}
Tancredi Orlando's avatar
Tancredi Orlando committed
593
```
Tancredi Orlando's avatar
Tancredi Orlando committed
594

Tancredi Orlando's avatar
Tancredi Orlando committed
595
```
Tancredi Orlando's avatar
Tancredi Orlando committed
596
>>> verdure - frutta
Tancredi Orlando's avatar
Tancredi Orlando committed
597
{'verze', 'coste', 'porri'}
Niccolò Izzo's avatar
Niccolò Izzo committed
598
```
edne's avatar
edne committed
599

edne's avatar
edne committed
600
----
Tancredi Orlando's avatar
Tancredi Orlando committed
601

edne's avatar
edne committed
602
## Dizionari (`dict`)
Tancredi Orlando's avatar
Tancredi Orlando committed
603

edne's avatar
edne committed
604
- Associano ogni chiave ad un valore
Tancredi Orlando's avatar
Tancredi Orlando committed
605
- Le chiavi devono essere immutabili (stringhe, tuple)
Tancredi Orlando's avatar
Tancredi Orlando committed
606

edne's avatar
edne committed
607
```python
edne's avatar
edne committed
608
d = {
Tancredi Orlando's avatar
Tancredi Orlando committed
609
    "chiave": "valore",
Tancredi Orlando's avatar
Tancredi Orlando committed
610
    "nome":"Tancredi",
Tancredi Orlando's avatar
Tancredi Orlando committed
611
612
    "cognome":"Orlando",
    ('immutable', 'types'): ['are', 'cool']
Tancredi Orlando's avatar
Tancredi Orlando committed
613
614
615
    }
```

Tancredi Orlando's avatar
Tancredi Orlando committed
616
617
Si accede ai campi come si accede agli elementi di una lista, usando la chiave
al posto dell'indice.
edne's avatar
edne committed
618
619
620
621
622
623

```
>>> d['nome']
'Tancredi'
```

Tancredi Orlando's avatar
Tancredi Orlando committed
624
625
626
627
628
```
>>> print('these things ' + ' '.join(d[('immutable', 'types')])
these things are cool
```

edne's avatar
edne committed
629
---
Tancredi Orlando's avatar
Tancredi Orlando committed
630

Tancredi Orlando's avatar
Tancredi Orlando committed
631
# Controllo del flusso
edne's avatar
edne committed
632

Tancredi Orlando's avatar
Tancredi Orlando committed
633
634
----

edne's avatar
edne committed
635
## `if`
Tancredi Orlando's avatar
Tancredi Orlando committed
636

Tancredi Orlando's avatar
Tancredi Orlando committed
637
Se una condizione è vera esegue un blocco di codice.
edne's avatar
edne committed
638
639
640
641
642
643

```python
if 3 > 2:
    print('Condizione vera')
```

Niccolò Izzo's avatar
Niccolò Izzo committed
644
## Blocchi
Tancredi Orlando's avatar
Fixes.    
Tancredi Orlando committed
645

Tancredi Orlando's avatar
Tancredi Orlando committed
646
647
- Sono corpi di codice allineati con una spaziatura multipla coerente
- Per bontà agli dèi usate quattro spazi ed evitate le tabulazioni come la peste
Niccolò Izzo's avatar
Niccolò Izzo committed
648

edne's avatar
edne committed
649
Notes:
Tancredi Orlando's avatar
Tancredi Orlando committed
650
651
Dire perché qua stiamo usando `print` e non scrivendo il valore e basta come
prima.
edne's avatar
edne committed
652

Niccolò Izzo's avatar
Niccolò Izzo committed
653
----
edne's avatar
edne committed
654

edne's avatar
edne committed
655
## `else`
edne's avatar
edne committed
656

Tancredi Orlando's avatar
Tancredi Orlando committed
657
658
- Se la condizione di una istruzione `if` è falsa viene eseguito il blocco
  della istruzione `else` (se presente)
Niccolò Izzo's avatar
Niccolò Izzo committed
659

edne's avatar
edne committed
660
661
662
663
664
665
666
```python
if 3 > 2:
    print('Condizione vera')
else:
    print('Condizione falsa')
```

Tancredi Orlando's avatar
Tancredi Orlando committed
667
668
----

edne's avatar
edne committed
669
## `while`
Tancredi Orlando's avatar
Tancredi Orlando committed
670

Tancredi Orlando's avatar
Tancredi Orlando committed
671
672
673
- Valuta una espressione
- Se è vera esegue un blocco di codice
- Vai al primo punto
edne's avatar
edne committed
674

Tancredi Orlando's avatar
Tancredi Orlando committed
675
```
edne's avatar
edne committed
676
677
>>> x = 0
>>> while x < 3:
Tancredi Orlando's avatar
Tancredi Orlando committed
678
679
...     x = x + 1
...     print("ora x vale", x)
edne's avatar
edne committed
680
681
682
683
684
...
ora x vale 1
ora x vale 2
ora x vale 3
```
Tancredi Orlando's avatar
Tancredi Orlando committed
685

edne's avatar
edne committed
686
----
Tancredi Orlando's avatar
Tancredi Orlando committed
687

edne's avatar
edne committed
688
## `for`
edne's avatar
edne committed
689

Niccolò Izzo's avatar
Niccolò Izzo committed
690
- Esegue un blocco per ogni elemento di una sequenza
Tancredi Orlando's avatar
Tancredi Orlando committed
691

Tancredi Orlando's avatar
Tancredi Orlando committed
692
693
694
695
```
>>> for i in [0, 1, 2, 3, 4]:
...     print(i)
0 1 2 3 4
edne's avatar
edne committed
696
697
```

Tancredi Orlando's avatar
Tancredi Orlando committed
698
699
- La funzione `range()` genera sequenze da usare all'interno di istruzioni
  `for`
Niccolò Izzo's avatar
Niccolò Izzo committed
700

Tancredi Orlando's avatar
Tancredi Orlando committed
701
702
```
>>> for i in range(0, 5):
Niccolò Izzo's avatar
Niccolò Izzo committed
703
...    print(i)
Tancredi Orlando's avatar
Tancredi Orlando committed
704
0 1 2 3 4
Niccolò Izzo's avatar
Niccolò Izzo committed
705
706
```

edne's avatar
edne committed
707
----
edne's avatar
edne committed
708

Tancredi Orlando's avatar
Tancredi Orlando committed
709
## `break` e `continue`
edne's avatar
edne committed
710

Tancredi Orlando's avatar
Tancredi Orlando committed
711
712
713
714
715
- Sono entrambe istruzioni da usare all'interno di un ciclo, `while` o `for`
- Dopo una istruzione `break` tutto il ciclo è interrotto e la condizione non
  sarà più valutata
- Dopo una istruzione `continue` solo l'iterazione corrente è interrotta, il
  ciclo ripende a partire dalla valutazione della condizione
edne's avatar
edne committed
716

Tancredi Orlando's avatar
Tancredi Orlando committed
717
718
719
720
721
722
723
724
```
>>> for i in [0, 1, 2, 3, 4, 5, 6, 7]:
...     if i == 2:
...         continue
...     if i == 6:
...         break
...     print(i)
0 1 3 4 5
edne's avatar
edne committed
725
```
edne's avatar
edne committed
726

edne's avatar
edne committed
727
---
edne's avatar
edne committed
728

edne's avatar
edne committed
729
730
# Funzioni

edne's avatar
edne committed
731
----
edne's avatar
edne committed
732

Tancredi Orlando's avatar
Fixes.    
Tancredi Orlando committed
733
- Sono porzioni di codice a cui è assegnato un nome
Tancredi Orlando's avatar
Tancredi Orlando committed
734
735
736
737
- È possibile eseguire il codice di una funzione similmente a come si ottiene
  il valore contenuto da una variabile
- Permettono di riutilizzare il codice che scriviamo
- Si definiscono con l'istruzione `def`
edne's avatar
edne committed
738

Tancredi Orlando's avatar
Tancredi Orlando committed
739
740
741
742
```
>>> def say_hello():
...     print('Hello world!')
```
edne's avatar
edne committed
743

Tancredi Orlando's avatar
Tancredi Orlando committed
744
745
746
747
748
```
>>> say_hello()  # chiama la funzione
Hello world!
>>> say_hello()  # chiama la funzione nuovamente
Hello world!
edne's avatar
edne committed
749
750
```

Tancredi Orlando's avatar
Fixes.    
Tancredi Orlando committed
751
752
- Le funzioni possono ottenere dati in ingresso, e fornire dati in uscita
- Per tale capacità permettono la riusabilità del codice
edne's avatar
edne committed
753

Tancredi Orlando's avatar
Fixes.    
Tancredi Orlando committed
754
----
edne's avatar
edne committed
755

Tancredi Orlando's avatar
Tancredi Orlando committed
756
## Parametri
edne's avatar
edne committed
757

Tancredi Orlando's avatar
Tancredi Orlando committed
758
- La funzione può essere "predisposta" per ricevere parametri
Tancredi Orlando's avatar
Fixes.    
Tancredi Orlando committed
759
760
761
- I parametri sono i dati in ingresso di una funzione
- I parametri diventano variabili visibili all'interno della funzione per essere
  usati
Tancredi Orlando's avatar
Tancredi Orlando committed
762

Tancredi Orlando's avatar
Tancredi Orlando committed
763
## Valore di ritorno
edne's avatar
edne committed
764

Tancredi Orlando's avatar
Fixes.    
Tancredi Orlando committed
765
766
767
768
- Il valore di ritorno è ciò che fornisce in uscita la funzione, il proprio
  risultato
- Lo si specifica inserendo l'istruzione `return` seguita dal valore di ritorno
- La funzione termina subito dopo l'istruzione return
edne's avatar
edne committed
769

Tancredi Orlando's avatar
Fixes.    
Tancredi Orlando committed
770
----
edne's avatar
edne committed
771

Tancredi Orlando's avatar
Fixes.    
Tancredi Orlando committed
772
```
edne's avatar
edne committed
773
>>> def somma(a, b):
Tancredi Orlando's avatar
Fixes.    
Tancredi Orlando committed
774
775
776
777
...     return a + b
```

```
edne's avatar
edne committed
778
779
>>> somma(1, 2)
3
edne's avatar
edne committed
780
781
```

Tancredi Orlando's avatar
Fixes.    
Tancredi Orlando committed
782
783
784
785
786
787
788
```
>>> a, b = 3, 14
>>> c = somma(a, b)
>>> c
17
```

Tancredi Orlando's avatar
Tancredi Orlando committed
789
790
----

Tancredi Orlando's avatar
Tancredi Orlando committed
791
## Parametri di default
Tancredi Orlando's avatar
Tancredi Orlando committed
792

Tancredi Orlando's avatar
Tancredi Orlando committed
793
794
- Alcuni parametri possono essere opzionali
- Se non specificati assumono un valore di default
Tancredi Orlando's avatar
Tancredi Orlando committed
795

Tancredi Orlando's avatar
Tancredi Orlando committed
796
```
Tancredi Orlando's avatar
Tancredi Orlando committed
797
798
799
800
801
802
803
804
805
806
807
808
809
810
def f(a, b=3, c=6):
    print(a, b, c)
```

```
>>> f(1)
1 3 6

>>> f(1, 2)
1 2 6

>>> f(1, c=4)
1 3 4
```
edne's avatar
edne committed
811

edne's avatar
edne committed
812
----
edne's avatar
edne committed
813

Tancredi Orlando's avatar
Tancredi Orlando committed
814
## Scoping
edne's avatar
edne committed
815

Tancredi Orlando's avatar
Tancredi Orlando committed
816
817
818
819
820
821
- 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
edne's avatar
edne committed
822

edne's avatar
edne committed
823
----
edne's avatar
edne committed
824

Tancredi Orlando's avatar
Tancredi Orlando committed
825
826
827
828
829
```
>>> x = 'globale'
>>> def f():
...     x = 'locale'
```
edne's avatar
edne committed
830

Tancredi Orlando's avatar
Tancredi Orlando committed
831
832
833
834
835
```
>>> f()
>>> print(x)
globale
```
Niccolò Izzo's avatar
Niccolò Izzo committed
836

Tancredi Orlando's avatar
Tancredi Orlando committed
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
- 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
Niccolò Izzo's avatar
Niccolò Izzo committed
854
855
```

Tancredi Orlando's avatar
Tancredi Orlando committed
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
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
```
edne's avatar
edne committed
888

edne's avatar
edne committed
889
----
edne's avatar
edne committed
890

edne's avatar
edne committed
891
892
## None

Tancredi Orlando's avatar
Fixes.    
Tancredi Orlando committed
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
- Equivale al `NULL` di C
- Una funzione ritorna `None` se priva di `return`
- Una variabile si può confrontare a None con l'istruzione di comparazione `is`

```
>>> def f():
...     print('funzione')
...     return None
```

```
>>> f()
funzione
>>> x = f()
>>> x
None
```

```
>>> if x is None:
...    print('esatto!')
esatto!
```
edne's avatar
edne committed
916

edne's avatar
edne committed
917
---
edne's avatar
Moduli    
edne committed
918
919
920

# Moduli

edne's avatar
edne committed
921
----
edne's avatar
Moduli    
edne committed
922

Tancredi Orlando's avatar
Fixes.    
Tancredi Orlando committed
923
924
925
926
- I file contenenti codice Python hanno estensione `.py`
- Ogni file è un **modulo**
- È possibile importare variabili, funzioni e classi da altri moduli con
  l'istruzione `import`
edne's avatar
Moduli    
edne committed
927

Tancredi Orlando's avatar
Fixes.    
Tancredi Orlando committed
928
929
930
931
932
933
934
935
936
937
938
939
940
- modulo.py
  ```
  default_lim = 3
  def conta(lim=default_lim):
      for x in range(lim):
          print(x)
  ```
- programma.py
  ```
  import modulo
  x = modulo.default_lim + 2
  modulo.conta(x)
  ```
edne's avatar
Moduli    
edne committed
941

edne's avatar
edne committed
942
----
edne's avatar
Moduli    
edne committed
943

Tancredi Orlando's avatar
Fixes.    
Tancredi Orlando committed
944
945
946
947
- È possibile importare solo alcuni elementi da un modulo con la sintassi
  `from <modulo> import <oggetto>`
- Aiuta la leggibilità del codice
- Si omette il modulo di provenienza
Tancredi Orlando's avatar
Fixes.    
Tancredi Orlando committed
948

Tancredi Orlando's avatar
Fixes.    
Tancredi Orlando committed
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
- modulo.py
  ```
  default_lim = 3
  def conta(lim=default_lim):
      for x in range(lim):
          print(x)
  ```
- programma.py
  ```
  from modulo import default_lim, conta
  x = default_lim + 2
  conta(x)
  ```

----

Il codice posto nello scope del modulo è comunque eseguito, anche se sono
importati alcuni elementi con la sintassi `from ... import`.

- modulo.py
  ```
  a = 'variabile'
  def f():
      print('funzione')
  print('modulo')
Tancredi Orlando's avatar
Tancredi Orlando committed
974
  ```
Tancredi Orlando's avatar
Fixes.    
Tancredi Orlando committed
975
976
977
978
979
980
- dalla REPL
  ```
  >>> from modulo import f
  modulo
  >>> f()
  funzione
Tancredi Orlando's avatar
Tancredi Orlando committed
981
  ```
edne's avatar
Moduli    
edne committed
982

edne's avatar
edne committed
983
----
edne's avatar
Moduli    
edne committed
984

Tancredi Orlando's avatar
Fixes.    
Tancredi Orlando committed
985
986
È possibile eseguire del codice solo se il modulo è eseguito direttamente
e non è stato importato (o il contrario)
edne's avatar
Moduli    
edne committed
987
988
989

```python
if __name__ == '__main__':
Tancredi Orlando's avatar
Fixes.    
Tancredi Orlando committed
990
    print('Programma eseguito direttamente')
edne's avatar
Moduli    
edne committed
991
else:
Tancredi Orlando's avatar
Fixes.    
Tancredi Orlando committed
992
    print('Questo modulo è stato importato')
edne's avatar
Moduli    
edne committed
993
```
edne's avatar
edne committed
994

Tancredi Orlando's avatar
Fixes.    
Tancredi Orlando committed
995
996
997
998
- La variabile `__name__` contiene il nome del modulo corrente
- Se un modulo è eseguito direttamente la variabile `__name__` assume valore
`__main__`

edne's avatar
edne committed
999
---
edne's avatar
edne committed
1000

edne's avatar
edne committed
1001
1002
1003
1004
# Input e Output

----

Tancredi Orlando's avatar
Fixes.    
Tancredi Orlando committed
1005
1006
1007
- Purtroppo a volte è necessario interagire con l'utente
- È possibile ottenere un valore dall'utente
- È possibile accedere a un file presente sul disco
edne's avatar
edne committed
1008

edne's avatar
edne committed
1009
1010
----

Tancredi Orlando's avatar
Fixes.    
Tancredi Orlando committed
1011
## Formattazione dell'output
edne's avatar
edne committed
1012
1013

```
Tancredi Orlando's avatar
Fixes.    
Tancredi Orlando committed
1014
1015
1016
1017
1018
>>> s = 'Corsi {} {}'
>>> s.format('Python', '2017')
'Corsi Python 2017'
>>> s.format('Linux', 'base')
'Corsi Linux base'
edne's avatar
edne committed
1019
1020
```

Tancredi Orlando's avatar
Fixes.    
Tancredi Orlando committed
1021
1022
1023
1024
1025
```
>>> s = 'Corsi {argomento} {tipo}'
>>> s.format(tipo='avanzati', argomento='antani')
'Corsi antani avanzati'
```
edne's avatar
edne committed
1026

edne's avatar
edne committed
1027
----
edne's avatar
edne committed
1028

Tancredi Orlando's avatar
Fixes.    
Tancredi Orlando committed
1029
## Input dall'utente
edne's avatar
edne committed
1030

Tancredi Orlando's avatar
Fixes.    
Tancredi Orlando committed
1031
1032
1033
1034
1035
1036
```
>>> a = input()
asd
>>> a
'asd'
```
edne's avatar
edne committed
1037

Tancredi Orlando's avatar
Fixes.    
Tancredi Orlando committed
1038
1039
1040
1041
1042
```
>>> nome = input("Inserisci il tuo nome: ")
Gattuso
>>> 'Il tuo nome è {}.'.format(nome)
'Il tuo nonme è Gattuso.'
edne's avatar
edne committed
1043
1044
```

edne's avatar
edne committed
1045
----
edne's avatar
edne committed
1046

Niccolò Izzo's avatar
Niccolò Izzo committed
1047
## Aprire i file
edne's avatar
edne committed
1048

Niccolò Izzo's avatar
Niccolò Izzo committed
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
```python
f = open("documento.txt", "w")
f.write("contenuto")
f.close()
```


- `open(filename, mode)` ritorna un riferimento al file
- Il parametro `mode` specifica la  modalità

| mode  | descrizione                     |
| :---- | :------------------------------ |
| r     | Apertura in sola lettura        |
| w     | Apertura in sola scrittura      |
| r+    | Apertura in lettura e scrittura |
| a     | Scrittura in coda               |

----

## Usare i file

- Per scrivere su un file
```
>>> f = open("documento.txt", "w")
>>> f.write("Contenuti serissimi.")
20
>>> f.close()
```
- Per leggere da un file
```
>>> f = open("documento.txt", "r")
>>> f.read()
'Contenuti serissimi.'
>>> f.close()
```
- I metodi `readline` e `writeline` leggono e scrivono una riga alla volta
- Ricordiamoci di chiudere sempre il file con la funzione `close()`

----

## Una scorciatoia

```python
with open("documento.txt", "w") as f:
	f.write("contenuto")
```

- All'interno del blocco, `f` è un riferimento al file
- Non serve chiudere esplicitamente
- Se vengono sollevati errori o eccezioni il file viene chiuso

----

## Guardiamoci le spalle

- Cosa succede apriamo un file che non esiste?

```
>>> f = open("documento.rtf", "r")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
FileNotFoundError: [Errno 2] No such file or directory ...
```
- L'interprete solleva un errore
- Abbiamo la possibilità di prevenire un problema!

----

## Errori

- Sono condizioni eccezionali che possono verificarsi
- Vanno gestite con blocchi `try ... except`
```
>>> try:
...     f = open("documento.txt", "r")
... except FileNotFoundError:
...     print("Acciderba, questo file non esiste! Lo creo.")
...     f = open("documento.txt", "w")
```
- Possiamo lanciarli a nostra volta
```
>>> raise Exception("No internet connection!")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
Exception: No internet connection!
```

----

## `import this`


----

## Nella prossima puntata

- Programmazione funzionale
  - Lambda
  - List comprehensions
  - Generatori
- Programmazione orientata agli oggetti
  - Classi
  - Metodi
  - Ereditarietà

----
edne's avatar
edne committed
1155
1156
1157
1158
1159

# Thank you!

Queste slides sono sotto licenza Creative Commons<br>
Attribution-ShareAlike 3.0 Unported
Tancredi Orlando's avatar
Tancredi Orlando committed
1160

Niccolò Izzo's avatar
Niccolò Izzo committed
1161
## [poul.org](https://www.poul.org)