SlideShare una empresa de Scribd logo
MODULOS
EN PYTHON
Mg. Richard E. Mendoza G.
Semana 6   Módulos en Python Entrega 2
https://www.youtube.com/watch?v=L6pFxljtQwo&t=3s
Semana 6   Módulos en Python Entrega 2
Semana 6   Módulos en Python Entrega 2
Semana 6   Módulos en Python Entrega 2
● En Python, la manera más
sencilla de debuguear es
utilizando el módulo pdb
Debugging
def divisores(num):
divisores = []
for i in range(1, num + 1):
if num % i == 1:
divisores.append(i)
return divisores
def run():
num = int(input('Ingresa un número:
'))
print(divisores(num))
print("Terminá mi programa")
if __name__ == '__main__':
run()
Semana 6   Módulos en Python Entrega 2
● Encuentraalossospechososcomunes.
● En lugar de preguntarte por qué un
programa no funciona, pregúntate
por qué está funcionando de esta
manera.
● Esposiblequeelbugnoseencuentre
dondecreesqueestá.
● Explícale el problema a otra persona.
De preferencia que no tenga
contexto.
● Lleva un registro de lo que has
tratado,preferentementeen laforma
detests.
● Veteadormir.
Errores Comunes
● Python permite declarar errores específicos para cada
programa.
● Es buena práctica extender el tipo de error del que se trate.
● Los errores se “lanzan” con el keyword raise
class ErrorDePosicion(Exception):
“””Explicación del error”””
pass
if not posicion:
raise ErrorDePosicion(‘mensaje’)
Errores propios
Errores propios
def es_palindromo(palabra):
palabra = palabra.replace(' ', '').lower()
if palabra[::] == palabra[::-1]:
return True
else:
return False
def run():
palabra = input('Ingrese una palabra: ')
if es_palindromo(palabra):
print('Es palindromo')
else:
print('No es palindromo')
if __name__ == "__main__":
run()
Raise
● Se basan en la
especificación de la
funciónoel programa.
● Prueba inputs y valida
outputs.
● Unit testing o integration
testing.
Pruebas de caja negra
import unittest
def suma(num_1, num_2):
return abs(num_1) + num_2
class
CajaNegraTest(unittest.TestCase):
def test_suma_dos_positivos(self):
num_1 = 10
num_2 = 5
resultado = suma(num_1, num_2)
self.assertEqual(resultado, 15)
if __name__ == '__main__':
unittest.main()
● Se basan en el flujo del
programa.
● Prueba todos los
caminos posibles de una
función. Ramificaciones,
bucles for y while,
recursión.
● Regressiontestingomocks.
Pruebas de Caja de Cristal
import unittest
def es_mayor_de_edad(edad):
if edad >= 18:
return False
else:
return False
class
PruebaCristalTest(unittest.TestCase):
def test_es_mayor_de_edad(self):
edad = 20
resultado = es_mayor_de_edad(edad)
self.assertEqual(resultado, True)
if __name__ == '__main__':
unittest.main()
● Python puede leer y escribir archivos con la función open
● La función open regresa un objeto archivo (file)
● Los archivos pueden ser de texto o binarios
● Se tiene que especificar el modo en que se maneja el archivo
○ ‘r’ = read
○ ‘w’ = write
○ ‘a’ = append
○ ‘r+’ = read and write
● Se debe cerrar el archivo con el método close
● La mejor manera de manejar archivos es con el keyword with
Manejo de archivos
Semana 6   Módulos en Python Entrega 2
● El objeto archivo tiene dos métodos para leerlo: read y readlines
Lectura de archivos
def leer():
numeros = []
with open("./archivos/numeros.txt",
"r", encoding="utf-8") as f:
for linea in f:
numeros.append(int(linea))
print(numeros)
def run():
leer()
if __name__ == '__main__':
run()
•WITH: En python se denomina como un
“manejador contextual”. Controla el flujo del
archivo y se asegura que el archivo no se
rompa en caso de que se cierre
inesperadamente.
•OPEN: Abre el archivo. Recibe parámetros.
PARÁMETROS: Si o si tiene que recibir
la ruta del archivo, y el modo de
apertura (r, w, a). Aunque puede recibir
otros parámetros más si queremos, pero
estos son opcionales.
•AS: Se le agrega un alias al final para luego
poder llamarlo.
● Para escribir a un archivo, se utiliza el método write
Escritura de archivos
•WITH: En python se denomina como un
“manejador contextual”. Controla el flujo del
archivo y se asegura que el archivo no se
rompa en caso de que se cierre
inesperadamente.
•OPEN: Abre el archivo. Recibe parámetros.
•PARÁMETROS: Si o si tiene que recibir
la ruta del archivo, y el modo de
apertura (r, w, a). Aunque puede recibir
otros parámetros más si queremos, pero
estos son opcionales.
•AS: Se le agrega un alias al final para luego
poder llamarlo.
def escribir():
nombres = ["Homero", "Marge",
"Marta"]
with open("./archivos/nombres.txt",
"w", encoding="utf-8") as f:
for nombre in nombres:
f.escribir(nombre)
f.escribir("n")
def run():
escribir()
if __name__ == '__main__':
run()
● PyPi (python package index) es un repositorio de paquetes de
terceros que se pueden utilizar en proyectos de python.
● Para instalar un paquete, es necesario utilizar la herramienta
pip.
● La forma de instalar un paquete es ejecutando el
comando pip install paquete.
● También se puede agrupar la instalación de varios paquetes a
la vez con el archivo requirements.txt
Paquetes de terceros
● Las pruebas automatizadas son una forma de verificar que el software:
○ Cumple con los requisitos técnicos y de negocio de la especificación
○ Funciona
● Python incluye un módulo específico para realizar esta tarea: unittest
● Los tests funcionan realizando afirmaciones (assertions) sobre el valor
de regreso de una función o el estado de una clase.
● Las pruebas se corren con test runners. El más común en Python se llama
nose.
● Los programadores profesionales escriben su software, especificando
primero las pruebas. Esto se conoce como test driven development.
Pruebas Automatizadas
Python Docstring Generator
Mantener una buena documentación en tu
código es valioso y esta extensión te
ayudará a cumplir con tu cometido. Pues al
colocar comillas dobles dentro de una
clase, método o función generará una
plantilla para tu docstring y así proveer de
la información necesaria de lo que estás
creando.
Code Runner
Es natural que mientras escribimos código
lo depuramos mediante su ejecución y para
esto mismo es Code Runner. Podrá ejecutar
tu código directamente desde la misma
ventana sin tener que pasar a la terminal.
Este plugin es grandioso no solo para
Python, pues es compatible con más de 20
lenguajes de programación distintos.
Trailing Spaces
Otro plugin de uso general es Trailing
Spaces, el cual permite ver aquellos
espacios vacíos al final o entre líneas para
eliminarlos. Bastante práctico considerando
que Python utiliza la indentación como base
de su estructura.
Better Comments
Al igual que los docstrings también
podemos colocar comentarios que sean
efectivos y con este plugin puedes utilizar
un formato de color especial para datos
importantes, alertas, tareas pendientes o
consideraciones.
Better Comments es compatible también
con múltiples lenguajes.
Si es una buena idea,
continuad y llevadla a
término. Es mucho más fácil
pedir disculpas que conseguir
el permiso necesario

Más contenido relacionado

PDF
Semana 1 Estructuras de Control en Java
PDF
Semana 1 Estructuras de Datos en Java
PDF
Semana 6 Módulos en Python Entrega 1
PDF
Semana 3 Fundamentos de Python(Funciones y Métodos)
PDF
Semana 2 Fundamentos de Python(Entradas, Salidas y Operaciones Aritméticas)
PDF
Semana 7 Proyecto Misión TIC 2022
PDF
Semana 4 Javascript funciones y Metodos
PPTX
2 Introducción al lenguaje Ruby
Semana 1 Estructuras de Control en Java
Semana 1 Estructuras de Datos en Java
Semana 6 Módulos en Python Entrega 1
Semana 3 Fundamentos de Python(Funciones y Métodos)
Semana 2 Fundamentos de Python(Entradas, Salidas y Operaciones Aritméticas)
Semana 7 Proyecto Misión TIC 2022
Semana 4 Javascript funciones y Metodos
2 Introducción al lenguaje Ruby

La actualidad más candente (20)

PPTX
3 curso php
PPT
IntroduccióN A Visual C
DOCX
Comandos java
PPTX
1 Introducción a los Lenguajes de Programación y a la Programación Orientada ...
PPTX
6 Principios de Programación Orientada a Objetos
DOCX
Codigo
PDF
Semana 4 Introduccion Javascript
PPT
Modelo Persistente
PPTX
3 Introducción al lenguaje PHP
PDF
Practica 1 html_basico
PDF
Curso php y_mysql
PDF
Introduccion a python 3
PDF
Curso de Python
PDF
Presentacion Python
ODP
02 python Programación orientada a objetos y funcional
PPTX
Estructura basica de_un_programa_c_
PPT
UTPL-PROGRAMACIÓN AVANZADA-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)
PPT
Modelo Persistente
PDF
Semana 4 Estructuras de datos(Tuplas, Conjuntos y Diccionarios)
3 curso php
IntroduccióN A Visual C
Comandos java
1 Introducción a los Lenguajes de Programación y a la Programación Orientada ...
6 Principios de Programación Orientada a Objetos
Codigo
Semana 4 Introduccion Javascript
Modelo Persistente
3 Introducción al lenguaje PHP
Practica 1 html_basico
Curso php y_mysql
Introduccion a python 3
Curso de Python
Presentacion Python
02 python Programación orientada a objetos y funcional
Estructura basica de_un_programa_c_
UTPL-PROGRAMACIÓN AVANZADA-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)
Modelo Persistente
Semana 4 Estructuras de datos(Tuplas, Conjuntos y Diccionarios)
Publicidad

