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


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


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

Python es un lenguaje interpretado, interactivo y orientado a objetos.
Incorpora módulos, excepciones, tipado dinámico, tipos de datos de muy
alto nivel y clases. Python combina un poder destacado con una
sintaxis muy clara. Tiene interfaces a muchas llamadas de sistema y
bibliotecas, así como a varios sistemas de ventana, y es extensible en
C o C++. También es usable como un lenguaje de extensión para
aplicaciones que necesitan una interfaz programable. Por último,
Python es portable: corre en muchas variantes de Unix, en Mac y en
Windows 2000 y posteriores.

Para saber más, comienza con El 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 derechos de autor en cualquier
documentación sobre Python que produzcas. Si respetas las reglas de
derechos de autor, 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 gran biblioteca estándar que cubre áreas
como procesamiento de cadenas (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, registro, análisis de rendimiento (*profiling*),
análisis de código Python) e interfaces del sistema operativo
(llamadas al sistema, sistemas de archivos, sockets TCP / IP). Mire la
tabla de contenido de La Biblioteca Estándar de Python para tener una
idea de lo que está disponible. También hay disponible una amplia
variedad de extensiones de terceros. Consulte the Python Package Index
para encontrar paquetes de su interés.


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

Python versions are numbered "A.B.C" or "A.B":

* *A* is the major version number -- it is only incremented for really
  major changes in the language.

* *B* is the minor version number -- it is incremented for less earth-
  shattering changes.

* *C* is the micro version number -- it is incremented for each bugfix
  release.

See **PEP 6** for more information about bugfix releases.

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.

Alpha, beta and release candidate versions have an additional suffix:

* The suffix for an alpha version is "aN" for some small number *N*.

* The suffix for a beta version is "bN" for some small number *N*.

* The suffix for a release candidate version is "rcN" for some small
  number *N*.

In other words, all versions labeled *2.0aN* precede the versions
labeled *2.0bN*, which precede versions labeled *2.0rcN*, and *those*
precede 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.

The documentation is written in reStructuredText and processed by the
Sphinx documentation tool.  The reStructuredText source for the
documentation is part of the Python source distribution.


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

Hay numerosos tutoriales y libros disponibles.  La documentación
estándar incluye  El 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.

The very first article about Python was written in 1991 and is now
quite outdated.

   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 en línea 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?
----------------------------------------------------

The Python project's infrastructure is located all over the world and
is managed by the Python Infrastructure Team. Details here.


¿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?
------------------------

Muy estable. Versiones nuevas y estables han sido publicadas cada
entre 6 y 18 meses desde 1991, y es muy probable que así continúe.
Actualmente pasan alrededor de 18 meses entre los lanzamientos
importantes.

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?
-------------------------

Probablemente hay decenas de miles de usuarios y usuarias, aunque es
difícil obtener una cuenta exacta.

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.

High-profile Python projects include the Mailman mailing list manager
and the Zope application server.  Several Linux distributions, most
notably Red Hat, have written part or all of their installer and
system administration software in Python.  Companies that use Python
internally include Google, Yahoo, and 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.

There are also good IDEs for Python.  IDLE is a cross-platform IDE for
Python that is written in Python using Tkinter. Emacs users will be
happy to know that there is a very good Python mode for Emacs.  All of
these programming environments provide syntax highlighting, auto-
indenting, and access to the interactive interpreter while coding.
Consult the Python wiki for a full list of Python editing
environments.

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