Preguntas frecuentes generales sobre Python
*******************************************


Información General
===================


¿Qué es Python?
---------------

Python is an interpreted, interactive, object-oriented programming
language.  It incorporates modules, exceptions, dynamic typing, very
high level dynamic data types, and classes.  It supports multiple
programming paradigms beyond object-oriented programming, such as
procedural and functional programming. Python combines remarkable
power with very clear syntax. It has interfaces to many system calls
and libraries, as well as to various window systems, and is extensible
in C or C++.  It is also usable as an extension language for
applications that need a programmable interface. Finally, Python is
portable: it runs on many Unix variants including Linux and macOS, and
on Windows.

Para saber más, comienza con Tutorial de Python.  La  Beginner's Guide
to Python vincula a otros recursos y tutoriales introductorios para
aprender Python.


¿Que es la *Python Software Foundation*?
----------------------------------------

La *Python Software Foundation* es una organización independiente sin
fines de lucro que posee los derechos sobre Python desde la versión
2.1 en adelante. La misión de la PSF es hacer avanzar la tecnología
*open source* relacionada al lenguaje de programación Python y
publicitar su uso. El sitio web de la PSF es
https://www.python.org/psf/.

Las donaciones a la PSF están exentas de impuestos en Estados Unidos.
Si usas Python y lo encuentras útil, por favor contribuye a través de
la página de donaciones de la PSF.


¿Hay restricciones de *copyright* sobre el uso de Python?
---------------------------------------------------------

Puedes hacer cualquier cosa que quieras con el código fuente mientras
mantengas y muestres los mensajes de *copyrights* en cualquier
documentación sobre Python que produzcas. Si respetas las reglas de
*copyright*, está permitido usar Python para fines comerciales, vender
copias de Python en forma de código fuente o binarios (modificados o
no), o vender productos que incorporen Python de alguna manera. De
cualquier manera nos gustaría saber de todos los usos comerciales de
Python, por supuesto.

Mira la página PSF license para encontrar explicaciones más detalladas
y un vínculo al texto completo de la licencia.

El logo de Python tiene derechos comerciales (*trademarked*) y en
ciertos casos se requiere un permiso de uso. Consulta la Trademark
Usage Policy para más información.


¿Por qué motivos se creó Python?
--------------------------------

Aquí hay un *muy* breve resumen sobre qué fue lo que comenzó todo,
escrita por Guido van Rossum:

   Tenía vasta experiencia implementando un lenguaje interpretado en
   el grupo ABC en CWI y trabajando con este grupo había aprendido
   mucho sobre diseño de lenguajes. Este es el origen de muchas
   características de Python, incluyendo el uso de sangría para el
   agrupamiento de sentencias y la inclusión de tipos de datos de muy
   alto nivel (aunque los detalles son todos diferentes en Python).

   Tenía algunos resquemores sobre el lenguaje ABC pero también me
   gustaban muchas de sus características. Era imposible extenderlo
   (al lenguaje o sus implementaciones) para remediar mis quejas -- de
   hecho, la ausencia de extensibilidad fue uno de los mayores
   problemas. Contaba con alguna experiencia usando Modula-2+ y
   conversé con los diseñadores de Modula-3 y leí su reporte. Modula-3
   es el origen de la sintaxis y semántica que usé para las
   excepciones y otras características de Python.

   Estaba trabajando en Grupo del sistema operativo distribuido Amoeba
   en CWI. Necesitábamos una mejor manera de hacer administración de
   sistemas que escribir programas en C o *scripts* de *Bourne shell*,
   ya que Amoeba tenía sus propia interfaz de llamadas a sistema que
   no era fácilmente accesible desde *Bourne shell*. Mi experiencia
   con el manejo de errores de Amoeba me hizo muy consciente de la
   importancia de las excepciones como una característica de los
   lenguaje de programación.

   Se me ocurrió que un lenguaje de scripts con una sintaxis como ABC
   pero con acceso a las llamadas al sistema Amoeba satisfaría la
   necesidad. Me di cuenta de que sería una tontería escribir un
   lenguaje específico para Amoeba, así que decidí que necesitaba un
   lenguaje que fuera generalmente extensible.

   Durante las vacaciones de Navidad de 1989 tenía mucho tiempo libre,
   así que decidí hacer un intento. Durante el año siguiente, mientras
   seguía trabajando principalmente en él durante mi propio tiempo,
   Python se utilizó en el proyecto Amoeba con un éxito creciente, y
   los comentarios de mis colegas me hicieron agregar muchas mejoras
   iniciales.

   En febrero de 1991, justo después de un año de desarrollo, decidí
   publicarlo en USENET. El resto está en el archivo "Misc/HISTORY".