Similar a Semana 6 Módulos en Python Entrega 2 (20)

ODP
Introducción a Python
PPTX
Clase 2 - Introducción a la programación con Python I.pptx
PDF
Mini clase Intro Programación Python UTN Profesorado 2015
PPTX
Presentación Archivos txt_96ecdfd4e6befa4011b7f30ccf8f19f2.pptx
PPTX
Clase 3 - Introducción a la programación con Python II.pptx
PDF
Clase1_Python-CTIC
PPTX
Investigacion de Python.pptx
PPT
PPTX
Fundamentos de Java / 15 consejos prácticos sobre Java que cambiarán la for...
PPTX
Curso Pythonssssssssssssssssssssssssssssssssssssssss.pptx
PDF
Programacion-Clases para manejo de archivos
PDF
Python guia 2
DOCX
Tarea pagweb
PPTX
Python-Thonny programación avanzada TESE
PDF
Python - Programación para machos
DOCX
02 introduccion a python
PDF
El tutorial de pythonnnn
PDF
Tutorial python3
PDF
Tutorial python3
PDF
Tutorial python
Introducción a Python
Clase 2 - Introducción a la programación con Python I.pptx
Mini clase Intro Programación Python UTN Profesorado 2015
Presentación Archivos txt_96ecdfd4e6befa4011b7f30ccf8f19f2.pptx
Clase 3 - Introducción a la programación con Python II.pptx
Clase1_Python-CTIC
Investigacion de Python.pptx
Fundamentos de Java / 15 consejos prácticos sobre Java que cambiarán la for...
Curso Pythonssssssssssssssssssssssssssssssssssssssss.pptx
Programacion-Clases para manejo de archivos
Python guia 2
Tarea pagweb
Python-Thonny programación avanzada TESE
Python - Programación para machos
02 introduccion a python
El tutorial de pythonnnn
Tutorial python3
Tutorial python3
Tutorial python
Publicidad

