User Tools

Site Tools


appunti3s:funzioni_in_python

Le funzioni in Python

  • Quiz: Avete mai usato una funzione matematica? Per che cosa sono utili le funzioni matematiche?
  • Quiz: In che modo si può rappresentare una funzione matematica per descriverla agli altri?

Prerequisiti

Cosa faremo?

Introduzione

Per capire cosa sia una funzione in un programma basta pensare ad una funzione matematica, dove c'è la variabile indipendente x e quella dipendente y. Quest'ultima variabile di solito è il risultato che si trova elaborando la prima variabile, come y=f(x). Ad esempio, la funzione y=x2 calcola il quadrato dei valori forniti tramite x. Come accade nelle funzioni matematiche, anche le funzioni del programma hanno le parentesi tonde dove possono essere contenuti gli argomenti da utilizzare. Alcune funzioni possono essere prive di argomenti, ma le parentesi si devono scrivere lo stesso.

In informatica, chi scrive programmi, quando vuole, può chiedere aiuto alle funzioni per eseguire automaticamente un elaborazione, evitando di dover scrivere il diagramma di flusso e di tradurlo in codice. Questo perché il codice è già stato scritto in passato da qualcun altro (o da lui stesso) e può essere riutilizzato in diversi programmi.

Ad ogni funzione viene affidata l'esecuzione di un compito specifico e ogni volta che si deve svolgere quel compito il programmatore chiama in esecuzione quella funzione.

  • Quiz: Per inserire dati dalla tastiera si è già usata una funzione, quale?

Funzioni built-in

len()

La funzione raw_input() è una funzione che è sempre disponibile per l'uso, in questo caso si dice che è una funzione integrata (built-in). Un'altra funzione built-in è len(), che misura la lunghezza di una variabile.

10.py
parola = raw_input("inserire una parola\n")
numero = len(parola) # assegnazione che contenente una chiamata di funzione
print "I caratteri che compongono la parola che hai inserito sono", numero

Quando nel programma si incontra il nome di una funzione, è come se si trova un comando. Scrivere il nome di una funzione serve a chiedere di eseguire quella funzione, perciò la presenza del nome della funzione viene definita chiamata della funzione. In quel momento, l'esecuzione del programma viene sospesa per eseguire la funzione, poi, quando la funzione termina, si riprende il programma. Nell'ultimo esempio, prima di effettuare l'assegnazione deve essere eseguita la funzione len(). Al termine len() produce un risultato che viene memorizzato dentro la variabile numero. In termini tecnici si dice che len() restituisce un risultato.

  • A chi viene restituito questo risultato? (Chi ne aveva bisogno?)

round()

Nel prossimo esempio si vuole calcolare la media di due voti e arrotondare il valore se c'e' la virgola. In questo esempio il risultato prodotto dalla funzione round() non viene memorizzato ma solo mostrato con print.

11.py
numero1 = input("inserire un primo voto\n")
numero2 = input("inserire un secondo voto\n")
media=(numero1+numero2)/2.0  # divisione in virgola mobile
print "la media vale", media
print "arrotondato a", round(media)

type()

Un altro esempio dimostra l'uso di type(), usata per conoscere il tipo di dato (numerico o testuale) contenuto in una variabile. Per creare una variabile che contiene testo (alfanumerico) useremo raw_input(). Non importa il contenuto. Può essere testuale, numerico o misto…

12.py
numero1 = raw_input("inserire un primo numero\n")
numero2 = input("inserire un secondo numero\n")
print "Le variabili usate si chiamano: numero1 numero2"
print "I VALORI contenuti nelle variabili sono:", numero1, numero2
print "I TIPI DI DATO delle variabili sono:", type(numero1), type(numero2)

Dal risultato si capisce che usando raw_input() si ottiene sempre un tipo 'str' (stringa di testo) che non è adatto ad effettuare calcoli con i numeri. Basta ricordare che per leggere i numeri eravamo costretti ad usare input(). Il motivo è che raw_input() restituisce un tipo 'str' mentre input() un valore numerico (tipo 'float' oppure 'int').

int()

Nel prossimo esempio risolveremo il problema che avevamo precedentemente incontrato nella lettura dei numeri dalla tastiera, usando una funzione che trasforma le variabili di tipo 'str' in variabili di tipo 'int'. Grazie ad una funzione del genere si può usare raw_input() sia per leggere testo che per leggere i numeri. La funzione si chiama int() e restituisce sempre una variabile intera

13.py
numero1 = raw_input("inserire un numero\n")
numero2 = int(numero1)  # trasformazione del tipo
print "Le variabili usate si chiamano: numero1 numero2"
print "I VALORI contenuti nelle variabili sono:", numero1, numero2
print "I TIPI DI DATO delle variabili sono:", type(numero1), type(numero2)

