Re: [Python-es] Autenticación de aplicación en Twitter mediante Oauth
El 01/09/2014, a las 09:45, Manuel Eduardo Cortéz Vallejo manuelcorte...@gmail.com escribió: Buen día, Hoy quisiera preguntar si alguien conoce un sitio donde pueda encontrar ejemplos sobre cómo autenticar una aplicación Twitter mediante Oauth de la forma en la que se autentican las aplicaciones web. Lo que te puedo enviar es un ejemplo de Twitter OAuth pero para desarrolladores, para obtener un stream de tweets. No se si eso te interesa. Saludos, Hernán. ___ Python-es mailing list Python-es@python.org https://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Re: [Python-es] Obtener índices para un resample con Pandas
No se si hay un atajo en Pandas, pero el procedimiento estándar en estos casos es etiquetar cada fila con la agrupación y con el resultado de la función de agregación. Luego filtras las observaciones que cumplen con una condición dada, por ej. que el valor de la observación sea igual al total agregado por grupo. Hernán M. Foffani El 08/07/2014, a las 15:51, Kiko kikocorre...@gmail.com escribió: Hola. Después de darle unas pocas vueltas y de resolverlo de forma poco eficiente voy a preguntar por aquí a ver si alguien más listo o con más conocimientos que yo sobre pandas/numpy me puede ayudar. El problema: Estoy usando pandas para sacar los máximos de una serie temporal dependiendo de un periodo de tiempo, mensual, anual,... df.resample('M', how = 'max') Eso me da los máximos de cada mes. Pero también me interesa saber la fecha en que ocurren esos máximos. resample no devuelve los índices, cosa lógica ya que el how no tiene porque ser un valor y sí un valor obtenido a partir de varios valores por lo que el índice sería ambiguo para eso. Pero me pregunto si existe algo en Pandas que desconozca que permita obtener además los índices de una operación parecida sin tener que meterme a trastear a buscarlos yo. Muchas gracias por adelantado. Saludos. ___ Python-es mailing list Python-es@python.org https://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/ ___ Python-es mailing list Python-es@python.org https://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Re: [Python-es] ¿ Injección de código con decoradores o herencia ?
Y unas dudas colaterales: * Por qué tanto setattr(objeto, atributo, valor)? Si el nombre del atributo ya lo sabemos, para que usar la cadena si vale con objeto.atributo = valor En los ejemplos de este hilo es lo mismo. * Que tiene de malo el concepto de clase Mixin, que solo existe para complementar a otra clase? Ninguno de por sí. Es mas, es un patrón perfectamente válido para los lenguajes de programación que admiten herencia múltiple. Existe desde hace décadas y en la biblioteca estándar de Python se usa bastante. Con todo se pueden cometer abusos y mas con Python por la libertad que permite. El problema mas común es cuando los mixins tienen cantidades elevadas de métodos. Controlar aquí la resolución de conflictos es complicado porque suele ser difícil de diagnosticar y mas aún de corregir. Plone y las primera versión de Zope contribuyeron a su desprestigio, pero son casos especiales, frameworks gigantes, y aquí sí concuerdo con la idea que los mixins no son el mecanismo adecuado. Una regla simplona es que mientras la suma de las cantidades de nombres a incorporar de todos los mixins no supere la docena estás dentro de la zona segura. Saludos, Hernán. ___ Python-es mailing list Python-es@python.org https://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Re: [Python-es] ¿ Injección de código con decoradores o herencia ?
Hernan M. F Particularmente encuentro el ejemplo que presentas como poco elegante. Porque en ese caso la clase C tiene una dependencia fija en el código al método F() de la clase D la cual no puede ser modificada (bueno, si puede ser modificada empleando settatr(), lo que hace a Python excelente desde mi punto de vista). La cuestión es que se programa una vez, pero se modifica el código y se revisa múltiples veces y en este caso el usuario de C tiene que leer todo el código para darse cuenta de que cambiar si necesita reemplazar D.F por otra cosa. Y finalmente si F es una función que no dependa de que argumentos reciba D en el constructor, entonces no es necesario que sea miembro de la clase D. Yo pondría tu ejemplo de la siguiente forma: class C: def __init__(self, f=None): if f is None: d = D() f = d.f settatr(self, 'f', f) def f(self): raise NotImplementedError() La dependencia la puedes quitar de forma similar a lo has puesto (inicializa con None, condicionalmente, o como creas mas conveniente). Flexibiliza la firma usando kwargs, etc... class C (B): def __init__(self, f_provider = D()): self._f_provider = f_provider def F(self): self._f_provider.F() Mi respuesta anterior era prevenir el abuso de setattr cuando hay patrones de uso que son mucho mas sencillos y prácticos. Piensa en el caso de uso. Si inyectas vía setattr te impide que puedas ajustar luego el comportamiento. Lo que se suele necesitar en los casos reales es hacer algo antes y/o después de la invocación al suministrador del servicio. Encima si inyectas F a B o C así, ¿cómo accede F a datos internos de B? … def F(self): hacer_algo_previo_con_self() self._f_provider.F( o_invocar_F_con_alguna_opción_especifica ) hacer_otra_cosa_con_self_con_el_resultado_de_F() Esta variante le deja claro al usuario que solo con parametrizar la clase C puede reemplazar la maquinaria externa que consume la clase. Finalmente quiero decir (mi criterio nuevamente y el de algunas personas que asi lo ponen en sus blogs) que la herencia multiple no es la forma de inyectar comportamiento en una clase y que debe ser usada con mucho cuidado. Herencia es herencia, una persona hereda de animal pero un navegador web no hereda de conexión de red solo porque la use y la herencia lo pueda hacer parecer que funciona. Es la discusión de décadas y hay opiniones de todo tipo. No voy a entrar en ésta, a no ser que hablemos de casos concreto de código, no tengo intención definir qué es ser. Como dije en mi mensaje anterior lo formal en Python es usar abc. (Ver ejemplo de Chema en un mail posterior). ___ Python-es mailing list Python-es@python.org https://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Re: [Python-es] Entrevista a GvR
Yo lo que he sacado en claro de esta entrevista es que si queremos un lenguaje a nuestro gusto, hemos de escribirlo nosotros mientras dejamos que crezca nuestra barba ;-) No es sólo por el lenguaje. La verdadera potencia está, hoy en día, en los compiladores, como el ghc de haskell o el de scala. La inferencia de tipos de estos compiladores han reducido mucho las ventajas de usar lenguajes dinámicos. Python3 es un buen lavado de cara del lenguaje, pero python debe evolucionar más allá de CPython si no quiere quedarse fuera de la programación de móviles y para la nube. Pero algo ha cambiado en estos últimos 10 años. Antes Python *era* la implementación en CPython pero eso ya no es así, hay mas respeto por el resto de los intérpretes, específicamente jython, pypy, ironpython. En mi opinión hay otros temas que son menos volados, mas aburridos si se quiere, que resolverlos es extraordinariamente complicado, como la dependencia de Python de la existencia de un file system. O en términos mas generales, la dependencia de la biblioteca estándar de servicios del sistema operativo. -Hernán. ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Re: [Python-es] Entrevista a GvR
¿Qué opinión os merece Julia? un lenguaje basado parcialmente en Python. Mmm… No se yo… mypy (http://www.mypy-lang.org) quizás tenga algún futuro. Está dentro de la línea de pensamiento de Guido que es pesimista sobre la inferencia de tipos en Python sin ayuditas. Al menos GvR ha hecho un retweet del proyecto el mes pasado, lo que viniendo de él es todo un detalle je je. Por otro lado mi capacidad de predicción sobre el éxito futuro de los lenguajes de programación es nula. Jamás me hubiera imaginado que tarde o temprano *todos* programaríamos algo en JS. Vale que es por el navegador ¡pero es que ahora con nodejs resulta que también en el servidor! ¡Argh! ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Re: [Python-es] Entrevista a GvR
El 27/08/2013, a las 14:10, Chema Cortes pych...@gmail.com escribió: 2013/8/26 Hernán M. F. hfoff...@gmail.com: En slashdot. http://developers.slashdot.org/firehose.pl?op=viewtype=storysid=13/08/25/2115204 No parece que haya mucha novedad. Sigue renegando de la programación funcional, a pesar de reconocer sus ventajas, y sigue con CPython como la implementación locomotora para el desarrollo del lenguaje. Al menos ya nombra scala, aunque sea para menospreciarlo como algo sólo para listos. Esperaré otro año más a ver si cambia la cosa. Jajaja! Es verdad, no dice nada nuevo. La entrevista, sin embargo, puede ser útil para aquellos que conocen Python desde hace poco. Sobre todo para enterarse de cómo es el tío y qué idea tiene de su lenguaje. A propósito de Scala, cuando leí lo que decía me acordé de vos. je je je. En mi caso con los años he aprendido a esperar poquísimos cambios en el lenguaje. ¡El PEP de programación asincrónica fue como si me lo hubiera traído Santa Claus en persona! ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Re: [Python-es] conflicto de versiones python
En virtualenv estableces el entorno haciendo workon blender (o como lo hayas llamado) en la línea de comandos y ya está. Hernán M. Foffani El 22/08/2013, a las 19:57, lesthack lesth...@gmail.com escribió: Si, virtualenv es una buena opción, solo tendría que indicarle a Blender donde esta la ruta de su entorno aislado. Saludos ! 2013/8/22 Hernán Foffani hfoff...@gmail.com Usa virtualenv... es una opción. El 22 de agosto de 2013 09:07, lesthack lesth...@gmail.com escribió: Una forma muy sencilla de saber a que versión apunta /usr/bin/python es simplemente ejecutarlo. $ python Python 2.7.3 (default, Apr 10 2013, 05:46:21) [GCC 4.6.3] on linux2 Type help, copyright, credits or license for more information. En mi caso por ejemplo tengo predefinido la 2.7.3. Si quisieras cambiar la versión, remplaza /usr/bin/python mediante un enlace simbólico a la versión que desees. ln -sf /usr/bin/python2.6 /usr/bin/python Saludos ! 2013/8/22 Ricardo Mendoza pgsql...@gmail.com Saludos, tengo un problema que se lo atribuyo a python. Intento iniciar Blender instalado por medio de apt, en debian 7, pero al revisar veo que tengo tres versiones de python 2.6,2.7,3.2. ¿Como puedo hacer para que blender arranque con la version correcta de python?. FAQ: http://python-es-faq.wikidot.com/ Sí, yo también recomiendo virtualenv. Especialmente el wrapper: http://virtualenvwrapper.readthedocs.org/en/latest/ Le dedicas unos minutos una vez pero luego te blindas de cualquier conflicto futuro entre versiones de python y/o paquetes. -Hernán. ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/ -- ISC. Jorge Luis Hernández C. Desarrollador de Software y Tecnologías Libres Colaborador GNU/Linux Debian México http://lesthack.com.mx http://blog.debian.mx/ @lesthack ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/ ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Re: [Python-es] conflicto de versiones python
Usa virtualenv... es una opción. El 22 de agosto de 2013 09:07, lesthack lesth...@gmail.com escribió: Una forma muy sencilla de saber a que versión apunta /usr/bin/python es simplemente ejecutarlo. $ python Python 2.7.3 (default, Apr 10 2013, 05:46:21) [GCC 4.6.3] on linux2 Type help, copyright, credits or license for more information. En mi caso por ejemplo tengo predefinido la 2.7.3. Si quisieras cambiar la versión, remplaza /usr/bin/python mediante un enlace simbólico a la versión que desees. ln -sf /usr/bin/python2.6 /usr/bin/python Saludos ! 2013/8/22 Ricardo Mendoza pgsql...@gmail.com Saludos, tengo un problema que se lo atribuyo a python. Intento iniciar Blender instalado por medio de apt, en debian 7, pero al revisar veo que tengo tres versiones de python 2.6,2.7,3.2. ¿Como puedo hacer para que blender arranque con la version correcta de python?. FAQ: http://python-es-faq.wikidot.com/ Sí, yo también recomiendo virtualenv. Especialmente el wrapper: http://virtualenvwrapper.readthedocs.org/en/latest/ Le dedicas unos minutos una vez pero luego te blindas de cualquier conflicto futuro entre versiones de python y/o paquetes. -Hernán. ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Re: [Python-es] Eficiencia de las listas
Podrías utilizar buffer (memoryview en Python 3)... Cortar es trivial, volver a empalmar no tanto aunque quizás puedas hacer un wrapper e implementar el pegado en forma virtual. O directamente array. Hernán M. Foffani El 05/08/2013, a las 21:54, Chema Cortes pych...@gmail.com escribió: Últimamente, estoy realizando estudios sobre la eficiencia de distintos códigos python. Mirando qué tipo de colección podía ser más eficiente según qué tareas, me encuentro con el siguiente párrafo en la documentación de [deque][1]: Deques support thread-safe, memory efficient appends and pops from either side of the deque with approximately the same O(1) performance in either direction. Though list objects support similar operations, they are optimized for fast fixed-length operations and incur O(n) memory movement costs for pop(0) and insert(0, v) operations which change both the size and position of the underlying data representation. He comprobado que, efectivamente, el costo de insertar elementos al principio de una lista es mucho mayor que añadir elementos al final de la lista (x1). En estos momentos , necesito trabajar con listas de números muy largas ( 10e6 elementos) para trocear en dos pedazos, invertir uno de ellos y volverlos a empalmar (método 2-opt). Una forma de expresarlo: L[i+1:j+1] = L[j:i:-1] con i+1j que equivale a: L[:i] + L[j:i:-1] + L[j+1:] Esta última expresión, aunque más clara, es poco eficiente al tener que crear una nueva lista partiendo de tres sublistas intermedias. Los elementos no cambian de valor y tampoco cambia el tamaño de la lista. Parece que la lista es la estructura más eficiente para esta tarea (por lo que cuenta la documentación) siempre que no se modifique en tamaño. Pero me pregunto si hay algún modo de hacer este manejo más eficiente, tal vez usando alguna otra estructura, en python o numpy, que mejore estas tareas de corte y empalme. Intuyo que con arrays se reducen las necesidades de memoria, pero en estos momentos, la memoria es lo que menos me preocupa. Busco un método genérico que pueda valer para cualquier otro tipo de datos (eg: lista de vectores). [1]: http://docs.python.org/2/library/collections.html#collections.deque -- Hyperreals *R Quarks, bits y otras criaturas infinitesimales: http://ch3m4.org/blog Buscador Python Hispano: http://ch3m4.org/python-es ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/ ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Re: [Python-es] Stack Overflow en español: debate
Yo podría montar algo parecido por mi cuenta, como ha hecho Joe di Castro con Majibu, pero la cosa es que esto es una propuesta dentro de la red Stack Exchange (Stack Overflow, Super User, Server Fault...). Ni yo ni nadie necesita programar nada, pero requieren que para que una propuesta de sitio nuevo se lance cuente primero con una masa crítica de usuarios que participen activamente en la beta privada y «llenen» el sitio de contenido, para que después pase a una fase de beta pública y, si despega, se adhiera oficialmente a la red como sitio de pleno derecho: http://stackexchange.com/sites?view=grid Ya pasó la fase de definición, y ahora está en la recta final de la fase de reunión de masa crítica. Necesita unos 15 usuarios más con más de 200 de reputación en cualquier sitio de la red Stack Exchange para lanzar la beta privada. ¡Hubieras empezado por ahí! Ja! (¿o me perdí algo?) Haz una petición específica de voluntarios de la propuesta con el requerimiento indicado (los 200 puntos esos, que yo lo siento pero no llego) y cómo ponerse en contacto y listo. No creo que tengas problemas para conseguir esos apoyos si haces el requerimiento en las diversas listas de lenguajes de programación en castellano tanto españolas como latinoamericanas. Saludos y suerte! -H. ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Re: [Python-es] El infinito se me queda corto
Supongo que habrá una explicación. Si realizo el siguiente cálculo: In [13]: import math In [14]: math.tan(math.pi/2) Out[14]: 1.633123935319537e+16 Aunque no esperaba que me diese la solución correcta de float(+inf)/float(-inf), me resulta muy corto para el tamaño máximo que podría tener un double: In [16]: sys.float_info.max Out[16]: 1.7976931348623157e+308 He comprobado que pasa lo mismo con scala e, incluso, en el buscador de google (tal vez sea que google usa también python): https://www.google.com/search?q=tan(pi%2F2) ¿Existe alguna explicación? Supongo que a esta altura ya lo has resuelto, pero si no, añado algunas precisiones (pun intended). Lo de Python/Scala/Google es por la libm, la biblioteca matemática estándar de C. Esto muestra el mismo resultado que ves en Python (M_PI_2 es la constante PI/2 ya definida en la biblioteca): #include math.h #include stdio.h int main() { printf(%f\n, tan(M_PI_2)); } Matemáticamente hablando tan(pi/2) no está definido. El límite para valores tendiendo a pi/2 desde 0 es +inf y -inf para x desde 3. Lo que mejor podría hacer tan() es devolver NaN pero debería saber que x es exactamente PI y no un número menor/mayor. Si pruebas con valores ligeramente mayores a M_PI_2 verás que tan() sí cambia el signo. La biblioteca resuelve bien algunas operaciones desde el punto de vista matemático ( ej. 1/+inf ) y otras no (ej. pow(-1, +inf) - 1 y debería ser NaN o domain error). Las libm están llenas de compromisos de ese estilo por performance, implementación, precisión, etc. A esta altura su comportamiento está completamente estandarizado. Me había quedado claro que es un tema de la librería matemática. Mi extrañeza venía por el bajo orden de magnitud del resultado, que queda explicado por la falta de precisión del número pi que emplea la librería matemática. Tal vez se aprecie mejor desde el lado contrario: In [1]: import sys, math In [2]: casi_infinito=sys.float_info.max In [3]: casi_infinito Out[3]: 1.7976931348623157e+308 In [4]: math.atan(casi_infinito)*2==math.pi Out[4]: True In [5]: math.atan(1.7e+16)*2==math.pi Out[5]: True Así es. El siguiente valor a PI/2 que se podría representar en flotantes es PI/2 + epsilon, pero ese ya se pasa y la tangente ya viene del -inf. import sys import math math.tan((math.pi/2)+sys.float_info.epsilon) -6218431163823738.0 -H. ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Re: [Python-es] usuarios de merengue
Gracias! El 07/12/2011, a las 17:46, Luis Miguel Morillas escribió: El día 7 de diciembre de 2011 17:00, Hernán Foffani hfoff...@gmail.com escribió: Hola, Por algunos comentarios que he leído aquí me puse a jugar un poco con Merengue. ¿Hay alguna lista o grupo para usuarios de éste CMS? Hola, Hernan, Puedes usar merengue-develop...@googlegroups.com (en inglés) La presentación que hizo Manuel en el pyday del mes pasado está en http://www.libresoftwareworldconference.com/programa/ponentes/merengue-el-nuevo-y-sorprendente-cms-basado-en-django.html Saludos, -- luismiguel Saludos, -H ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/ ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/ ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Re: [Python-es] Duda con operador de identidad
Porqué pasa esto? a = 'UnaPalabra' b = 'UnaPalabra' a is b True a = 'Dos Palabras' b = 'Dos Palabras' a is b False Python hace caché de ciertos objetos (al menos Python 2.x, sucede así con los enteros cortos). No recuerdo si sucede lo mismo con ciertas cadenas, pero dado que son objetos inmutables, no me extrañaría. Lo hace con las cadenas que pueden ser identificadores válidos. En el segundo caso da Falso por el blanco. ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/