Topic: Chiarimenti su funzioni ( e valore di ritorno)  (Letto 1680 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline Led

  • python unicellularis
  • *
  • Post: 12
  • Punti reputazione: 0
    • Mostra profilo
Chiarimenti su funzioni ( e valore di ritorno)
« il: Luglio 18, 2007, 15:45 »
Dopo aver afferrato semplici funzioni quali if, while, mi appresto a studiare queste stramaledettissime ed rompibip di funzioni!Col C mi sono bloccato alle funzioni da molti mesi, e anche quila vedo dura, ma spero che voi mi illuminiate. La cosa è semplice...non le riesco a capirle!!!!Ciò che ho capito è che una funzione permette di creare un blocco di codice, che può essere chiamato quante volte si vuole. Fin qui tutto chiaro, ma ciò che non riesco proprio a capire è:
-Il ritorno di una funziona, ovvero il famoso return ;
-E il significato della variabile presente tra le "()"...
Chi mi potrebbe spiegare con paroli semplici, e magari con qualche esempio facile, queste benedettissime funzioni?Grazie anticipamente a tutti e ciao!

Offline Emanuele

  • python erectus
  • ***
  • Post: 163
  • Punti reputazione: 0
    • Mostra profilo
Re: Chiarimenti su funzioni ( e valore di ritorno)
« Risposta #1 il: Luglio 18, 2007, 16:02 »
Ciao Led, ti spiego brevemente e semplicemente.

Allora per definire la sintassi di una funzione si usa:

def nome_funzione()

le parentesi tonde puo lasciare vuote o assegnarli una variabile se necessario, quindi quando gli assegni una variabile la funzione accetterà un unico paramentro con la variabile indicata nelle parentesi tonde.

Invece il famoso return non è obbligatorio ma si utilizza quando si vuole terminare la funzione con un valore desiderato.

Spero di non aver scritto qualke mink..... :)

Offline Led

  • python unicellularis
  • *
  • Post: 12
  • Punti reputazione: 0
    • Mostra profilo
Re: Chiarimenti su funzioni ( e valore di ritorno)
« Risposta #2 il: Luglio 18, 2007, 16:16 »
1)La funzione accetterà un unico paramentro con la variabile indicata nelle parentesi tonde:
ma tutto ciò per fare cosa?Cioè perchè bisogna mettere tra "()" un valore?Quale è il suo scopo?

2)return non è obbligatorio ma si utilizza quando si vuole terminare la funzione con un valore desiderato:
Sorry ma continuo a non capire :(
Grazie ancora e scusate la niubbiagine (secondo me in questo topic si toccheranno le 25 pagine più o meno xDDDD)

Offline Emanuele

  • python erectus
  • ***
  • Post: 163
  • Punti reputazione: 0
    • Mostra profilo
Re: Chiarimenti su funzioni ( e valore di ritorno)
« Risposta #3 il: Luglio 18, 2007, 16:48 »
Tranquillo anche io piano piano me le son dovute far entrare in testa. Cmq guarda se qui puo esserti di aiuto questo tutorial http://www.gentoo.it/Programmazione/byteofpython/functions.html#def-function

Offline Led

  • python unicellularis
  • *
  • Post: 12
  • Punti reputazione: 0
    • Mostra profilo
Re: Chiarimenti su funzioni ( e valore di ritorno)
« Risposta #4 il: Luglio 18, 2007, 16:59 »
Finalmente mi stanno entrando in testa, grazie dell'ottima guida, veramente chiara e semplice ;)
Mentre per il comando return?E' facoltativo?Conviene utilizzarlo?Grazie e ciao!

Offline Markon

  • python sapiens sapiens
  • *
  • moderatore
  • Post: 4.104
  • Punti reputazione: 5
    • Mostra profilo
    • Neolithic
Re: Chiarimenti su funzioni ( e valore di ritorno)
« Risposta #5 il: Luglio 18, 2007, 17:00 »
Ciao, guarda questo piccolo esempio:
Citazione
1)La funzione accetterà un unico paramentro con la variabile indicata nelle parentesi tonde:

def criptaesalva(user,pwd,db):
  m=md5.new(pwd)
  db[user]=m.digest()

db = dbm.open("dbm", "c")
for nome in ("Marco","Gennaro","Antonio"):
  criptaesalva(nome,raw_input("scegli una password"),db)
db.close()

La funzione criptaesalva prende tre parametri "user, pwd, db".
Innanzitutto:
La variabile "m" istanzia l'oggetto md5 con metodo .new (come si fa per aprire i file insomma :) ) e prende come parametro pwd, perchè tramite questo metodo viene criptata una stringa.
Avremmo potuto scrivere anche :
m = md5.new()
m.update(pwd)
Dopo ciò c'è db[user] che funge da dizionario: [
tt]db[NomeUtente] = "Password"[/tt]
ma la vera cosa interessante del codice (e per questo ringrazio Manzo :) ) è il ciclo for che richiama la funzione criptaesalva:
Per un valore che vedi in ("Marco","Gennaro","Antonio"):
          chiama la funzione criptaesalva con parametri(nome, raw_input(".."), db),
          dove nome corrisponde ai tre valori che si trovano nel ciclo for (Marco, Gennaro, Antonio)
          e dove pwd viene sostituito con l'istruzione raw_input(senza bisogno che venisse dichiarata 2 volte)
          e db serve a inserire nomi utenti e password nel DB