Más de Richard Eliseo Mendoza Gafaro (20)

PDF
INTRODUCCION A ORACLE APEX MODELO RELACIONAL PARCIAL 2
PDF
PARCIAL INTRODUCCION BASES DE DATOS CORTE 1
PDF
TALLER 1. BASE DE DATOS MER Y ORACLE DATAMODELER
PDF
TELEMATICA 1 - UNIDAD 1 - REDES DE COMUNICACION
PDF
TELEMATICA 1 - UNIDAD 1 - REDES DE COMUNICACION
PDF
PARCIAL 3 BASES DE DATOS NOSQL ENUNCIADOS
PDF
SISTEMAS INFORMATICOS PARA TELEMATICA - REDES DE DATOS
PDF
LEGISLACION - TRABAJO EN ALTURAS - NORMATIVA
PDF
TELEMATICA 3 - INTRODUCCION SEGURIDAD INFORMATICA
PDF
INTRODUCCION BASES DE DATOS - NOSQL - MONGODB
PPTX
BASES DE DATOS - NORMALIZACION(TALLER CINE)
PDF
TELEMATICA 3 - CAPA DE APLICACION FTP SMTP PROXY Y FIREWALL
PPTX
SISTEMAS INFORMATICOS PARA TELEMATICA - SISTEMAS OPERATIVOS
PDF
PARCIAL 2 BASES DE DATOS DEFINITIVO PAGINA 2
PDF
PARCIAL 2 BASES DE DATOS DEFINITIVO PAGINA 1
PDF
EJERCICIO TAQUILLA LIVE MEDPLUS LINKIN PARK
PPTX
BASES DE DATOS - MODELO RELACIONAL(TABLAS)
PDF
ENUNCIADO PARCIAL 1 BASES DE DATOS (PRACTICO)
PDF
LEGISLACION EN TELECOMUNICACIONES - LEAN CANVAS V2
PDF
LEGISLACION EN TELECOMUNICACIONES - ORGANIZACIONES
INTRODUCCION A ORACLE APEX MODELO RELACIONAL PARCIAL 2
PARCIAL INTRODUCCION BASES DE DATOS CORTE 1
TALLER 1. BASE DE DATOS MER Y ORACLE DATAMODELER
TELEMATICA 1 - UNIDAD 1 - REDES DE COMUNICACION
TELEMATICA 1 - UNIDAD 1 - REDES DE COMUNICACION
PARCIAL 3 BASES DE DATOS NOSQL ENUNCIADOS
SISTEMAS INFORMATICOS PARA TELEMATICA - REDES DE DATOS
LEGISLACION - TRABAJO EN ALTURAS - NORMATIVA
TELEMATICA 3 - INTRODUCCION SEGURIDAD INFORMATICA
INTRODUCCION BASES DE DATOS - NOSQL - MONGODB
BASES DE DATOS - NORMALIZACION(TALLER CINE)
TELEMATICA 3 - CAPA DE APLICACION FTP SMTP PROXY Y FIREWALL
SISTEMAS INFORMATICOS PARA TELEMATICA - SISTEMAS OPERATIVOS
PARCIAL 2 BASES DE DATOS DEFINITIVO PAGINA 2
PARCIAL 2 BASES DE DATOS DEFINITIVO PAGINA 1
EJERCICIO TAQUILLA LIVE MEDPLUS LINKIN PARK
BASES DE DATOS - MODELO RELACIONAL(TABLAS)
ENUNCIADO PARCIAL 1 BASES DE DATOS (PRACTICO)
LEGISLACION EN TELECOMUNICACIONES - LEAN CANVAS V2
LEGISLACION EN TELECOMUNICACIONES - ORGANIZACIONES

