Accademia:Funzioni

Definire una funzione

Vediamo ora, come possiamo creare una nostra funzione.

Per prima cosa diamo una letta alla [bibbia].


#! /usr/bin/env python3.1

def stampa():  # definisco la funzione
	""" questa funzione non ha parametri e non fa altro che stampare un messaggio	"""
	print(" Ti parlo dall'interno della funzione! ")
	
stampa() # chiamo (invoco) la funzione

Output

Ti parlo dall'interno della funzione!


#! /usr/bin/env python3.1

def stampa(a):
	""" stampa il parametro passatole """
	print(" Mi hai passato :  {}".format(a))

stampa("parametro")

Mi hai passato : parametro

Funzioni più complesse

separa.py

#! /usr/bin/env python3.1
# passo un numero qualsiasi di parametri, definendo un separatore
def separa(*args,sep=' '):
	return sep.join(args)

print( separa('we','ciao','come','stai','?') )

we ciao come stai ?


reg.py

#! /usr/bin/env python3.1

"""When a final formal parameter of the form **name is present, it receives a dictionary (see Mapping Types — dict)
 containing all keyword arguments except for those corresponding to a formal parameter. This may be combined with 
a formal parameter of the form *name (described in the next subsection) which receives a tuple containing 
the positional arguments beyond the formal parameter list. (*name must occur before **name.)
 For example, if we define a function like this: """

def reg(tipo,*nomi,**campi):
	print("\n\n Hai scelto una registrazione di tipo: {0}".format(tipo)) # primo parametro
	print(" Parametri : ",end=' ')
	for i in nomi:
		print(i, end=', ')		# stampa la tupla di parametri nomi
	print("\n {0} \n\t Dati utente:  ".format("-"*30) )
	k = sorted(campi.keys())	# ordina le chiavi per nome
	for kw in k:					# e stampale a fianco dei loro valori
		print("{0} : {1}".format(kw,campi[kw]))

reg('hosting', 'www.python.com', '1 year', user='Alessandro', email='tuxerrante@boh.it', pas='1234')
reg('Fast Food','Il re dei paninazzi','pranzo',name='Gino',surname='Score',time='6 months')


Output
 Hai scelto una registrazione di tipo: hosting
 Parametri :  www.python.com, 1 year, 
 ------------------------------ 
	 Dati utente:  
email : tuxerrante@boh.it
pas : 1234
user : Alessandro


 Hai scelto una registrazione di tipo: Fast Food
 Parametri :  Il re dei paninazzi, pranzo, 
 ------------------------------ 
	 Dati utente:  
name : Gino
surname : Score
time : 6 months


check.py

#! /usr/bin/env python3.1
""" gestione parametri preassegnati """
print()
def checkOk (prompt, tent=3, msg="Yes o No per favore!"):
	while True:
		ok = input (prompt)
		# x in s :	True if an item of s is equal to x, else False 	
		if ok.lower() in ('y','yes'): # se la risposta, trasformata in minuscolo, è tra 'y' o 'yes'
			return True 		# restituisce vero
		elif ok.lower() in ('n','no'):
			return False
		# risposta sbagliata
		print(msg)
		tent-=1
		if tent<=0:
			raise IOError (' impara a usare una tastiera!!')
				
checkOk(" Rispondi con un 'yes' o un 'no' : ")

Out
 Rispondi con un 'yes' o un 'no' : B
Yes o No per favore!
 Rispondi con un 'yes' o un 'no' : Z
Yes o No per favore!
 Rispondi con un 'yes' o un 'no' : U
Yes o No per favore!
Traceback (most recent call last):
  File "fib.py", line 57, in <module>
    checkOk(" Rispondi con un 'yes' o un 'no' : ")
  File "fib.py", line 55, in checkOk
    raise IOError (' impara a usare una tastiera!!')
IOError:  impara a usare una tastiera!!
 Rispondi con un 'yes' o un 'no' : Y


------------------
(program exited with code: 0)
Press return to continue



Lezione 5


Tuxerrante