una propias por parametros otra omision metodos matematicas lista funciones funcion ejemplos dentro definir crea como python function python-3.x return

propias - ¿Cómo Python devuelve múltiples valores de una función?



lista de funciones de python (6)

Cada vez que se devuelven varios valores desde una función en Python, ¿siempre convierte los múltiples valores a una lista de múltiples valores y luego los devuelve desde la función?

Solo estoy agregando un nombre e imprimiendo el resultado que se obtiene de la función. El tipo de resultado es '' tupla ''.

class FigureOut: first_name = None last_name = None def setName(self, name): fullname = name.split() self.first_name = fullname[0] self.last_name = fullname[1] self.special_name = fullname[2] def getName(self): return self.first_name, self.last_name, self.special_name f = FigureOut() f.setName("Allen Solly Jun") name = f.getName() print type(name)


No sé si se ha enterado de la " función de primera clase ". Python es el lenguaje que tiene '' función de primera clase ''

Espero que mi respuesta te pueda ayudar. Feliz codificacion

He escrito el siguiente código:

class FigureOut: def setName(self, name): fullname = name.split() self.first_name = fullname[0] self.last_name = fullname[1] def getName(self): return self.first_name, self.last_name f = FigureOut() f.setName("Allen Solly") name = f.getName() print (name)

Obtengo la siguiente salida:

(''Allen'', ''Solly'')

Cada vez que se devuelven varios valores desde una función en Python, ¿convierte siempre los múltiples valores a una lista de múltiples valores y luego los devuelve desde la función?

¿Es todo el proceso igual que convertir los múltiples valores en una list explícitamente y luego devolver la lista, por ejemplo en JAVA, ya que uno puede devolver solo un objeto desde una función en JAVA?


Aquí está volviendo realmente tuple .

Si ejecuta este código en Python 3:

def get(): a = 3 b = 5 return a,b number = get() print(type(number)) print(number)

Salida:

<class ''tuple''> (3, 5)

Pero si cambia la línea de código, return [a,b] lugar de return a,b y ejecute:

def get(): a = 3 b = 5 return [a,b] number = get() print(type(number)) print(number)

Salida:

<class ''list''> [3, 5]

Solo está devolviendo un solo objeto que contiene múltiples valores.

Hay otra alternativa a la declaración de retorno para devolver múltiples valores, usar yield (para verificar los detalles, consulte esto. ¿Qué hace la palabra clave "rendimiento" en Python? )

Ejemplo de muestra:

def get(): for i in range(5): yield i number = get() print(type(number)) print(number) for i in number: print(i)

Salida:

<class ''generator''> <generator object get at 0x7fbe5a1698b8> 0 1 2 3 4


Dado que la declaración de retorno en getName especifica múltiples elementos :

def getName(self): return self.first_name, self.last_name

Python devolverá un objeto contenedor que básicamente los contiene.

En este caso, devolver un conjunto de elementos separados por comas crea una tupla . Múltiples valores solo pueden ser devueltos dentro de contenedores .

Usemos una función más simple que devuelve múltiples valores:

def foo(a, b): return a, b

Puede ver el código de bytes generado mediante el uso de dis.dis , un desensamblador para el código de bytes de Python. Para valores separados por comas sin corchetes, se ve así:

>>> import dis >>> def foo(a, b): ... return a,b >>> dis.dis(foo) 2 0 LOAD_FAST 0 (a) 3 LOAD_FAST 1 (b) 6 BUILD_TUPLE 2 9 RETURN_VALUE

Como puede ver, los valores se cargan primero en la pila interna con LOAD_FAST y luego se BUILD_TUPLE un BUILD_TUPLE (que BUILD_TUPLE los 2 elementos anteriores colocados en la pila). Python sabe crear una tupla debido a que las comas están presentes.

Alternativamente, podría especificar otro tipo de retorno, por ejemplo, una lista, utilizando [] . Para este caso, se BUILD_LIST una BUILD_LIST siguiendo la misma semántica que su equivalente de tupla:

>>> def foo_list(a, b): ... return [a, b] >>> dis.dis(foo_list) 2 0 LOAD_FAST 0 (a) 3 LOAD_FAST 1 (b) 6 BUILD_LIST 2 9 RETURN_VALUE

El tipo de objeto devuelto realmente depende de la presencia de corchetes (para tuplas () se puede omitir si hay al menos una coma). [] crea listas y {} conjuntos. Los diccionarios necesitan key:val pares de key:val .

Para resumir, se devuelve un objeto real . Si ese objeto es de un tipo contenedor, puede contener varios valores que dan la impresión de que se han devuelto varios resultados. El método habitual entonces es descomprimirlos directamente:

>>> first_name, last_name = f.getName() >>> print (first_name, last_name)

Además de todo esto, sus formas Java se están filtrando en Python :-)

No uses captadores cuando escribas clases en Python, usa properties . Las propiedades son la forma idiomática de administrar atributos, para más información sobre estos, vea una buena respuesta here .


De Python Cookbook v.30

def myfun(): return 1, 2, 3

a, b, c = myfun()

Aunque parece que myfun() devuelve múltiples valores, en realidad se está creando una tuple . Parece un poco peculiar, pero en realidad es la coma que forma una tupla, no los paréntesis

Entonces, sí, lo que está sucediendo en Python es una transformación interna de múltiples valores separados por comas a una tupla y viceversa.

Aunque no hay un equivalente en java , puede crear fácilmente este comportamiento utilizando array o algunas Collection como las de la List :

private static int[] sumAndRest(int x, int y) { int[] toReturn = new int[2]; toReturn[0] = x + y; toReturn[1] = x - y; return toReturn; }

Ejecutado de esta manera:

public static void main(String[] args) { int[] results = sumAndRest(10, 5); int sum = results[0]; int rest = results[1]; System.out.println("sum = " + sum + "/nrest = " + rest); }

resultado:

sum = 15 rest = 5


Las funciones de Python siempre devuelven un valor único. El operador de coma es el constructor de tuplas, por lo que self.first_name, self.last_name evalúa como tupla y esa tupla es el valor real que la función está devolviendo.


mencionado también here , puedes usar esto:

import collections Point = collections.namedtuple(''Point'', [''x'', ''y'']) p = Point(1, y=2) >>> p.x, p.y 1 2 >>> p[0], p[1] 1 2