Último (20)

PPTX
Manual ISO9001_2015_IATF_16949_2016.pptx
PDF
LIBRO UNIVERSITARIO INTELIGENCIA ALGORITMICA BN.pdf
DOC
informacion acerca de la crianza tecnificada de cerdos
PDF
Informe Comision Investigadora Final distribución electrica años 2024 y 2025
PPT
357161027-seguridad-industrial-diapositivas-ppt.ppt
PDF
UD3 -Producción, distribución del aire MA.pdf
PPTX
CAPACITACIÓN DE USO ADECUADO DE EPP.pptx
PPTX
Curso Corto de PLANTA CONCENTRADORA FREEPORT
PPTX
CNE-Tx-ZyD_Comite_2020-12-02-Consolidado-Version-Final.pptx
PDF
Sugerencias Didacticas 2023_Diseño de Estructuras Metalicas_digital.pdf
PDF
HISTORIA DE LA GRÚAA LO LARGO DE LOS TIEMPOSpdf
PPTX
Introduccion quimica del fuego.ffffffffffpptx
PDF
SISTEMAS DE PUESTA A TIERRA: Una introducción a los fundamentos de los sistem...
PPTX
Riesgo eléctrico 5 REGLAS DE ORO PARA TRABAJOS CON TENSION
PPTX
Logging While Drilling Ingenieria Petrolera.pptx
PDF
Clase 2 de abril Educacion adistancia.pdf
PPTX
Presentacion ppt rx en soldadura tp 231 vladimir Osuna 7114958 20241.pptx
PPTX
diego universidad convergencia e información
PDF
Pensamiento Politico Siglo XXI Peru y Mundo.pdf
PPTX
1 CONTAMINACION AMBIENTAL EN EL PLANETA.pptx
Manual ISO9001_2015_IATF_16949_2016.pptx
LIBRO UNIVERSITARIO INTELIGENCIA ALGORITMICA BN.pdf
informacion acerca de la crianza tecnificada de cerdos
Informe Comision Investigadora Final distribución electrica años 2024 y 2025
357161027-seguridad-industrial-diapositivas-ppt.ppt
UD3 -Producción, distribución del aire MA.pdf
CAPACITACIÓN DE USO ADECUADO DE EPP.pptx
Curso Corto de PLANTA CONCENTRADORA FREEPORT
CNE-Tx-ZyD_Comite_2020-12-02-Consolidado-Version-Final.pptx
Sugerencias Didacticas 2023_Diseño de Estructuras Metalicas_digital.pdf
HISTORIA DE LA GRÚAA LO LARGO DE LOS TIEMPOSpdf
Introduccion quimica del fuego.ffffffffffpptx
SISTEMAS DE PUESTA A TIERRA: Una introducción a los fundamentos de los sistem...
Riesgo eléctrico 5 REGLAS DE ORO PARA TRABAJOS CON TENSION
Logging While Drilling Ingenieria Petrolera.pptx
Clase 2 de abril Educacion adistancia.pdf
Presentacion ppt rx en soldadura tp 231 vladimir Osuna 7114958 20241.pptx
diego universidad convergencia e información
Pensamiento Politico Siglo XXI Peru y Mundo.pdf
1 CONTAMINACION AMBIENTAL EN EL PLANETA.pptx

