Título: Python, funciones o libreria ? Publicado por: EvilGoblin en 10 Julio 2010, 01:00 am Una simple duda que tengo a la hora de programar
que recomiendan, usar el interprete de Python y crear funciones usandolas como librerias o crear un script con bucles donde se utilizen las funciones que tiene? Ejemplo de lo que digo: Estoy haciendo un "test" de sql... y hago funciones que me sirven para quitar el trabajo monotono (lo hago por simple curiosidad, nada raro) entonces tengo sql_union.py, sql_blind.py, sql_blind_columnas.py .... y para aprender mas sobre python, me estoy disponiendo a juntar todo eso dentro de una base. mi intencion es poder pasarle los datos al script y q haga todo el "trabajo duro" lo de la logica lo tengo ya todo armado (pseudo-codigo).. pero cuando me dispose a programar me quedo estancado en como programarlo... crear al estilo C (poor console) cuando pones las opciones y les das los datos 1) agregar variable 2) agregar url 3) agregar semilla blah blah ... o crearlo dentro del interprete (al estilo metasploit) >> import sql_base >> sql_base.url("http://192.168.1.3/index.php?id=") >>sql_base.ejecutar() blah blah blah.... ¿como es conveniente en un codigo a medida? como lo harian? (no me digan C, Perl, java, xDDDD) Título: Re: Python, funciones o libreria ? Publicado por: Novlucker en 10 Julio 2010, 03:50 am La pregunta entonces es, módulos o funciones :P
Y la respuesta es ... depende :rolleyes: La ventaja de utilizar módulos es lo reusable y extensible de estos. Los módulos puedes reusarlos en múltiples scripts y extender su utilidad agregandole nuevas funciones, además de que al tener todo separado tienes un código mucho más ordenado. La desventaja es que en el caso de tener muchos modulos el revisar un script te puede llevar a saltar continuamente de un modulo a otro, lo cual puede hacerlo menos entendible, además de que para pequeñas funciones no vale la pena. Por lo general es más común simplemente utilizar funciones, y dejar la creación de modulos para "librerías" de funciones orientadas a utilidades relacionadas, como lo son las que trae incorporadas python, donde cada modulo apunta a una determinada función. De cualquier manera, siempre va a gusto del programador :P Saludos Título: Re: Python, funciones o libreria ? Publicado por: xーいぱ en 11 Julio 2010, 20:35 pm Por mi, recomendaria crear un modulo python, y utilizar un orm para la interaccion con la base de datos
Ejemplo creando el modulo 'xip.mod': x-ip@darkstar:~$ mkdir tutorial x-ip@darkstar:~$ cd tutorial/ x-ip@darkstar:~/tutorial$ mkdir xip.mod x-ip@darkstar:~/tutorial$ touch xip.mod/setup.py x-ip@darkstar:~/tutorial$ mkdir -p xip.mod/xip/mod x-ip@darkstar:~/tutorial$ touch xip.mod/xip/__init__.py x-ip@darkstar:~/tutorial$ touch xip.mod/xip/mod/__init__.py Luego seteo el setup.py: Código: from setuptools import setup, find_packages podes comprobar de que tu modulo se puede importar, usando ipython de la siguiente forma: Código:
Luego falta escribir una clase para agrupar las funciones relacionadas con la DB, como recomende usar un orm (object relation mapper), mi preferido es sqlalchemy. Creo un archivo 'database.py' dentro de mi modulo: Código: x-ip@darkstar:~/tutorial$ touch xip.mod/xip/mod/database.py Cual su codigo podria ser por ejemplo: Código: from sqlalchemy import create_engine Luego, podes probar que tu database.py se puede importar nuevamente utilizando ipython asi: Código: In [1]: __import__('xip.mod') Me tira error por no tener instalado sqlalchemy, pues lo instalamos :) Código: x-ip@darkstar:~/tutorial/xip.mod$ easy_install sqlalchemy Vuelvo a intentar ... Código: In [1]: pwd Y ahora si funciona :). Luego para reutilizar tu modulo python, es cuestion de empaquetarlo en un 'egg'. Código: (plone4)x-ip@darkstar:~/tutorial/xip.mod$ python setup.py bdist_egg Tu codigo empaquetado se va a encontrar en el directorio 'dist', te muestro mi shell asi se entiende: Código: (plone4)x-ip@darkstar:~/tutorial/xip.mod$ ls dist/ Este paquete xip.mod ahora lo podes pasar a todos tus amigos o vos instalarlo de manera sencilla en donde lo precises, haciendo: Código: x-ip@darkstar:~/tutorial/xip.mod/dist$ easy_install xip.mod-0.1-py2.6.egg Al haberlo instalado, ya no es necesario que hagas __import__('...'), si abris tu interprete de python o ipython veras: Código: (plone4)x-ip@darkstar:~/tutorial/xip.mod/dist$ ipytho Saludos :) |