[Python] Lista vacía "None" generada a partir de otra extendida... Gran duda.

Iniciado por EzianGES, 20 Febrero 2014, 08:48 AM

0 Miembros y 1 Visitante están viendo este tema.

EzianGES

Gente... estoy un tanto desconcertado del por qué Python actúa de esta manera. ¿Alguien me podría decir a qué se debe?

Código (Python) [Seleccionar]

SECTION_LINKS = 'LINKS'
SECTION_NOTES = 'NOTES'
SECTION_EXAMPLES = 'EXAMPLES'
SECTION_DATA = 'DATA'
SECTION_RELATED = 'RELATED'
SECTION_DEFINITIONS = 'DEFINITIONS'
COMMON_SECTIONS = [SECTION_LINKS, SECTION_NOTES, SECTION_EXAMPLES,\
SECTION_DATA, SECTION_RELATED, SECTION_DEFINITIONS]
SECTION_ALGORITHM = 'ALGORITHM'
SECTION_CONTENT = 'CONTENT'
# - Structure
AL_STRUCTURE = COMMON_SECTIONS.append(SECTION_ALGORITHM)
print(AL_STRUCTURE)
DE_STRUCTURE = COMMON_SECTIONS.extend(SECTION_CONTENT)
print(DE_STRUCTURE)


En este caso, la salida de print para ambos es None.

El problema ya lo solucioné de la siguiente manera:
Código (Python) [Seleccionar]

AL_STRUCTURE = [SECTION_ALGORITHM]
AL_STRUCTURE.extend(COMMON_SECTIONS)
DE_STRUCTURE = [SECTION_CONTENT]
DE_STRUCTURE.extend(COMMON_SECTIONS)

Y funciona... Pero mi duda es la siguiente:
¿Por qué en el primer caso AL_STRUCTURE y DE_STRUCTURE pasan a ser de tipo None?
By the way... ¿tienen una manera mas compacta y pythónica de hacer lo anterior? :P

dRak0

#1
Estas asignando un metodo a una variable... tendrias que hacer algo asi.

COMMON_SECTIONS.append(SECTION_ALGORITHM)
AL_STRUCTURE=COMMON_SECTIONS
print AL_STRUCTURE


pd:Igual espera otra respuesta porque empeze a aprender python hace 1 semana.

EzianGES

Cita de: __libc_start_main en 20 Febrero 2014, 12:09 PM
Estas asignando un metodo a una variable... tendrias que hacer algo asi.

COMMON_SECTIONS.append(SECTION_ALGORITHM)
AL_STRUCTURE=COMMON_SECTIONS
print AL_STRUCTURE


pd:Igual espera otra respuesta porque empeze a aprender python hace 1 semana.

El problema ya lo solucioné, de hecho lo que me estás planteando conllevaría que modifique COMMON_SECTIONS, lo cuál no quiero que suceda :P Funciona como especifiqué al final:
Código (Python) [Seleccionar]

AL_STRUCTURE = [SECTION_ALGORITHM]
AL_STRUCTURE.extend(COMMON_SECTIONS)
DE_STRUCTURE = [SECTION_CONTENT]
DE_STRUCTURE.extend(COMMON_SECTIONS)


Lo que quería saber era por qué en el primer caso -erroneamente codificado- hace que AL_STRUCTURE y DE_STRUCTURE sean "tipo" None.  Y de paso saber si hay otra manera mas compacta y pythónica jaja

Gracias por responder :)!

dRak0

Por eso mismo que te puse antes . Segun tengo entendido al declarar una variable , lo que estas haciendo es asignar un objeto a un nombre.
Por ejemplo:

string="hola" Objeto tipo string
numero=2 Objeto tipo int

En este caso , estas asignando un metodo de un objeto que no retorna nada, por ende te asigna el none.

Creo que es este el motivo , puede que este equivocado ya que no poseo mucha experiencia con Python .

Once

Como ya bien te dijo __libc_start_main te regresaba None porque los métodos append y extend retornan None.

La mejor forma de hacer lo que quieres sería concatenando las listas:

Código (python) [Seleccionar]
AL_STRUCTURE = [SECTION_ALGORITHM] + COMMON_SECTIONS
DE_STRUCTURE = [SECTION_CONTENT] + COMMON_SECTIONS
print(AL_STRUCTURE)

print(DE_STRUCTURE)


Saludos!

EzianGES

Loco, gracias por la pronta respuesta. Se los agradezco a ambos, me sacaron una duda interesante jaja.

Pueden cerrar ya :) Les mando un abrazo y gracias nuevamente.