Dal risultato si capisce che numero1 e numero2 appaiono simili nel contenuto, ma diverse nel tipo di dato: numero1 non è una variabile adatta a fare i calcoli mentre numero2 lo è.

Programmatori e sviluppatori

I professionisti della programmazione potrebbero essere divisi in due grandi categorie:

  • gli sviluppatori di nuove funzioni, che creano funzioni o librerie di funzioni;
  • i programmatori di applicazioni, che usano le funzioni create da qualcun altro (cioé dagli sviluppatori).
  • Quiz: Tu a quale categoria pensi di appartenere?
Ovviamente questa suddivisione non va presa alla lettera perché esiste anche chi fa entrambe le cose, ma probabilmente, per iniziare a programmare, è più semplice cercare di capire prima come si usa una funzione già pronta e solo dopo di provare a crearne una da soli.

Funzione di funzione

La funzione len() potrebbe essere chiamata anche in un altro modo.

10bis.py
numero = len(raw_input("inserire una parola\n"))
print "I caratteri che compongono la parola che hai inserito sono", numero

Confrontare questa versione con la precedente versione (file 10.py).

Nella seconda versione le parentesi sono all'interno di altre parentesi: ((...)). Significa che una funzione si trova dentro un'altra funzione. Quale viene eseguita per prima? Come in matematica, anche qui si esegue prima tutto quello che si trova dentro le parentesi più interne…

In quest'ultimo caso è molto più difficile leggere il codice del programma, ma c'è un vantaggio: per capirlo provare a contare quante sono le variabili usate nella prima versione e quante nella seconda. Se uso meno variabili significa che ho risparmiato un po' di memoria…

  • Esercizio: provare a modificare il codice del programma 13.py in modo che non sia necessario usare la variabile numero2.

Altre funzioni

Non tutte le funzioni sono sempre disponibili. Se la funzione non è bulti-in vuol dire che si trova in un modulo esterno che, prima di poter essere usato, deve essere “importato” nel programma. Il seguente esempio usa la funzione radice quadrata (square root) che deve essere importata dal modulo “math”.

math.sqrt()

Attenzione a:

  1. aggiungere import,
  2. aggiungere il nome del modulo davanti al nome della funzione.
14.py
import math
numero = int(raw_input("inserire un numero positivo per calcolarne la radice quadrata\n"))
print math.sqrt(numero)
  • Esercizio tradurre con le proprie parole il significato dell'istruzione int(raw_input(ecc…))
  • Esercizio: togliere “math.” per provare che non funziona.
  • Esercizio: eseguire questo codice da LINEA DI COMANDO (terminale) e spiegare a cosa serve
    • >>> import math
      >>> dir(math)

math.pow()

Le funzioni possono avere anche più di un argomento tra parentesi. Ad esempio, la funzione che calcola l'elevamento a potenza xydeve necessariamente conoscere sia la base (il numero da elevare) che l'esponente (la potenza).

15.py
import math
base = int(raw_input("inserire un numero positivo\n"))
esponente = int(raw_input("inserire ora l'esponente a cui deve essere elevato\n"))
print "il risultato di", base, "elevato", esponente, "vale", math.pow(base, esponente)
  • Esercizio: modificare il programma per consentire l'inserimento di numeri in virgola mobile.

Vantaggi

Perché il programmatore usa le funzioni?

Sarebbe più facile scrivere da soli un programma che calcola l'elevamento a potenza, oppure è più semplice usare la funzione math.pow()?

Application Programming Interface

Come può un programmatore di applicazioni imparare ad usare funzioni che non conosce?

Ogni volta che si desidera imparare ad usare un nuovo gruppo di funzioni si deve cercare la cosiddetta API (Application Programming Interface) che descrive le funzioni utilizzabili da un programmatore. In particolare, l'API non spiega come è stata costruito una funzione, ma solo come va usata.

  • Quiz: Per usare un nuovo strumento, come un motorino, devo sapere come funziona oppure come l'hanno costruito?

Convenzioni

D'ora in avanti gli identificatori delle funzioni e delle variabili costituiti da più parole si riconosceranno dall'iniziale minuscola ed eventuali altre parole separate con un _ underscore.

una_variabile=3

una_funzione()

Esercizi

riepilogare i nomi delle funzioni usate in questo capitolo in una tabella e spiegare a cosa servono

esempi con

math.pow()

math.floor()

appunti3s/funzioni_in_python.txt · Last modified: 2020/06/08 22:19 by 127.0.0.1