¿Cómo está devolviendo la salida de una función diferente de imprimirlo?

StackOverflow https://stackoverflow.com/questions/750136

  •  09-09-2019
  •  | 
  •  

Pregunta

En mi anterior pregunta , Andrew Jaffe escribe:

  

Además de todas las otras sugerencias y consejos, creo que se está perdiendo algo fundamental: sus funciones realmente necesitan devolver algo.   Cuando se crea o autoparts() splittext(), la idea es que esto va a ser una función que se puede llamar, y puede (y debe) dar algo a cambio.   Una vez que averiguar la salida que usted quiere que su función de tener, es necesario ponerlo en un comunicado 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 vuelve algo. Sin embargo, ya he añadido el print, la salida de la función se muestra cuando corro la función. ¿Cuál es la diferencia entre algo y returning printing él?

¿Fue útil?

Solución

Imprimir simplemente imprime la estructura de su dispositivo de salida (normalmente la consola). Nada mas. Para volverlo a partir de su función, que 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 recoge la basura) y ya no es accesible tan pronto como termine esta llamada de función. Si devuelve el valor, puede hacer otras cosas con él. Tales como:

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

Vea lo que pasó? (autopartes) fue llamado y se volvieron la parts_dict y almacenan en la variable my_auto_parts. Ahora podemos utilizar esta variable para acceder al objeto de diccionario y continúa a vivir a pesar de que la llamada de función ha terminado. a continuación, imprimimos el objeto en el diccionario con la tecla 'motor'.

Para obtener un buen tutorial, echa un vistazo a en Python . Es gratis y muy fácil de seguir.

Otros consejos

La sentencia print es la salida de un objeto al usuario. Una instrucción de retorno permitirá asignar el diccionario para una variable una vez esté finalizada la función .

>>> 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)

Creo que estás confundido porque se está ejecutando desde el REPL, que imprime automáticamente el valor devuelto cuando se llama a una función. En ese caso, lo hace llegar de salida idéntica si tiene una función que crea un valor, lo imprime y lo tira, o si tiene una función que crea un valor y lo devuelve, dejando que el REPL imprimirlo.

Sin embargo, estos son mucho no es lo mismo, como se darán cuenta cuando se llama autopartes con otra función que quiere hacer algo con el valor que crea autopartes.

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 sólo se 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

para utilizarlo:

test_dict = {}
test_dict = autoparts()

Además, también esto:

def f():
    print("A")
a=f()
print(a.lower())

Lanzará error, pero:

def f():
    return "A"
a=f()
print(a.lower())

hace resultado deseado.

Para explicar:

Si lo hace type(print()) regresa de salida, entonces no es asunto, por lo que el tipo es NoneType, por lo que no NoneType atribuir lower(), otoh return es una cadena aquí, así que no hay error, funciona a la perfección

def add(x, y):
    return x+y

De esta manera se puede entonces convertirse en una variable.

sum = add(3, 5)

print(sum)

Sin embargo, si la función 'añadir' imprimir la 'suma' de salida sería entonces Ninguno como acción ya habría tenido lugar después de que se le asigna.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top