¿Para qué es bueno Python?
--------------------------

Python es un lenguaje de programación de propósito general de alto
nivel que se puede aplicar a muchas clases diferentes de problemas.

El lenguaje viene con una vasta biblioteca estándar que cubre áreas
como el procesamiento de texto (expresiones regulares, unicode,
cálculo de diferencias entre archivos), protocolos de Internet (HTTP,
FTP, SMTP, XML-RPC, POP, IMAP, programación CGI), ingeniería de
software (pruebas unitarias, *logging*, perfilamiento, análisis
sintáctico y gramatical de código Python) e interfaces con el sistema
operativo (llamadas a sistema, sistemas de archivo, *sockets* TCP/IP).
Mira la tabla de contenidos en La Biblioteca Estándar de Python para
tener una idea de qué está disponible. Una amplia variedad de
extensiones de terceros también están disponibles. Consulta el Python
Package Index  para encontrar paquetes de tu interés.


¿Cómo funciona el esquema numérico de versiones de Python?
----------------------------------------------------------

La versiones de Python están numeradas A.B.C o A.B. A es el numero de
versión más importante -- sólo es incrementado por cambios realmente
grandes en el lenguaje. B es el número de versión secundario (o
menor), incrementado ante cambios menos traumáticos. C es el nivel
micro -- se incrementa en cada lanzamiento de corrección de errores.
Mira el **PEP 6** para más información sobre los lanzamientos de
corrección de errores.

No todos los lanzamientos son de corrección de errores. En el período
previo a un lanzamiento importante, una serie de lanzamientos de
desarrollo son realizados, denotados como *alpha*, *beta* o *release
candidate*. Las versiones *alphas* son lanzamientos tempranos en los
que las interfaces no están todavía finalizadas; no es inesperado que
una interfaz cambie entre dos lanzamientos *alpha*. Las *betas* son
más estables, preservando las interfaces existentes pero posiblemente
agregando nuevos módulos. Los *release candidates* están congelados,
sin hacer cambios excepto los necesarios para corregir bugs críticos.

Las versiones *alpha*, *beta* y *release candidates* tienen un sufijo
adicional. El sufijo para la versión alpha es "aN" para algunos
números N pequeños; el sufijo para beta es "bN" para algunos números N
pequeños, y el sufijo para *release candidates* es "cN" para algunos
números N pequeños. En otras palabras, todas las versiones etiquetadas
2.0aN preceden a las 2.0bN, que preceden a las etiquetadas 2.0cN, y
*todas esas* preceden a la 2.0.

También puedes encontrar números de versión con un sufijo "+", por
ejemplo "2.2+". Estas son versiones sin lanzar, construidas
directamente desde el repositorio de desarrollo de CPython. En la
práctica, luego de que un lanzamiento menor se realiza, la versión es
incrementada a la siguiente versión menor, que se vuelve "a0", por
ejemplo "2.4a0".

Mira también la documentación para  "sys.version", "sys.hexversion", y
"sys.version_info".


¿Cómo obtengo una copia del código fuente de Python?
----------------------------------------------------

El código fuente de la versión más reciente de Python está siempre
disponible desde python.org, en https://www.python.org/downloads/.  El
código fuente en desarrollo más reciente se puede obtener en
https://github.com/python/cpython/.

