Accademia:Funzioni: differenze tra le versioni

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
(creazione pagina funzioni)
(Nessuna differenza)

Versione delle 18:40, 16 feb 2011

Document-page-setup.png Attenzione: questo articolo è ancora incompleto e in fase di scrittura da parte del suo autore.

Sentitevi liberi di contribuire, proponendo modifiche alla guida tramite l'apposita pagina di discussione, in modo da non interferire con il lavoro portato avanti sulla voce. Per altre informazioni si rimanda al template.


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 fà 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



Tuxerrante