Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: EzianGES en 20 Febrero 2014, 08:48 am



Título: [Python] Lista vacía "None" generada a partir de otra extendida... Gran duda.
Publicado por: EzianGES en 20 Febrero 2014, 08:48 am
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
  1. SECTION_LINKS = 'LINKS'
  2. SECTION_NOTES = 'NOTES'
  3. SECTION_EXAMPLES = 'EXAMPLES'
  4. SECTION_DATA = 'DATA'
  5. SECTION_RELATED = 'RELATED'
  6. SECTION_DEFINITIONS = 'DEFINITIONS'
  7. COMMON_SECTIONS = [SECTION_LINKS, SECTION_NOTES, SECTION_EXAMPLES,\
  8. SECTION_DATA, SECTION_RELATED, SECTION_DEFINITIONS]
  9. SECTION_ALGORITHM = 'ALGORITHM'
  10. SECTION_CONTENT = 'CONTENT'
  11. # - Structure
  12. AL_STRUCTURE = COMMON_SECTIONS.append(SECTION_ALGORITHM)
  13. print(AL_STRUCTURE)
  14. DE_STRUCTURE = COMMON_SECTIONS.extend(SECTION_CONTENT)
  15. print(DE_STRUCTURE)
  16.  

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

El problema ya lo solucioné de la siguiente manera:
Código
  1. AL_STRUCTURE = [SECTION_ALGORITHM]
  2. AL_STRUCTURE.extend(COMMON_SECTIONS)
  3. DE_STRUCTURE = [SECTION_CONTENT]
  4. DE_STRUCTURE.extend(COMMON_SECTIONS)
  5.  
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


Título: Re: [Python] Lista vacía "None" generada a partir de otra extendida... Gran duda.
Publicado por: dRak0 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.


Título: Re: [Python] Lista vacía "None" generada a partir de otra extendida... Gran duda.
Publicado por: EzianGES en 20 Febrero 2014, 14:45 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
  1. AL_STRUCTURE = [SECTION_ALGORITHM]
  2. AL_STRUCTURE.extend(COMMON_SECTIONS)
  3. DE_STRUCTURE = [SECTION_CONTENT]
  4. DE_STRUCTURE.extend(COMMON_SECTIONS)
  5.  

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


Título: Re: [Python] Lista vacía "None" generada a partir de otra extendida... Gran duda.
Publicado por: dRak0 en 20 Febrero 2014, 22:19 pm
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 .


Título: Re: [Python] Lista vacía "None" generada a partir de otra extendida... Gran duda.
Publicado por: Once en 21 Febrero 2014, 03:42 am
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
  1. AL_STRUCTURE = [SECTION_ALGORITHM] + COMMON_SECTIONS
  2. DE_STRUCTURE = [SECTION_CONTENT] + COMMON_SECTIONS
  3. print(AL_STRUCTURE)
  4.  
  5. print(DE_STRUCTURE)

Saludos!


Título: Re: [Python] Lista vacía "None" generada a partir de otra extendida... Gran duda.
Publicado por: EzianGES en 21 Febrero 2014, 21:31 pm
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.