#30 cierras el archivo con close()?
#30 No sé si te entiendo, cuando haces write no esperas a nada. Como mucho a que acabe el write :/
#32 no sabia q lo estabas haciendo con with open xd
pon el codigo tio xd
https://docs.python.org/3/library/functions.html#open
#2 muy útil lo de virtualenv, no lo conocía. Tenía instalado enthough canopy en windows (una especie de ide fácil de instalar que trae varias librerías científicas de python preinstaladas como scipy y más cosas para data science y así) y con los 4-5 comandos que has puesto me he creado un entorno virtual del python 2.7 que me había instalado el ide y ahora puedo usarlo para otros proyectos sin tocar entorno que ya tenía configurado ^^
#13 #14 aqui a lo que me referia, que me explique mal, tengo un proyecto con su setup.py y el tema es que me gustaria poder cambiar el proyecto mientras corro la consola para hacer debugging, y no se como hacerlo. Actualmente lo instalo con pip:
python setup.py sdist
cd dist
pip install admm4block
Pero si modifico algo no puedo "reinstalar" desde la consola...
Este es mi archivo setup.py
from setuptools import setup,find_packages
from codecs import open
from os import path
here = path.abspath(path.dirname(__file__))
with open(path.join(here,'docs/README.txt'), encoding = 'utf-8') as f:
long_description = f.read()
setup(
name='admm4block',
version='0.3dev',
description='ADMM4block solver for DNNSDP',
long_description = long_description,
url = 'XXX',
author = 'XXXX
author_email = XXX
license='GNU GENERAL PUBLIC LICENSE',
classifiers=[
'Development Status :: 3 - Alpha',
'Intended Audience :: Science/Research',
'License :: OSI Approved :: GNU General Public License (GPL)',
'Programming Language :: Python :: 2',
'Programming Language :: Python :: 2.3',
'Programming Language :: Python :: 2.4',
'Programming Language :: Python :: 2.5',
'Programming Language :: Python :: 2.6',
'Programming Language :: Python :: 2.7',
'Topic :: Scientific/Engineering :: Mathematics'
],
keywords = 'Convex Optimization SDP',
test_suite = 'nose.collector',
tests_require = ['nose'],
packages=find_packages(exclude = ['contrib','docs','tests*']),
scripts=['bin/points.py','bin/alignment.py'],
install_requires=['numpy','scipy']
)
#38 aqui me pillas a mi en fuera de juego xd, ¿no estaras usando por algun casual ipython notebook/jupyter?
Por otro lado con:
python -i tu_script.py
Se "ejecutara" y luego entraras al shell con el cargado. Supongo q no es lo q buscas.
http://stackoverflow.com/questions/2534480/proper-way-to-reload-a-python-module-from-the-console
Igual os interesa esto a los que estéis buscando algún curso de introducción a Python/programación en general:
https://www.edx.org/course/introduction-computer-science-mitx-6-00-1x-6
El curso empieza justo hoy.
Soy relativamente nuevo en Python, pero cuanto más lo uso más me gusta. Últimamente me llama la atención todo el tema del análisis de datos y el web scraping, y el otro día empecé a programar un script para analizar las palabras que se usan en el foro. A ver si me animo a avanzar con él y lo comparto.
Me quedo por aquí, que me encanta ver los proyectos que hace la gente
Soy fan de python, me parece de los mejores lenguajes, sintaxis simple, 'duck typing', trabaja con unicode de manera nativa, bastante rápido, eficaz y con una gran comunidad activa que desarrolla miles de librerías. Llevo tiempo desarrollando webs en python utilizando Django por si alguno tenéis dudas.
Mi granito de arena:
Instalador de repositorios PIP
Página de PIP: https://pip.pypa.io/en/stable/
Es la ventana de acceso al mundo de python, permite instalar librerías de python y sus dependencias de manera sencilla, además de subir tus propias librerías y compartirlas con el mundo. Tiene un funcionamiento muy simple a través de consola, ideal para los usuarios de Linux.
Instalar PIP para python3.x en distro de ubuntu y derivadas:
sudo apt-get install python3-pip
Una vez instalado podremos añadir librerías python a nuestro proyecto de la siguiente manera:
pip3 install <nombre-librería>
En el repositorio oficial de python, https://pypi.python.org/pypi podrás encontrar miles de librerías que puedes instalar utilizando este sistema. También permite instalar librerías privadas y proyectos extraídos de GitHub
Django
https://www.djangoproject.com/
Completo framework para la creación de sitios webs. Entre sus características:
-
Utiliza el modelo MVC para la creación de página.
-
ORM que permite manipular cualquier base de datos. (Oracle, sqlite, mysql, postgresql...). Además simplifica trabajar con bases de datos.
-
Gestor de plantillas. Puedes elegir entre Django template, Jinja2. Aunque también puedes instalar otras.
-
Sistema multidiomas y e internacionalización.
-
Sistema de creación y manipulación de Formularios html.
-
Panel de administración y gestión de usuario integradas.
-
Ultra personalizable.
-
Comunidad activa con miles de plugins para simplificar el trabajo.
Para mi el mejor framework web de Python. Y quizás de los mejores en general. Una vez lo aprendas a usar le darás una patada a PHP y a todos sus frameworks.
Para instalar:
pip3 install django
Scrapy
Librería que ayudará a #43. Permite extraer datos de páginas webs y otros lugares de internet
pip3 install scrapy
Beautiful Soup
Esta libería permite analizar y transforma el código basado en etiquetas (html, xml...) en objetos de python. Se puede usar para destripar código html y acceder al texto y las propiedades de este.
http://www.crummy.com/software/BeautifulSoup/bs4/doc/
Para instalar
pip3 install beautifulsoup4
pillow
http://python-pillow.github.io/
Librería para la manipulación de imágenes. Permite recortar, cambiar tamaño, añadir filtros y texto a una imagen, entre otras cosas.
instalar:
pip3 install pillow
Eh puesto estas 3 porque son fáciles de usar, más adelante iré añadiendo alguna más.
Si te animas a ampliar la información sumaría (Así no están desperdigados por varios mensajes):
Requests, scapy y modulos ya de python en si como re, strings, json, itertools,collections, threading, multiprocesing, asyncio y functools.
Son librerías bastante importantes.
Un saludo!
Desde el punto de vista de programación me gustaría entender sus ventajas e inconvenientes frente a otros lenguajes, pongo lo que yo opino:
[Ventajas]
- Gran comunidad con bastante open source
- Multiplataforma y multiproposito (es decir, no te atas a un sistema operativo ni a un tipo de programación concreta: web, escritorio...)
- Decían por ahí intuitivo, pero a mi me parece igual que cualquiera de los actuales
[Inconvenientes] - Interpretado (más lento que compilado)
- Bajo control de sintaxis
- Bajo tipado
- Al tener propósitos genéricos y poder ser usado en web, escritorio y otros no es tan especializado en una materia como puede ser asp o jsp (para web) y c# o j2me (para escritorio)
- Me da la impresión de ser un lenguaje sin arquitecturas concretas (o yo no las he usado)
Me gustaría conocer vuestra opinión, gracias
#45 Hay muchas librerías, las 3 que mostré anteriormente son las primeras que se me han venido a la cabeza porque trabajo frecuentemente con ellas. Pero si veo alguna interesante la pondré aquí.
Algunas más:
Requests
http://es.python-requests.org/en/latest/
Permite trabajar de manera muy simple con el protocolo Http. Con esta libería puedes acceder a páginas webs, enviar datos POSTS y cookies entre otras muchas cosas.
pip3 install requests
Twisted
https://twistedmatrix.com/trac/
Librería que permite trabajar con todo tipo de protocolos de red: tcp, dns, smtp, pop3... la lista es larga.
boto3
http://boto3.readthedocs.org/en/latest/
Permite utilizar los servicios en la nube de amazon: base de datos en la nube, storage en la nube y otras funciones. Existen otras librerías de terceros que permiten combinar estos servicios con django pudiendo guardar datos y archivos en la nube utilizando las funciones de django.
pip3 install boto3
libsass
https://pypi.python.org/pypi/libsass
Permite compilar el código sass (http://sass-lang.com/) con python.
pip3 install libsass
python-social-auth
http://psa.matiasaguirre.net/
librería para django y otros frameworks web que permite crear usuarios webs desde redes sociales: Facebook, twitter, google+, github...
pip3 install python-social-auth
#47
Java, y c/c++ son también multipropósitos y ambos son lenguajes rápidos y eficaces. Además que python sea un lenguaje con tipificación dinámica (Duck typing) no es necesariamente una desventaja. La tipificación estática te mayor rigidez y facilidad para corregir errores. La tipificación dinámica por contrario te da mayor flexibilidad y libertad, pero es más propenso a generar fallos y tener una mayor desorganización. Si es una desventaja o no depende del programador.
Otra cosa, python no es un lenguaje interpretado, no en el sentido estricto. Python compila en un lenguaje intermedio que luego es interpretado por máquinas virtuales. Es muy similar a java->bytecode. De hecho se puede compilar python en bytecode de java, desplegarlo sobre una máquina virtual de java y utilizar paquetes .jar. También se pueden crear librerías c/c++ que pueden ser utilizadas posteriormente en python.
Python en java
Instalar el interprete de python sobre java. http://www.jython.org/
En ubuntu:
sudo apt-get install jython
Crear un fichero python con librerías java
from javax.swing import JFrame
window = JFrame('hola mundo', defaultCloseOperation=JFrame.EXIT_ON_CLOSE, size=(100, 100), visible=True)
Compilar código python utilizando jython.
jython nombre-fichero.py
#49 Un poco si que es.
Con las librerías de java es más simple, puesto que python es compilado en bytecodes de java, así que en teoría se puede usar cualquier librería de Java en python. Pero en c/c++ no. Aquí tienes 2 opciones o bien usar cython como ha dicho #50, o bien crear librerías c/c++ adaptadas a python.
Si usas cython, en teoría puedes utilizar cualquier librería c/c++ pero como desventaja no programas en python puro sino que usas una sintaxis exclusiva para este sistema.
Ventajas:
- es más rápido que python puro puesto que el código compila en c/c++.
- Puedes usar cualquier librería de c/c++
Desventaja:
- La sintaxis python se complica, no mucho, pero es diferente.
- No es portable, dado que compila c/c++.
Otra opción es crear librerías c/c++ para utilizarse en python. Ver: https://docs.python.org/3.4/extending/extending.html
Ventajas:
- Código python puro. No necesitas aprender nada nuevo.
- El código python sigue siendo portable. Simplemente habría que adaptar la librería c/c++ al nuevo SSOO.
Desventaja: - Solo puedes incluir librerías c/c++ creadas para python. No puedes añadir cualquiera.
- No es tan rápido con cython.
para los que vayais a empezar en python, os dejo este pdf. no esta nada mal, pero no deja de ser una peque;a introduccion.
http://repositori.uji.es/xmlui/bitstream/handle/10234/102653/s93.pdf
a ver si se encuentra uno para oop.
Un par de preguntas, son un poco chorras pero por si alguien puede ayudar.
- Si tengo una clase con un porrón de métodos estáticos de una sola línea como este:
@staticmethod
def hacer_cosa(item):
"""
hace cosa con item
"""
return item**2
está bien/mal visto o está bien/mal hecho el cambiar todos esos tochos por expresiones lambda? Voy a poder seguir accediendo a las funciones con clase.hacer_cosa(), pero me voy a ahorrar 6 líneas por función y va a ser todo muchísimo más legible.
El otro es una tontería, ¿Qué diferencia hay entre delcarar una clase con
class nombre_de_clase:
y
class nombre_de_clase():
?
No estoy metiendo herencia en ninguna (Ni siquiera de object en p2) y no sé si los paréntesis hacen algo de lo que no me estoy enterando. Hasta ahora nunca he usado paréntesis a no ser que tuviera que heredar de alguna otra clase y no he visto nada raro...
Las expresiones lambda están bien para algo ad hoc, pero si es una clase y ese método lo utilizarás en distintas ocasiones es más correcto como lo tienes, no te preocupes por tener mil métodos que solo hagan una cosa, es más, lo ideal es que cada método haga una y sólo una cosa.
En cuanto a las declaraciones de clase, simplemente, es zen de python:
"Explicit is better than implicit"
Desde python 2.2 creo recordar que se recomendaba utilizar esta sintaxis:
class nombre_de_clase():
Ahora, con python3 (aunque yo sigo estancado en 2.7), recomiendan:
class nombre_de_clase(object):
Un saludo!
#54 Que yo sepa heredar de object es para declarar classes newtype in python 2, en python 3 son todas newtype por defecto y no hay que heredar de nada. De todas formas mi duda era esa, si hay alguna diferencia entre una clase declarada con () y sin ().
Sobre el manejo de excepciones,
try:
call1() # raises ExceptionE
call2() # raises ExceptionE
except ExceptionE:
pass
Quiero que call1() y call2() se ejecuten. Levantan el mismo tipo de excepción, así que si meto ambas llamadas en el mismo try block y la primera ya rompe, la segunda no se ejecuta. ¿Cuál es la mejor forma de escribir esta llamada? Porque meter dos try-except separados queda bastante feo y no sé si anidarlo es la solución.
edit* puto [code] de mv
#56 ¿Tienes acceso al código que lanza la exceción? Porque siendo así, otra cosa que puedes hacer, algo más barroca, es definir dos classes que hereden de ExceptionE y hacer que call1 lance la primera y call2 la segunda. Haces dos excepts, uno para cada una y ya tienes lo que quieres. Pero claro, como digo, para eso deberías poder modificar el código de las funciones.
Dicho esto, no te compliques y haz dos trys