2009-04-15 9 views
24

question En mi anterior, Andrew Jaffe escribe:¿Cómo se puede devolver la salida de una función diferente de imprimirla?

Además de todas las otras sugerencias y consejos, creo que se está perdiendo algo fundamental: sus funciones realmente necesitan para volver algo así. Al crear autoparts() o splittext(), la idea es que esta será una función a la que puede llamar, y puede (y debe) devolver algo. Una vez que averigua el resultado que desea que tenga su función, debe ponerlo en una declaración return.

def autoparts(): 
    parts_dict = {} 
    list_of_parts = open('list_of_parts.txt', 'r') 

    for line in list_of_parts: 
     k, v = line.split() 
     parts_dict[k] = v 

    print(parts_dict) 

>>> autoparts() 
{'part A': 1, 'part B': 2, ...} 

Esta función crea un diccionario, pero no devuelve algo. Sin embargo, desde que agregué el print, la salida de la función se muestra cuando ejecuto la función. ¿Cuál es la diferencia entre return ing algo y print ing it it?

Respuesta

55

impresión imprime simplemente la estructura de su dispositivo de salida (normalmente la consola). Nada mas. Para devolverlo desde su función, lo haría:

def autoparts(): 
    parts_dict = {} 
    list_of_parts = open('list_of_parts.txt', 'r') 
    for line in list_of_parts: 
     k, v = line.split() 
     parts_dict[k] = v 
    return parts_dict 

¿Por qué volver? Bueno, si no lo hace, ese diccionario muere (se recolecta basura) y ya no se puede acceder tan pronto como finalice esta llamada a la función. Si devuelve el valor, puede hacer otras cosas con él. Por ejemplo:

my_auto_parts = autoparts() 
print my_auto_parts['engine'] 

¿Vea qué sucedió? Se invocó autoparts() y devolvió el parts_dict y lo almacenamos en la variable my_auto_parts. Ahora podemos usar esta variable para acceder al objeto del diccionario y continúa vivo incluso aunque la llamada a la función haya finalizado. Luego imprimimos el objeto en el diccionario con la clave 'motor'.

Para un buen tutorial, echa un vistazo a dive into python. Es gratis y muy fácil de seguir.

3

que acaba de añadir una instrucción de retorno ...

def autoparts(): 
    parts_dict={} 
    list_of_parts = open('list_of_parts.txt', 'r') 
    for line in list_of_parts: 
     k, v = line.split() 
     parts_dict[k] = v 
    return parts_dict 

imprimir solamente imprime en la salida estándar (pantalla) de la aplicación. También puede devolver varias cosas separándolas por comas:

return parts_dict, list_of_parts 

utilizarlo:

test_dict = {} 
test_dict = autoparts() 
7

La instrucción print emitirá un objeto para el usuario. Una declaración de devolución permitirá asignar el diccionario a una variable una vez que la función haya finalizado.

>>> def foo(): 
...  print "Hello, world!" 
... 
>>> a = foo() 
Hello, world! 
>>> a 
>>> def foo(): 
...  return "Hello, world!" 
... 
>>> a = foo() 
>>> a 
'Hello, world!' 

o en el contexto de devolver un diccionario:

>>> def foo(): 
...  print {'a' : 1, 'b' : 2} 
... 
>>> a = foo() 
{'a': 1, 'b': 2} 
>>> a 
>>> def foo(): 
...  return {'a' : 1, 'b' : 2} 
... 
>>> a = foo() 
>>> a 
{'a': 1, 'b': 2} 

(Los estados donde nada se imprime después de una línea se ejecuta significa que la última sentencia devuelve None)

3

Creo que se Está confundido porque se está ejecutando desde REPL, que imprime automáticamente el valor devuelto cuando llama a una función.En ese caso, obtendrá un resultado idéntico si tiene una función que crea un valor, lo imprime y lo descarta, o si tiene una función que crea un valor y lo devuelve, permitiendo que el REPL lo imprima.

Sin embargo, estas no son la misma cosa, ya que se dará cuenta cuando llama a autopartes con otra función que quiere hacer algo con el valor que crea autoparts.

Cuestiones relacionadas