La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

TEORIE E TECNICHE DEL RICONOSCIMENTO Python: Debugging, 2: Understanding Python better.

Presentazioni simili


Presentazione sul tema: "TEORIE E TECNICHE DEL RICONOSCIMENTO Python: Debugging, 2: Understanding Python better."— Transcript della presentazione:

1 TEORIE E TECNICHE DEL RICONOSCIMENTO Python: Debugging, 2: Understanding Python better

2 Errori semantici Molti errori semantici sono causati da aspetti del linguaggio di programmazione usato che non conosciamo – Soluzione: cercare di capire meglio cosa aspettarsi

3 Esempio: condizionali >>> animals = ['cat', 'dog'] >>> if 'cat' in animals:... print(1)... elif 'dog' in animals:... print(2)... 1 >>> animals = ['cat', 'dog'] >>> if 'cat' in animals:... print(1)... if 'dog' in animals:... print(2)

4 Funzioni Essenziali per – rendere il codice che scriviamo leggibile – assicurare che lo stesso comportamento si ripeta ad ogni chiamata

5 Esempio import re def get_text(file): """Read text from a file, normalizing whitespace and stripping HTML markup.""" text = open(file).read() text = re.sub(r' ', ' ', text) text = re.sub('\s+', ' ', text) return text

6 More readability: Docstring import re def get_text(file): """Read text from a file, normalizing whitespace and stripping HTML markup.""" text = open(file).read() text = re.sub(r' ', ' ', text) text = re.sub('\s+', ' ', text) return text | >>> help(get_text) | Help on function get_text in module __main__: | | get(text) | Read text from a file, normalizing whitespace and stripping HTML markup.

7 Funzioni: errori possibili L’uso di funzioni pero’ puo’ anche causare certi errori, in particolare nell’uso dei parametri

8 Funzioni: parametri >>> def monty(x): return x >>> monty(1) 1 >>> def monty(): return 'Monty Python' >>> monty() 'Monty Python'

9 Ma: >>> def monty(x): return x >>> monty() Traceback (most recent call last): File " ", line 1, in monty() TypeError: monty() takes exactly 1 argument (0 given)

10 Funzioni: passaggio di valori In Python, i valori sono passati alle funzioni usando un meccanismo chiamato call-by-value Nel caso di valori scalari, quel che succede e’ normalmente quello che ci si aspetterebbe Ma non e’ necessariamente cosi’ nel caso di oggetti strutturati (liste, etc)

11 Call-by-value >>> def set_up(word, properties):... word = 'lolcat'... properties.append('noun')... properties = 5... >>> w = '' >>> p = [] >>> set_up(w, p) >>> w '' >>> p ['noun']

12 Call-by-value: stringhe >>> w = '' >>> word = w >>> word = 'lolcat' >>> w ''

13 Call-by-value: liste >>> p = [] >>> properties = p >>> properties.append('noun') >>> properties = 5 >>> p ['noun']

14 Scopo delle variabili: LGB Quando una variabile viene usata all’interno di una funzione, Python ne cerca il valore usando la regola LGB: locale, poi globale, poi built-in

15 Scopo delle variabili: LGB >>> z = 4 >>> def monty(): return z >>> monty() 4 >>> z = 4 >>> def monty(): z = 3 return z >>> monty() 3 >>> z 4

16 Tipo dei parametri >>> def tag(word):... if word in ['a', 'the', 'all']:... return 'det'... else:... return 'noun'... >>> tag('the') 'det' >>> tag('knight') 'noun' >>> tag(["'Tis", 'but', 'a', 'scratch']) [1] 'noun'

17 Controllo del tipo dei parametri usando assert: >>> def tag(word):... assert isinstance(word, basestring), "argument to tag() must be a string"... if word in ['a', 'the', 'all']:... return 'det'... else:... return 'noun'

18 Funzioni come argomenti e lambdas >>> sent = ['Take', 'care', 'of', 'the', 'sense', ',', 'and', 'the',... 'sounds', 'will', 'take', 'care', 'of', 'themselves', '.'] >>> def extract_property(prop):... return [prop(word) for word in sent]... >>> extract_property(len) [4, 4, 2, 3, 5, 1, 3, 3, 6, 4, 4, 4, 2, 10, 1] >>> def last_letter(word):... return word[-1] >>> extract_property(last_letter) ['e', 'e', 'f', 'e', 'e', ',', 'd', 'e', 's', 'l', 'e', 'e', 'f', 's', '.'] >>> extract_property(lambda w: w[-1]) ['e', 'e', 'f', 'e', 'e', ',', 'd', 'e', 's', 'l', 'e', 'e', 'f', 's', '.']

19 Uso di funzioni nelle funzioni built-in >>> sorted(sent) [',', '.', 'Take', 'and', 'care', 'care', 'of', 'of', 'sense', 'sounds', 'take', 'the', 'the', 'themselves', 'will'] >>> sorted(sent, cmp) [',', '.', 'Take', 'and', 'care', 'care', 'of', 'of', 'sense', 'sounds', 'take', 'the', 'the', 'themselves', 'will'] >>> sorted(sent, lambda x, y: cmp(len(y), len(x))) ['themselves', 'sounds', 'sense', 'Take', 'care', 'will', 'take', 'care', 'the', 'and', 'the', 'of', 'of', ',', '.']

20 Altre informazioni Resto del capitolo 4 codeacademy


Scaricare ppt "TEORIE E TECNICHE DEL RICONOSCIMENTO Python: Debugging, 2: Understanding Python better."

Presentazioni simili


Annunci Google