Spero di essere stato chiaro  :dont-know:

Per quanto riguarda il return, questo serve a ritornare un valore all'interno di una funzione.
Teoricamente puoi usare anche l'istruzione print, però quando richiami la funzione non puoi dare print funzione(..... , ....), altrimenti ti dà un bel None finale

Offline Led

  • python unicellularis
  • *
  • Post: 12
  • Punti reputazione: 0
    • Mostra profilo
Re: Chiarimenti su funzioni ( e valore di ritorno)
« Risposta #6 il: Luglio 18, 2007, 17:08 »
Per chiarirmi le idee ho fatto un esempio:
def addizione (a, b):
    c = a + b
    print c
numero1 = input()
numero2 = input()
addizione (numero1, numero2)
Credo finalmente di aver capito queste diamine di funzioni  :)
Mentre per il return continuo a non capire il suo significato...sareste così gentili da rispiegarmelo?Grazie!

Offline MiPnamic

  • python erectus
  • ***
  • Post: 128
  • Punti reputazione: 0
    • Mostra profilo
    • MiPnamic contaminated area | Comunicare; Conoscere; Crescere; Condividere;
Re: Chiarimenti su funzioni ( e valore di ritorno)
« Risposta #7 il: Luglio 18, 2007, 17:25 »
def risultatosomma(a, b):
    c = a+b
    return c

c = risultatosomma(a, b)

è un esempio totalmente inutile ma rende idea ^_^ (Credo/Spero)

Offline manzo

  • python neanderthalensis
  • *
  • moderatore
  • Post: 478
  • Punti reputazione: 1
    • Mostra profilo
Re: Chiarimenti su funzioni ( e valore di ritorno)
« Risposta #8 il: Luglio 18, 2007, 17:33 »
il return serve appunto quando vuoi che la funzione ti restituisca qualcosa, puoi pensare la funzione come una "macchinetta magica" con un buco dove metti degli oggetti, te li elabora in qualche modo e da un altro buco ti sputa fuori (return) qualcos'altro; guarda questo esempio:

def quadrato(x):
  print "ora calcolo il quadrato di",x
  return x*x

print quadrato(2)
a=3
b=quadrato(a)
print b

grazie alla funzione non ci serve sapere in che modo venga fatto il calcolo, ma possiamo semplicemente usare la funzione senza conoscere i dettagli (come la funzione m.digest() che cita il buon Markon)

Nota che se non mettessi il return chi chiama la funzione non potrebbe memorizzare il risultato per usarlo piu' tardi. Nel linguaggio python, in particolare, omettere return equivale a fare "return None" ;)

Offline Beppe

  • python sapiens
  • *****
  • Post: 672
  • Punti reputazione: 0
    • Mostra profilo
Re: Chiarimenti su funzioni ( e valore di ritorno)
« Risposta #9 il: Luglio 22, 2007, 20:45 »
Aggiungo anche io un piccolo esempio.
Puoi lanciare lo script oppure guardare il codice direttamente.

# -*- coding: utf-8 -*-

def fctMultiplier(x,y):
    """fctMultiplier usa return perchè calcola un
        valore e lo deve restituire"""
    return x*y

def fctStampa(z):
    """fctStampa non usa il return perchè
        esegue una azione senza restituire un valore"""
    print z


print '*'*80

print "Return o not return?\nThis is the problem!"


print """Per capire la differenza tra l'uso di return
nelle funzioni usiamo due funzioni, una che lo
utilizza e l'altra che non lo utilizza."""

print '*'*80
print '*'*80

print """La prima funzione è la seguente:
def fctMultiplier(x,y):
    return x*y
che accetta due valori in ingresso e li moltiplica
tra di loro.
Qui usiamo il return per ottenere il valore calcolato."""       
print '*'*80

print """La seguente istruzione:
a= fctMultiplier(2,4)
restituisce il valore di:"""

a= fctMultiplier(2,4)
fctStampa(a)


print '*'*80
print '*'*80

print """La seconda funzione è la seguente:
def fctStampa(z):
    print z
che accetta un valore in ingresso e lo stampa a video.
Qui non usiamo il return perchè la funzione non restituisce un
valore ma esegue solo una azione cioè stampa a video il valore
restituito dalla prima funzione che era 8."""   

a= fctMultiplier(2,4)
fctStampa(a)



print '*'*80
print '*'*80
print """La prima funzione accetta diversi tipi di valori.
Qui gli passiamo una stringa Ciao ed un numero 4
ed avremo la parola Ciao stampata 4 volte perchè
Ciao per 4 fa:"""

a= fctMultiplier('Ciao ',4)
fctStampa(a)

print
print 'Per maggiori dettagli guarda il codice nello script.'
print
raw_input("Premi enter per chiudere.")