La distribución de fuentes es un archivo tar comprimido con gzip que
contiene el código C completo, documentación en formato Sphinx, los
módulos de la biblioteca de Python, programas de ejemplo y varias
piezas útiles de software libremente distribuibles.  El código fuente
compilará y se ejecutará sin problemas en la mayoría de las
plataformas Unix.

Consulta  Getting Started section of the Python Developer's Guide para
más información sobre cómo obtener el código fuente y compilarlo.


¿Cómo consigo documentación sobre Python?
-----------------------------------------

La documentación estándar para la versión estable actual de Python
está disponible en  https://docs.python.org/3/. También están
disponibles versiones en PDF, texto plano y HTML descargable en
https://docs.python.org/3/download.html.

La documentación está escrita en reStructuredText y procesada con  la
herramienta de documentación Sphinx. Las fuentes reStructuredText de
la documentación son parte de la distribución fuente de Python.


Nunca he programado antes. ¿Hay un tutorial de Python?
------------------------------------------------------

Hay numerosos tutoriales y libros disponibles.  La documentación
estándar incluye  Tutorial de Python.

Consulta the Beginner's Guide para encontrar información para
principiantes en Python,  incluyendo una lista de tutoriales.


¿Hay un *newsgroup* o una lista de correo dedicada a Python?
------------------------------------------------------------

Hay un grupo de noticias, *comp.lang.python*, y una lista de correo,
python-list.  Tanto el grupo de noticias como la lista de correo están
interconectadas entre sí -- si puedes leer las noticias no es
necesario que te suscribas a la lista de correo. *comp.lang.python*
tiene mucho tráfico, recibiendo cientos de publicaciones cada día. y
los lectores de Usenet suelen ser más capaces de hacer frente a este
volumen.

Los anuncios de nuevos lanzamientos de software y eventos se pueden
encontrar en comp.lang.python.announce, una lista moderada de bajo
tráfico que recibe alrededor de cinco publicaciones por día. Está
disponible como la lista de correos de anuncios de Python.

Más información sobre listas de correo o grupos de noticias puede
hallarse en  https://www.python.org/community/lists/.


¿Cómo obtengo una versión de prueba *beta* de Python?
-----------------------------------------------------

Las versiones alpha y beta están disponibles desde
https://www.python.org/downloads/.  Todos los lanzamientos son
anunciados en el grupo de noticias comp.lang.python y
comp.lang.python.announce, así como también en la página principal de
Python en https://www.python.org/; un *feed* RSS está disponible.

También puedes acceder a la versión en desarrollo de Python desde Git.
Mira The Python Developer's Guide  para los detalles.


¿Cómo envío un reporte de *bug* y parches para Python?
------------------------------------------------------

Para reportar un *bug* o enviar un parche, por favor usa la
instalación de Roundup en https://bugs.python.org/.

Debes tener una cuenta de Roundup para reportar *bugs*; esto nos
permite contactarte si tenemos más preguntas. También permite que
Roundup te envíe actualizaciones cuando haya actualizaciones sobre tu
*bug*. Si previamente usaste SourceForge para reportar bugs a Python,
puedes obtener tu contraseña de Roundup a través del procedimiento de
reinicio de contraseña de Roundup.

Para más información sobre cómo se desarrolla Python, consulta the
Python Developer's Guide.


¿Hay algún artículo publicado sobre Python que pueda referir?
-------------------------------------------------------------

Lo más probable es que lo mejor sea citar a tu libro preferido sobre
Python.

El primer artículo publicado sobre Python fue escrito en 1991 y quedó
bastante desactualizado.

   Guido van Rossum y Jelke de Boer, "*Interactively Testing Remote
   Servers Using the Python Programming Language", CWI Quarterly,
   Volume 4, Issue 4 (Diembre de 1991), Amsterdam, pp 283--303*.


¿Hay libros sobre Python?
-------------------------

