es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo creo nuevos objetos para mis matrices en un método?

Me gustaría pasar una función para que pueda usar diferentes funciones para diferentes objetos. Necesito esa funcionalidad para este proyecto. Este es mi código hasta ahora. Los objetos Obj se crearon para probar la función que estoy intentando hacer.

“`
import math
import random
from obj import Obj

def CreateStandardArray(size,data = 0):

length = math.ceil(math.sqrt(size))
a = []
for i in range(0,length):
    a.append([])
    for j in range(0, length):
        a[i].append(data)

return a

def NewObjs():
a = Obj()
a.setnum(random.randint(0,100))
a.setbool(random.randint(0,1))
return a

def CreateObjArray(size,data,dataset):
length = math.ceil(math.sqrt(size))
a = []
for i in range(0,length):
a.append([])
for j in range(0,length):
a[i].append(data)
data = dataset

return a

def PrintArray(arr):
print(‘\n’)
for i in range(0,len(arr)):
print(arr[i])

a = CreateStandardArray(25,’a’)
PrintArray(a)

b = CreateObjArray(16,Obj(),NewObjs())
PrintArray(b)

El resultado se ve así actualmente:

[Obj::[N:83 B:1], Obj::[N:6 B:1], Obj::[N:6 B:1], Obj::[N:6 B:1]]
[Obj::[N:6 B:1], Obj::[N:6 B:1], Obj::[N:6 B:1], Obj::[N:6 B:1]]
[Obj::[N:6 B:1], Obj::[N:6 B:1], Obj::[N:6 B:1], Obj::[N:6 B:1]]
[Obj::[N:6 B:1], Obj::[N:6 B:1], Obj::[N:6 B:1], Obj::[N:6 B:1]]

Esa repetición después del segundo objeto no debería estar ocurriendo. ¿Es esto una peculiaridad del lenguaje?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    No, esto no es un capricho del lenguaje. La repetición ocurre porque estás asignando el mismo objeto (data = dataset) a múltiples posiciones en el array. Dado que estás pasando un objeto (dataset) y no una función, este objeto se comparte entre todas las posiciones del array.

    Para pasar funciones diferentes para objetos diferentes, puedes modificar la función CreateObjArray para que tome una función generator que devuelva un nuevo objeto cada vez que se llame. Luego puedes llamar a esta función generadora en el bucle para crear un nuevo objeto para cada posición en el array.

    Aquí tienes un ejemplo de cómo puedes modificar la función CreateObjArray:

    def CreateObjArray(size, generator):
        length = math.ceil(math.sqrt(size))
        a = []
        for i in range(length):
            a.append([])
            for j in range(length):
                a[i].append(generator())
        return a
    

    Luego puedes llamar a esta función y pasar una función generadora de la siguiente manera:

    b = CreateObjArray(16, NewObjs)
    

    Esto creará un nuevo objeto para cada posición en el array usando la función NewObjs.

Comments are closed.