Semana 6 Módulos en Python Entrega 2

  • 7. ● En Python, la manera más sencilla de debuguear es utilizando el módulo pdb Debugging def divisores(num): divisores = [] for i in range(1, num + 1): if num % i == 1: divisores.append(i) return divisores def run(): num = int(input('Ingresa un número: ')) print(divisores(num)) print("Terminá mi programa") if __name__ == '__main__': run()
  • 9. ● Encuentraalossospechososcomunes. ● En lugar de preguntarte por qué un programa no funciona, pregúntate por qué está funcionando de esta manera. ● Esposiblequeelbugnoseencuentre dondecreesqueestá. ● Explícale el problema a otra persona. De preferencia que no tenga contexto. ● Lleva un registro de lo que has tratado,preferentementeen laforma detests. ● Veteadormir. Errores Comunes
  • 10. ● Python permite declarar errores específicos para cada programa. ● Es buena práctica extender el tipo de error del que se trate. ● Los errores se “lanzan” con el keyword raise class ErrorDePosicion(Exception): “””Explicación del error””” pass if not posicion: raise ErrorDePosicion(‘mensaje’) Errores propios
  • 11. Errores propios def es_palindromo(palabra): palabra = palabra.replace(' ', '').lower() if palabra[::] == palabra[::-1]: return True else: return False def run(): palabra = input('Ingrese una palabra: ') if es_palindromo(palabra): print('Es palindromo') else: print('No es palindromo') if __name__ == "__main__": run()
  • 12. Raise
  • 13. ● Se basan en la especificación de la funciónoel programa. ● Prueba inputs y valida outputs. ● Unit testing o integration testing. Pruebas de caja negra import unittest def suma(num_1, num_2): return abs(num_1) + num_2 class CajaNegraTest(unittest.TestCase): def test_suma_dos_positivos(self): num_1 = 10 num_2 = 5 resultado = suma(num_1, num_2) self.assertEqual(resultado, 15) if __name__ == '__main__': unittest.main()
  • 14. ● Se basan en el flujo del programa. ● Prueba todos los caminos posibles de una función. Ramificaciones, bucles for y while, recursión. ● Regressiontestingomocks. Pruebas de Caja de Cristal import unittest def es_mayor_de_edad(edad): if edad >= 18: return False else: return False class PruebaCristalTest(unittest.TestCase): def test_es_mayor_de_edad(self): edad = 20 resultado = es_mayor_de_edad(edad) self.assertEqual(resultado, True) if __name__ == '__main__': unittest.main()
  • 15. ● Python puede leer y escribir archivos con la función open ● La función open regresa un objeto archivo (file) ● Los archivos pueden ser de texto o binarios ● Se tiene que especificar el modo en que se maneja el archivo ○ ‘r’ = read ○ ‘w’ = write ○ ‘a’ = append ○ ‘r+’ = read and write ● Se debe cerrar el archivo con el método close ● La mejor manera de manejar archivos es con el keyword with Manejo de archivos
  • 17. ● El objeto archivo tiene dos métodos para leerlo: read y readlines Lectura de archivos def leer(): numeros = [] with open("./archivos/numeros.txt", "r", encoding="utf-8") as f: for linea in f: numeros.append(int(linea)) print(numeros) def run(): leer() if __name__ == '__main__': run() •WITH: En python se denomina como un “manejador contextual”. Controla el flujo del archivo y se asegura que el archivo no se rompa en caso de que se cierre inesperadamente. •OPEN: Abre el archivo. Recibe parámetros. PARÁMETROS: Si o si tiene que recibir la ruta del archivo, y el modo de apertura (r, w, a). Aunque puede recibir otros parámetros más si queremos, pero estos son opcionales. •AS: Se le agrega un alias al final para luego poder llamarlo.
  • 18. ● Para escribir a un archivo, se utiliza el método write Escritura de archivos •WITH: En python se denomina como un “manejador contextual”. Controla el flujo del archivo y se asegura que el archivo no se rompa en caso de que se cierre inesperadamente. •OPEN: Abre el archivo. Recibe parámetros. •PARÁMETROS: Si o si tiene que recibir la ruta del archivo, y el modo de apertura (r, w, a). Aunque puede recibir otros parámetros más si queremos, pero estos son opcionales. •AS: Se le agrega un alias al final para luego poder llamarlo. def escribir(): nombres = ["Homero", "Marge", "Marta"] with open("./archivos/nombres.txt", "w", encoding="utf-8") as f: for nombre in nombres: f.escribir(nombre) f.escribir("n") def run(): escribir() if __name__ == '__main__': run()
  • 19. ● PyPi (python package index) es un repositorio de paquetes de terceros que se pueden utilizar en proyectos de python. ● Para instalar un paquete, es necesario utilizar la herramienta pip. ● La forma de instalar un paquete es ejecutando el comando pip install paquete. ● También se puede agrupar la instalación de varios paquetes a la vez con el archivo requirements.txt Paquetes de terceros
  • 20. ● Las pruebas automatizadas son una forma de verificar que el software: ○ Cumple con los requisitos técnicos y de negocio de la especificación ○ Funciona ● Python incluye un módulo específico para realizar esta tarea: unittest ● Los tests funcionan realizando afirmaciones (assertions) sobre el valor de regreso de una función o el estado de una clase. ● Las pruebas se corren con test runners. El más común en Python se llama nose. ● Los programadores profesionales escriben su software, especificando primero las pruebas. Esto se conoce como test driven development. Pruebas Automatizadas
  • 21. Python Docstring Generator Mantener una buena documentación en tu código es valioso y esta extensión te ayudará a cumplir con tu cometido. Pues al colocar comillas dobles dentro de una clase, método o función generará una plantilla para tu docstring y así proveer de la información necesaria de lo que estás creando. Code Runner Es natural que mientras escribimos código lo depuramos mediante su ejecución y para esto mismo es Code Runner. Podrá ejecutar tu código directamente desde la misma ventana sin tener que pasar a la terminal. Este plugin es grandioso no solo para Python, pues es compatible con más de 20 lenguajes de programación distintos. Trailing Spaces Otro plugin de uso general es Trailing Spaces, el cual permite ver aquellos espacios vacíos al final o entre líneas para eliminarlos. Bastante práctico considerando que Python utiliza la indentación como base de su estructura. Better Comments Al igual que los docstrings también podemos colocar comentarios que sean efectivos y con este plugin puedes utilizar un formato de color especial para datos importantes, alertas, tareas pendientes o consideraciones. Better Comments es compatible también con múltiples lenguajes.
  • 22. Si es una buena idea, continuad y llevadla a término. Es mucho más fácil pedir disculpas que conseguir el permiso necesario