Sí, hay muchos, y hay más siendo publicados. Mira la wiki de
python.org en https://wiki.python.org/moin/PythonBooks para ver una
lista.

También puedes buscar "Python" en las librerías online y excluir las
que refieran a los Monty Python; o quizás buscar "Python" y
"lenguaje".


¿En qué parte del mundo está ubicado www.python.org?
----------------------------------------------------

La infraestructura del proyecto Python está ubicada alrededor de todo
el mundo y es gestionada por el *Python Infraestructure Team*.
Detalles aquí.


¿Por qué se llama Python?
-------------------------

Cuando comenzó a implementar Python, Guido van Rossum también estaba
leyendo los guiones publicados de "Monty Python's Flying Circus", una
serie de comedia producida por la BBC de los 70'. Van Rossum pensó que
necesitaba un nombre que fuera corto, único y ligeramente misterioso,
entonces decidió llamar al lenguaje Python.


¿Debe gustarme "Monty Python's Flying Circus"?
----------------------------------------------

No, pero ayuda. :)


Python en el mundo real
=======================


¿Cuán estable es Python?
------------------------

Very stable.  New, stable releases have been coming out roughly every
6 to 18 months since 1991, and this seems likely to continue.  As of
version 3.9, Python will have a major new release every 12 months
(**PEP 602**).

Los desarrolladores publican lanzamientos de "bugfix" (corrección de
errores) para versiones antiguas, así que la estabilidad de las
versiones existentes mejora gradualmente. Los lanzamientos de
corrección de errores, indicados por el tercer componente del número
de versión (e.g 3.5.3, 3.6.2) son gestionados para estabilidad; sólo
correcciones de problemas conocidos se incluyen en uno de estos
lanzamientos, y está garantizado que las interfaces se mantendrán a lo
largo de la misma serie.

La última versión estable siempre se puede encontrar en la página
Python download page. Hay dos versiones de Python que están listas
para producción: la 3.x y la 2.x. La versión recomendada es la 3.x,
que es soportada por la mayoría de las bibliotecas más usadas. Aunque
la versión 2.x aún se usa, no es mantenida desde el 1º de enero de
2020.


¿Cuánta gente usa Python?
-------------------------

There are probably millions of users, though it's difficult to obtain
an exact count.

Python está disponible gratuitamente para ser descargado por lo que no
existen cifras de ventas, a su vez se incluye en muchos sitios
diferentes y está empaquetado en muchas distribuciones de Linux, por
lo que las estadísticas de descarga tampoco cuentan toda la historia.

El grupo de noticias comp.lang.python es muy activo, pero no todos los
usuarios de Python publican allí o incluso lo leen.


¿Hay proyectos significativos hechos con Python?
------------------------------------------------

Mira https://www.python.org/about/success para una lista de proyecto
que usan Python. Consultar las actas de conferencias de Python pasadas
revelará contribuciones de diferentes empresas y organizaciones.

Proyectos en Python de alto perfil incluyen el  gestor de listas de
correo Mailman y el servidor de aplicaciones Zope.  Muchas
distribuciones de Linux, más notoriamente Red Hat, han escrito partes
de sus instaladores y software de administración en Python. Entre las
empresas que usan Python internamente se encuentran Google, Yahoo y
Lucasfilm Ltd.


¿Qué nuevos desarrollos se esperan para Python en el futuro?
------------------------------------------------------------

Mira https://www.python.org/dev/peps/ para las *Python Enhancement
Proposals* ("Propuestas de mejora de Python", PEPs). Las PEPs son
documentos de diseño que describen una nueva funcionalidad sugerida
para Python, proveyendo una especificación técnica concisa y una razón
fundamental. Busca una PEP titulada "Python X.Y Release Schedule",
donde X.Y es una versión que aún no ha sido publicada.

Los nuevos desarrollos son discutidos en la lista de correo python-
dev.


¿Es razonable proponer cambios incompatibles a Python?
------------------------------------------------------

