I’m using a generic local crud so i can implement the same method for every single list, but when trying to add a value to a list it doesn’t update the root list but the parameter one does, any help?
def crud(name, lista):
print('----------------------------')
print(name.capitalize())
print('----------------------------')
print('t[1] . Ingresar')
print('t[2] . Consultar')
print('t[3] . Eliminar')
print('t[4] . Actualizar')
print('t[5] . Listar')
opcion = int(input('OPCIÓN >>> '))
if opcion == 1:
lista.append(input('Ingrese nombre del '+str(name[:-2])+': '))
if opcion == 2:
node_id = int(input('Ingrese id del '+str(name[:-2])+' a consultar: '))
elif opcion == 5:
i = 0
while i <= len(lista)-1:
print('t['+str(i)+'] . '+str(lista[i]))
i += 1
while True:
print('----------------------------')
print('ALMACÉN MARKET-CICLE')
print('PROGRAMA PRINCIPAL')
print('----------------------------')
print('t[1] . Vendedores')
print('t[2] . Productos')
print('t[3] . Clientes')
print('t[4] . Ventas')
print('t[5] . SALIR')
opcion = int(input('OPCIÓN >>> '))
lista_vendedores = []
lista_productos = []
lista_clientes = []
if opcion == 1:
crud('vendedores', lista_vendedores)
if opcion == 2:
crud('productos', lista_productos)
if opcion == 3:
crud('clientes', lista_clientes)
elif opcion == 5:
break
If i print the parameter “lista” when appends the new value it returns the list with the new value, but when i enter the list option, the list shows empty.
Advertisement
Answer
You create a new empty list on every iteration of while True:
def func(items):
items.append(1)
print(items)
while True:
foobar = []
func(foobar)
will always give [1], not [1], [1,1], ….
Don’t run the above, it will just busy loop until it explodes.
To solve your issue, you need to declare the list once, outside your interactive loop.