En general no. Ya existen millones de líneas de código Python
alrededor del mundo, por lo que cualquier cambio en el lenguaje que
invalide más que una fracción muy pequeña de los programas existentes
tiene que ser mal visto. Incluso si puedes proporcionar un programa de
conversión, todavía existe el problema de actualizar toda la
documentación; se han escrito muchos libros sobre Python y no queremos
invalidarlos a todos de un plumazo.

Si una funcionalidad se debe cambiar,  es necesario proporcionar una
ruta de actualización gradual.  **PEP 5** describe el procedimiento
seguido para introducir cambios incompatibles con versiones anteriores
para minimizar disrupciones a los usuarios y usuarias.


¿Python es un buen lenguaje para principiantes?
-----------------------------------------------

Sí.

Todavía es común hacer comenzar a estudiantes con lenguajes
procedimentales de tipado estático como Pascal, C o un subconjunto de
C++ o Java. Los y las estudiantes pueden verse favorecidos si aprenden
Python como primer lenguaje. Python tiene una sintaxis simple y
consistente y una gran biblioteca estándar. Y, más importante, usar
Python en cursos introductorios de programación permite a los
estudiantes concentrarse en lo importante de las habilidades de
programación como la descomposición de problemas y el diseño de tipos
de datos. Con Python los estudiantes pueden ser rápidamente
introducidos a conceptos como bucles y procedimientos. Incluso puede
trabajar con objetos definidos por el usuario en su primer curso.

Para estudiantes que nunca han programado antes, usar un lenguaje de
tipado estático parece antinatural. Presenta complejidades adicionales
que deben ser dominadas y ralentizan el ritmo del curso. Quienes están
aprendiendo intentan pensar como la computadora, descomponer
problemas, diseñar interfaces consistentes y encapsular datos. Si bien
aprender a usar un lenguaje de tipado estático es importante en el
largo plazo, no es necesariamente el mejor tema a tratar en un primer
curso de programación.

Muchos otros aspectos de Python lo vuelven un buen primer lenguaje.
Como Java, Python tiene una biblioteca estándar, de manera que los y
las estudiantes pueden recibir, de manera temprana, consignas para
realizar proyectos de programación que *hagan* algo. Estas consignas
no están restringidas a las típicas calculadoras de cuatro operaciones
o programas de balances contables. Al usar la biblioteca estándar,
pueden ganar la satisfacción de trabajar en aplicaciones realistas
mientras aprenden los fundamentos de la programación. Usar la
biblioteca estándar también enseña a reusar código. Módulos de
terceros, como PyGame, también ayudan a extender los alcances de los y
las estudiantes.

El intérprete interactivo de Python les permite probar funcionalidades
del lenguaje mientras programan. Pueden tener una ventana con el
intérprete corriendo mientras escriben el código de su programa en
otra. Si no recuerdan los métodos para una lista, pueden hacer algo
así:

   >>> L = []
   >>> dir(L) 
   ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__',
   '__dir__', '__doc__', '__eq__', '__format__', '__ge__',
   '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__',
   '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__',
   '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__',
   '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__',
   '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear',
   'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove',
   'reverse', 'sort']
   >>> [d for d in dir(L) if '__' not in d]
   ['append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

   >>> help(L.append)
   Help on built-in function append:

   append(...)
       L.append(object) -> None -- append object to end

   >>> L.append(1)
   >>> L
   [1]

Con el intérprete, la documentación nunca está lejos de los o las
estudiantes mientras están programando.

También hay buenas IDEs para Python. IDLE es una IDE multiplataforma
para Python que está escrita en Python usando Tkinter. PythonWin es un
IDE específico para Windows. Quienes usan Emacs estarán felices de
saber que hay un modo para Python muy bueno.  Todos estos entornos de
programación proveen resaltado de sintaxis, auto-sangrado y acceso al
intérprete interactivo mientras se programa. Consulta  la wiki de
Python para ver una lista completa de entornos de programación.

Si quieres discutir el uso de Python en la educación, quizás te
interese unirte a la la lista de correo edu-sig.
