Capítulo 1. El sabor de Py
Este trabajo se ha traducido utilizando IA. Agradecemos tus opiniones y comentarios: translation-feedback@oreilly.com
Sólo los lenguajes feos se hacen populares. Python es la única excepción.
Don Knuth
Misterios
Empecemos con dos mini-misterios y sus soluciones. ¿Qué crees que significan las dos líneas siguientes?
(Row 1): (RS) K18,ssk,k1,turn work. (Row 2): (WS) Sl 1 pwise,p5,p2tog,p1,turn.
Parece técnico, como algún tipo de programa informático. En realidad, es un patrón de punto; concretamente, un fragmento que describe cómo dar la vuelta al talón de un calcetín, como el de la Figura 1-1.
Esto tiene tanto sentido para mí como un rompecabezas de Sudoku para uno de mis gatos, pero mi mujer lo entiende perfectamente. Si eres tejedor, tú también.
Probemos con otro texto misterioso, encontrado en una ficha. Averiguarás enseguida su finalidad, aunque puede que no conozcas su producto final:
1/2 c. butter or margarine 1/2 c. cream 2 1/2 c. flour 1 t. salt 1 T. sugar 4 c. riced potatoes (cold) Be sure all ingredients are cold before adding flour. Mix all ingredients. Knead thoroughly. Form into 20 balls. Store cold until the next step. For each ball: Spread flour on cloth. Roll ball into a circle with a grooved rolling pin. Fry on griddle until brown spots appear. Turn over and fry other side.
Aunque no cocines, probablemente hayas reconocido que se trata de unareceta1Pero, ¿qué es lo que hace? Es lefse, una delicia noruega parecida a una tortilla(Figura 1-2). Unta un poco de mantequilla y mermelada o lo que quieras, enróllala y disfruta.
El patrón de punto y la receta comparten algunas características:
-
Un vocabulario habitual de palabras, abreviaturas y símbolos. Algunos pueden ser familiares, otros desconcertantes.
-
Reglas sobre lo que se puede decir, y sintaxis de dónde.
-
Una secuencia de operaciones que deben realizarse en orden.
-
A veces, una repetición de algunas operaciones (un bucle), como el método para freír cada trozo de lefse.
-
A veces, una referencia a otra secuencia de operaciones (en términos informáticos, una función). En la receta, puede que necesites hacer referencia a otra receta para hacer puré de patatas.
-
Conocimientos supuestos sobre el contexto. La receta supone que sabes lo que es el agua y cómo hervirla. El patrón de punto supone que sabes tejer y hacer punto del revés sin apuñalarte demasiado a menudo.
-
Algunos datos para utilizar, crear o modificar: patatas e hilo.
-
Las herramientas utilizadas para trabajar con los datos: ollas, batidoras, hornos, palos de tricotar.
-
Un resultado esperado. En nuestros ejemplos, algo para los pies y algo para el estómago. Eso sí, no los mezcles.
Como quiera que las llames -idiomas, jerga, pequeños lenguajes-, ves ejemplos de ellas por todas partes. La jerga ahorra tiempo a la gente que la conoce, mientras que desconcierta al resto de nosotros. Intenta descifrar una columna periodística sobre bridge si no juegas a este juego, o un artículo científico si no eres científico (o incluso si lo eres, pero en un campo distinto).
Pequeños programas
Verás todas estas ideas en los programas informáticos, que son en sí mismos como pequeños lenguajes, especializados para que los humanos digan a los ordenadores lo que tienen que hacer. He utilizado el patrón de punto y la receta para demostrar que la programación no es tan misteriosa. Se trata en gran medida de aprender las palabras adecuadas y las reglas.
Ahora bien, ayuda mucho que no haya demasiadas palabras y reglas, y que no tengas que aprender demasiadas a la vez. Nuestro cerebro sólo puede retener una cantidad limitada de cosas a la vez.
Veamos por fin un programa informático real(Ejemplo 1-1) ¿Qué crees que hace?
Ejemplo 1-1. cuenta atrás.py
for
countdown
in
5
,
4
,
3
,
2
,
1
,
"hey!"
:
(
countdown
)
Si has adivinado que se trata de un programa Python que imprime las líneas
5 4 3 2 1 hey!
entonces sabes que Python puede ser más fácil de aprender que una receta o un patrón de punto. Y puedes practicar escribiendo programas Python desde la comodidad y seguridad de tu escritorio, lejos de los peligros del agua caliente y los palos puntiagudos.
El programa Python tiene algunas palabras y símbolos especiales -for
, in
, print
, comas, dos puntos, paréntesis, etc. - que son partes importantes de la sintaxis (reglas) del lenguaje. La buena noticia es que Python tiene una sintaxis más agradable, y menos que recordar, que la mayoría de los lenguajes informáticos. Parece más natural, casi como una receta de cocina.
El Ejemplo 1-2 es otro pequeño programa Python; selecciona un hechizo de Harry Potter de una listaPython y lo imprime.
Ejemplo 1-2. hechizos.py
spells
=
[
"Riddikulus!"
,
"Wingardium Leviosa!"
,
"Avada Kedavra!"
,
"Expecto Patronum!"
,
"Nox!"
,
"Lumos!"
,
]
(
spells
[
3
])
Los conjuros individuales son cadenasPython (secuencias de caracteres de texto, encerradas entre comillas). Están separadas por comas y encerradas en una lista Python que se define encerrando corchetes ([
y ]
). La palabra spells
es una variable que da un nombre a la lista para que podamos hacer cosas con ella. En este caso, el programa imprimiría el cuarto conjuro:
Expecto Patronum!
¿Por qué dijimos 3
si queríamos el cuarto?Una lista Python como spells
es una secuencia de valores, a la que se accede por su desplazamiento desde el principio de la lista. El primer valor está en el desplazamiento 0
, y el cuarto valor está en el desplazamiento 3
.
Nota
La gente cuenta a partir de 1, por lo que puede parecer raro contar a partir de 0. Ayuda pensar en términos de desplazamientos en lugar de posiciones. Sí, éste es un ejemplo de cómo los programas informáticos a veces difieren del uso común del lenguaje.
Las listas son estructuras de datos muy comunes en Python, y el Capítulo 7 muestra cómo utilizarlas.
El programa del Ejemplo 1-3 imprime una cita de uno de los Tres Chiflados, pero referenciada por quién la dijo en lugar de por su posición en una lista.
Ejemplo 1-3. quotes.py
quotes
=
{
"Moe"
:
"A wise guy, huh?"
,
"Larry"
:
"Ow!"
,
"Curly"
:
"Nyuk nyuk!"
,
}
stooge
=
"Curly"
(
stooge
,
"says:"
,
quotes
[
stooge
])
Si ejecutaras este pequeño programa, imprimiría lo siguiente:
Curly says: Nyuk nyuk!
quotes
es una variable que da nombre a un diccionarioPython : unacolección de clavesúnicas (en este ejemplo, el nombre del Chiflado) y valoresasociados (aquí, un dicho notable de ese Chiflado). Utilizando un diccionario, puedes almacenar y buscar cosas por su nombre, lo que suele ser una alternativa útil a una lista.
El ejemplo spells
utilizaba corchetes ([
y ]
) para hacer una lista Python, y el ejemplo quotes
utiliza corchetes rizados ({
y }
, que no tienen nada que ver con Curly), para hacer un diccionario Python. Además, se utilizan dos puntos (:
) para asociar cada clave del diccionario con su valor. Puedes leer mucho más sobre diccionarios en el Capítulo 8.
Espero que no haya sido demasiada sintaxis de golpe. En los próximos capítulos, te encontrarás con más de estas pequeñas reglas, poco a poco.
Un programa más grande
Y ahora, algo completamente distinto:el Ejemplo 1-4 presenta un programa Python que realiza una serie de tareas más complejas. No esperes entender aún cómo funciona el programa; ¡para eso está este libro! La intención es presentarte el aspecto y el funcionamiento de un típico programa Python no trivial. Si conoces otros lenguajes informáticos, evalúa cómo se compara Python. Incluso sin saber Python todavía, ¿puedes averiguar aproximadamente qué hace cada línea antes de leer la explicación que sigue al programa? Ya has visto ejemplos de una lista y un diccionario Python, y esto añade algunas características más.
En impresiones anteriores de este libro, el programa de ejemplo se conectaba a un sitio web de YouTube y recuperaba información sobre sus vídeos más valorados, como "Charlie me mordió el dedo". Funcionó bien hasta poco después de que se secara la tinta de la segunda impresión. Fue entonces cuando Google dejó de dar soporte a este servicio y el programa de ejemplo de la marquesina dejó de funcionar. Nuestro nuevo Ejemplo 1-4 va a otro sitio que debería existir durante más tiempo: la Wayback Machine del Archivo de Internet, un servicio gratuito que ha guardado miles de millones de páginas web (y películas, programas de televisión, música, juegos y otros artefactos digitales) durante 20 años. Verás más ejemplos de este tipo de API web en el Capítulo 18.
El programa te pedirá que escribas una URL y una fecha. A continuación, pregunta a Wayback Machine si tiene una copia de ese sitio web en esa fecha. Si la encuentra, devuelve la información a este programa de Python, que imprime la URL y la muestra en tu navegador web. El objetivo es mostrar cómo Python maneja diversas tareas: recibe la información que escribes, se comunica a través de Internet con un sitio web, obtiene de vuelta algún contenido, extrae una URL de él y convence a tu navegador web para que muestre esa URL.
Si nos devolviera una página web normal llena de texto con formato HTML, tendríamos que averiguar cómo mostrarlo, lo cual es mucho trabajo que confiamos alegremente a los navegadores web. También podríamos intentar extraer las partes que queremos (ver más detalles sobre el web scraping en el Capítulo 18). Cualquiera de las dos opciones supondría más trabajo y un programa más grande. En su lugar, la Wayback Machine devuelve los datos en formato JSON.JSON (JavaScript Object Notation) es un formato de texto legible por humanos que describe los tipos, valores y orden de los datos que contiene. Es otro pequeño lenguaje, y se ha convertido en una forma popular de intercambiar datos entre diferentes lenguajes y sistemas informáticos. Leerás más sobre JSON en el Capítulo 12.
Los programas Python pueden traducir texto JSON enestructuras de datosPython-deltipo que verás en los próximos capítulos- como si tú mismo hubieras escrito un programa para crearlas. Nuestro pequeño programa sólo selecciona una pieza (la URL de la página antigua del sitio web Internet Archive). De nuevo, se trata de un programa Python completo que puedes ejecutar tú mismo. Sólo hemos incluido una pequeña comprobación de errores, para que el ejemplo sea breve. Los números de línea no forman parte del programa; se incluyen para ayudarte a seguir la descripción que proporcionamos después del programa.
Ejemplo 1-4. archive.py
1import
webbrowser
2import
json
3from
urllib.request
import
urlopen
4 5(
"Let's find an old website."
)
6site
=
input
(
"Type a website URL: "
)
7era
=
input
(
"Type a year, month, and day, like 20150613: "
)
8url
=
"http://archive.org/wayback/available?url=
%s
×tamp=
%s
"
%
(
site
,
era
)
9response
=
urlopen
(
url
)
10contents
=
response
.
read
()
11text
=
contents
.
decode
(
"utf-8"
)
12data
=
json
.
loads
(
text
)
13try
:
14old_site
=
data
[
"archived_snapshots"
][
"closest"
][
"url"
]
15(
"Found this copy: "
,
old_site
)
16(
"It should appear in your browser now."
)
17webbrowser
.
open
(
old_site
)
18except
:
19(
"Sorry, no luck finding"
,
site
)
Este pequeño programa de Python hace mucho en unas pocas líneas bastante legibles. Todavía no conoces todos estos términos, pero lo harás en los próximos capítulos. Esto es lo que ocurre en cada línea:
-
Importa (pon a disposición de este programa) todo el código del módulo de la biblioteca estándar de Python llamado
webbrowser
. -
Importa todo el código del módulo de la biblioteca estándar de Python llamado
json
. -
Importa sólo la función
urlopen
del módulo de la biblioteca estándarurllib.request
. -
Una línea en blanco, porque no queremos sentirnos abarrotados.
-
Imprime un texto inicial en tu pantalla.
-
Imprime una pregunta sobre una URL, lee lo que escribes y lo guarda en una variable del programa llamada
site
. -
Imprime otra pregunta, esta vez leyendo un año, un mes y un día, y guárdala en una variable llamada
era
. -
Construye una variable de cadena llamada
url
para que Wayback Machine busque su copia del sitio y la fecha que has escrito. -
Conéctate al servidor web en esa URL y solicita un servicio web concreto.
-
Obtén los datos de la respuesta y asígnalos a la variable
contents
. -
Descodifica
contents
a una cadena de texto en formato JSON, y asígnala a la variabletext
. -
Convierte
text
adata
-Estructuras de datos de Python. -
Comprobación de errores:
try
para ejecutar las cuatro líneas siguientes, y si alguna falla, ejecuta la última línea del programa (después deexcept
). -
Si hemos obtenido una coincidencia para este sitio y esta fecha, extrae su valor de un diccionario Python de tres niveles. Observa que esta línea y las dos siguientes están indentadas. Así es como Python sabe que van con la línea
try
precedente. -
Imprime la URL que hemos encontrado.
-
Imprime lo que ocurrirá después de que se ejecute la siguiente línea.
-
Muestra la URL que hemos encontrado en tu navegador.
-
Si algo falló en las cuatro líneas anteriores, Python salta hasta aquí.
-
Si falla, imprime un mensaje y el sitio que buscábamos. Está sangrado porque sólo debe ejecutarse si se ejecuta la línea
except
anterior.
Cuando ejecuté esto en una ventana de terminal, escribí la URL de un sitio y una fecha, y obtuve esta salida de texto:
$ python archive.py Let's find an old website. Type a website URL: lolcats.com Type a year, month, and day, like 20150613: 20151022 Found this copy: http://web.archive.org/web/20151102055938/http://www.lolcats.com/ It should appear in your browser now.
Y la Figura 1-3 muestra lo que apareció en mi navegador.
En el ejemplo anterior, hemos utilizado algunos de los módulos dela biblioteca estándar de Python (programas que se incluyen con Python cuando se instala), pero no hay nada sagrado en ellos. Python dispone de un excelente software de terceros.El Ejemplo 1-5 es una reescritura que accede al sitio web del Archivo de Internet con un paquete de software externo de Python llamado requests
.
Ejemplo 1-5. archivo2.py
1import
webbrowser
2import
requests
3 4(
"Let's find an old website."
)
5site
=
input
(
"Type a website URL: "
)
6era
=
input
(
"Type a year, month, and day, like 20150613: "
)
7url
=
"http://archive.org/wayback/available?url=
%s
×tamp=
%s
"
%
(
site
,
era
)
8response
=
requests
.
get
(
url
)
9data
=
response
.
json
()
10try
:
11old_site
=
data
[
"archived_snapshots"
][
"closest"
][
"url"
]
12(
"Found this copy: "
,
old_site
)
13(
"It should appear in your browser now."
)
14webbrowser
.
open
(
old_site
)
15except
:
16(
"Sorry, no luck finding"
,
site
)
La nueva versión es más corta, y supongo que más legible para la mayoría de la gente. Leerás más sobre requests
en el Capítulo 18, y sobre el software Python de autoría externa en general en el Capítulo 11.
Python en el mundo real
Entonces, ¿merece la pena dedicar tiempo y esfuerzo a aprender Python? Python existe desde 1991 (más antiguo que Java, más joven que C), y se encuentra sistemáticamente entre los cinco lenguajes informáticos más populares. A la gente le pagan por escribir programas en Python: cosas serias que utilizas a diario, como Google, YouTube, Instagram, Netflix y Hulu. Yo lo he utilizado para aplicaciones de producción en muchos ámbitos. Python tiene una reputación de productividad que atrae a las organizaciones que se mueven con rapidez.
Encontrarás Python en muchos entornos informáticos, incluidos éstos:
-
La línea de comandos en una ventana de monitor o terminal
-
Interfaces gráficas de usuario (GUI), incluida la web
-
La web, del lado del cliente y del lado del servidor
-
Servidores backend que soportan grandes sitios populares
-
La nube (servidores gestionados por terceros)
-
Dispositivos móviles
-
Dispositivos integrados
Los programas Python van desde scriptspuntuales -comolos que has visto hasta ahora en este capítulo- hasta sistemas de millones de líneas.
La Encuesta a Desarrolladores de Python 2018contiene cifras y gráficos sobre el lugar actual de Python en el mundo de la informática.
Veremos sus usos en sitios web, administración de sistemas y manipulación de datos. En los últimos capítulos, veremos usos específicos de Python en las artes, la ciencia y los negocios.
Python contra el lenguaje del Planeta X
¿Cómo se compara Python con otros lenguajes? ¿Dónde y cuándo elegirías uno en lugar de otro? En esta sección, muestro ejemplos de código de otros lenguajes, sólo para que puedas ver cómo es la competencia. No se espera que los entiendas si no has trabajado con ellos. (Cuando llegues al ejemplo final de Python, puede que te sientas aliviado por no haber tenido que trabajar con algunos de los otros).
Cada programa debe imprimir un número y decir algo sobre la lengua.
Si utilizas un terminal o una ventana de terminal, el programa que lee lo que escribes, lo ejecuta y muestra los resultados se llama programa shell.El shell de Windows se llamacmd
; ejecuta archivos por lotes con el sufijo .bat
.Linux y otros sistemas similares a Unix (incluido macOS) tienen muchos programas shell. El más popular se llamabash
o sh
. El intérprete de comandos tiene capacidades sencillas, como lógica simple y expandir símbolos comodín como*
en nombres de archivo. Puedes guardar comandos en archivos llamadosguiones de intérprete de comandos y ejecutarlos más tarde. Estos pueden ser los primeros programas con los que te encuentres como programador. El problema es que los guiones de intérprete de comandos no escalan bien más allá de unos cientos de líneas, y son mucho más lentos que los lenguajes alternativos. El siguiente fragmento muestra un pequeño programa de intérprete de comandos:
#!/bin/sh language=0 echo "Language $language: I am the shell. So there."
Si guardaras esto en un archivo como test.sh
y lo ejecutaras con sh test.sh
, verías lo siguiente en tu pantalla:
Language 0: I am the shell. So there.
Los viejos incondicionalesCyC++son lenguajes de nivel bastante bajo, que se utilizan cuando la velocidad es lo más importante. Tu sistema operativo y muchos de sus programas (incluido el programa python
de tu ordenador) probablemente estén escritos en C o C++.
Estos dos son más difíciles de aprender y mantener. Tienes que controlar muchos detalles, comola gestión de la memoria, lo que puede provocar fallos en el programa y problemas difíciles de diagnosticar. Aquí tienes un pequeño programa en C:
#include <stdio.h> int main(int argc, char *argv[]) { int language = 1; printf("Language %d: I am C! See? Si!\n", language); return 0; }
C++ se parece a la familia C, pero ha desarrollado algunas características distintivas:
#include <iostream> using namespace std; int main() { int language = 2; cout << "Language " << language << \ ": I am C++! Pay no attention to my little brother!" << \ endl; return(0); }
JavayC#son sucesores de C y C++ que evitan algunos de los problemas de sus antepasados -especialmente la gestión de la memoria-, pero pueden ser algo verbosos. El ejemplo que sigue muestra algo de Java:
public class Anecdote { public static void main (String[] args) { int language = 3; System.out.format("Language %d: I am Java! So there!\n", language); } }
Si no has escrito programas en ninguno de estos lenguajes, puede que te preguntes: ¿qué es todo eso? Nosotros sólo queríamos imprimir una simple línea. Algunos lenguajes llevan un bagaje sintáctico considerable, del que aprenderás más en el Capítulo 2.
C, C++ y Java son ejemplos delenguajes estáticos, que te obligan a especificar algunos detalles de bajo nivel, como los tipos de datos del ordenador.El Apéndice A muestra cómo un tipo de datos como un entero tiene un número específico de bits en tu ordenador y sólo puede hacer cosas relacionadas con los enteros.En cambio, los lenguajes dinámicos(también llamados lenguajes de scripting) no te obligan a declarar los tipos de variables antes de utilizarlas.
El lenguaje dinámico por excelencia durante muchos años fuePerl. Perl es muy potente y dispone de extensas bibliotecas. Sin embargo, su sintaxis puede ser torpe, y el lenguaje parece haber perdido impulso en los últimos años en favor de Python y Ruby. Este ejemplo te regala un bon mot de Perl:
my $language = 4; print "Language $language: I am Perl, the camel of languages.\n";
Rubyes un lenguaje más reciente. Toma prestado un poco de Perl, y es popular sobre tododebido a Ruby on Rails, un marco de desarrollo web. Se utiliza en muchas de las mismas áreas que Python, y la elección de uno u otro puede reducirse a una cuestión de gustos, o de bibliotecas disponibles para tu aplicación concreta. Aquí tienes un fragmento de Ruby:
language = 5 puts "Language #{language}: I am Ruby, ready and aglow."
PHP, que puedes ver en el ejemplo que sigue, es muy popular para el desarrollo web porque facilita la combinación de HTML y código. Sin embargo, el propio lenguaje PHP tiene una serie de inconvenientes, y PHP no se ha puesto de moda como lenguaje general fuera de la web. Esto es lo que parece:
<?PHP $language = 6; echo "Language $language: I am PHP, a language and palindrome.\n"; ?>
Go(o Golang, si intentas buscarlo en Google) es un lenguaje reciente que intenta ser a la vez eficiente y amigable:
package main import "fmt" func main() { language := 7 fmt.Printf("Language %d: Hey, ho, let's Go!\n", language) }
Otra alternativa moderna a C y C++ esRust:
fn main() { println!("Language {}: Rust here!", 8)
¿Quién queda? Ah, sí, Python:
language
=
9
(
f
"Language {language}: I am Python. What's for supper?"
)
¿Por qué Python?
Una razón, no necesariamente la más importante, es la popularidad. Según diversas medidas, Python lo es:
-
El lenguaje de programación de mayorcrecimiento, como puedes ver en la Figura 1-4.
-
Los editores delÍndice T IOBE de junio de 2019 dicen: "Este mes Python ha vuelto a alcanzar un máximo histórico en el índice TIOBE del 8,5%. Si Python puede mantener este ritmo, probablemente sustituirá a C y Java dentro de 3 ó 4 años, convirtiéndose así en el lenguaje de programación más popular del mundo."
-
Lenguaje de programación del año 2018 (TIOBE), y el mejor clasificado porIEEE SpectrumyPyPL.
-
El lenguaje más popular para los cursos introductorios de informática en las principalesuniversidades estadounidenses.
-
La lengua oficial de enseñanza secundaria en Francia.
Más recientemente, se ha hecho extremadamente popular en los mundos de la ciencia de datos y el aprendizaje automático. Si quieres conseguir un trabajo de programación bien remunerado en un área interesante, Python es una buena opción ahora. Y si estás contratando, hay un creciente grupo de desarrolladores experimentados en Python.
Pero, ¿por qué es popular? Los lenguajes de programación no desprenden precisamente carisma. ¿Cuáles son algunas de las razones subyacentes?
Python es un buen lenguaje de propósito general y alto nivel. Su diseño lo hace muy legible, lo cual es más importante de lo que parece. Todo programa informático se escribe una sola vez, pero se lee y revisa muchas veces, a menudo por muchas personas. Ser legible también hace que sea más fácil de aprender y recordar; por tanto, más escribible. Comparado con otros lenguajes populares, Python tiene una curva de aprendizaje suave que te hace productivo antes, pero tiene profundidades que puedes explorar a medida que adquieres experiencia.
La relativa brevedad de Python te permite escribir programas más pequeños que sus equivalentes en un lenguaje estático. Los estudios han demostrado que los programadores tienden a producir aproximadamente el mismo número de líneas de código al día -independientemente del lenguaje-, por lo que reducir a la mitad las líneas de código duplica tu productividad, así de fácil. Python es el arma no tan secreta de muchas empresas que piensan que esto es importante.
Y por supuesto, Python es libre, como la cerveza (precio) y la palabra (libertad). Escribe lo que quieras con Python, y úsalo donde quieras, libremente. Nadie puede leer tu programa Python y decir: "Qué bonito programa tienes ahí. Sería una pena que le pasara algo".
Python funciona en casi todas partes y tiene "pilas incluidas", es decir, un montón de software útil en su biblioteca estándar. Este libro presenta muchos ejemplos de la biblioteca estándar y de código Python útil de terceros.
Pero, tal vez, la mejor razón para usar Python sea una inesperada: la gente suele disfrutar programando con él, en lugar de verlo como un mal necesario para hacer las cosas. No estorba. Una cita conocida es que "se adapta a tu cerebro". A menudo, los desarrolladores dirán que echan de menos algún diseño de Python cuando necesitan trabajar en otro lenguaje. Y eso separa a Python de la mayoría de sus compañeros.
¿Por qué no Python?
Python no es el mejor lenguaje para todas las situaciones.
No está instalado por defecto en todas partes.El Apéndice B te muestra cómo instalar Python si aún no lo tienes en tu ordenador.
Es lo suficientemente rápido para la mayoría de las aplicaciones, pero puede no serlo para algunas de las más exigentes. Si tu programa pasa la mayor parte del tiempo calculando cosas (el término técnico es CPU-bound), un programa escrito en C, C++, C#, Java, Rust o Go se ejecutará generalmente más rápido que su equivalente en Python. ¡Pero no siempre!
Aquí tienes algunas soluciones:
-
A veces un algoritmo mejor (una solución por pasos) en Python supera a uno ineficiente en C. La mayor velocidad de desarrollo en Python te da más tiempo para experimentar con alternativas.
-
En muchas aplicaciones (sobre todo, en la web), un programa mueve sus pulgares mientras espera una respuesta de algún servidor a través de una red. La CPU (unidad central de procesamiento, el chip del ordenador que hace todos los cálculos) apenas interviene; por consiguiente, los tiempos de extremo a extremo entre programas estáticos y dinámicos serán cercanos.
-
El intérprete estándar de Python está escrito en C y puede ampliarse con código C. Hablo un poco de ello en el Capítulo 19.
-
Los intérpretes de Python son cada vez más rápidos. Java era terriblemente lento en sus inicios, y se invirtió mucho dinero e investigación en acelerarlo. Python no es propiedad de una corporación, por lo que sus mejoras han sido más graduales. En "PyPy", hablo del proyecto PyPy y sus implicaciones.
-
Puede que tengas una aplicación extremadamente exigente y, hagas lo que hagas, Python no satisfaga tus necesidades. Las alternativas habituales son C, C++ y Java.Go(que se parece a Python pero funciona como C) o Rust también podrían merecer la pena.
Python 2 frente a Python 3
Una complicación de tamaño medio es que existen dos versiones de Python. Python 2 existe desde siempre y está preinstalado en Linux y en los ordenadores Apple. Ha sido un lenguaje excelente, pero nada es perfecto. En los lenguajes informáticos, como en muchas otras áreas, algunos errores son cosméticos y fáciles de arreglar, mientras que otros son difíciles. Los difíciles son incompatibles: los nuevos programas escritos con ellos no funcionarán en el antiguo sistema Python, y los viejos programas escritos antes del arreglo no funcionarán en el nuevo sistema.
El creador de Python(Guido van Rossum) y otros decidieron agrupar las correcciones difíciles y las presentaron como Python 3 en 2008. Python 2 es el pasado, y Python 3 es el futuro. La versión final de Python 2 es la 2.7, y seguirá existiendo durante un tiempo, pero es el final de la línea; no habrá Python 2.8. El fin del soporte del lenguaje Python 2 será en enero de 2020. Se dejarán de hacer correcciones de seguridad y de otro tipo, y muchos paquetes importantes de Pythondejarán de dar soportea Python 2 para entonces. Los sistemas operativos pronto dejarán de darsoportea Python 2 o pasarán a dar soporte a Python 3 por defecto. La conversión del software popular de Python a Python 3 ha sido gradual, pero ya hemos pasado el punto de inflexión. Todo el nuevo desarrollo se hará en Python 3.
Este libro trata sobre Python 3. Su aspecto es casi idéntico al de Python 2. El cambio más obvio es que print
es una función en Python 3, por lo que debes llamarla con paréntesis alrededor de sus argumentos. El cambio más importante es el manejo de caracteres Unicode, que se trata en el Capítulo 12. Señalo otras diferencias significativas a medida que surgen.
Instalar Python
En lugar de abarrotar este capítulo, puedes encontrar los detalles sobre cómo instalar Python 3 en el Apéndice B. Si no tienes Python 3, o no estás seguro, ve allí y mira lo que tienes que hacer en tu ordenador. Sí, es un coñazo (concretamente, el coñazo anterior derecho), pero sólo tendrás que hacerlo una vez.
Ejecutar Python
Cuando hayas instalado una copia operativa de Python 3, podrás utilizarla para ejecutar los programas Python de este libro, así como tu propio código Python. ¿Cómo se ejecuta realmente un programa Python? Hay dos formas principales:
-
El intérprete interactivoincorporado de Python (también llamado shell) es la forma más fácil de experimentar con pequeños programas. Escribes comandos línea a línea y ves los resultados inmediatamente. Con el estrecho acoplamiento entre escribir y ver, puedes experimentar más rápidamente. Utilizaré el intérprete interactivo para demostrar las características del lenguaje, y tú puedes escribir los mismos comandos en tu propio entorno Python.
-
Para todo lo demás, guarda tus programas Python en archivos de texto, normalmente con la extensión .py, y ejecútalos escribiendo
python
seguido de esos nombres de archivo.
Probemos ahora ambos métodos.
Utilizar el Intérprete Interactivo
La mayoría de los ejemplos de código de este libro utilizan el intérprete interactivo incorporado. Cuando escribas los mismos comandos que ves en los ejemplos y obtengas los mismos resultados, sabrás que vas por buen camino.
Inicias el intérprete escribiendo sólo el nombre del programa Python principal de tu ordenador: debería serpython
, python3
, o algo similar. Para el resto de este libro, suponemos que se llama python
; si el tuyo tiene un nombre diferente, escríbelo siempre que veas python
en un ejemplo de código.
El intérprete interactivo funciona casi exactamente igual que Python en los archivos, con una excepción: cuando escribes algo que tiene un valor, el intérprete interactivo imprime su valor por ti automáticamente. Esto no forma parte del lenguaje Python, sino que es una característica del intérprete para ahorrarte tener que escribir print()
todo el tiempo.
Por ejemplo, si inicias Python y tecleas el número 27
en el intérprete, se emitirá un eco en tu terminal (si tienes la línea 27
en un archivo, Python no se enfadará, pero no verás imprimirse nada cuando ejecutes el programa):
$ python Python 3.7.2 (v3.7.2:9a3ffc0492, Dec 24 2018, 02:44:43) [Clang 6.0 (clang-600.0.57)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> 27 27
Nota
En el ejemplo anterior,$
es un prompt de muestra del sistema para que escribas un comando comopython
en la ventana del terminal. Lo utilizamos para los ejemplos de código de este libro, aunque tu prompt puede ser diferente.
Por cierto,print()
también funciona dentro del intérprete cuando quieres imprimir algo:
>>>
(
27
)
27
Si has probado estos ejemplos con el intérprete interactivo y has visto los mismos resultados, acabas de ejecutar código Python real (aunque diminuto). En los próximos capítulos, pasarás de los programas de una sola línea a programas Python más largos.
Utilizar archivos Python
Si pones 27
en un archivo por sí mismo y lo ejecutas a través de Python, se ejecutará, pero no imprimirá nada. En programas Python normales no interactivos, necesitas llamar a la función print
para imprimir cosas:
(
27
)
Hagamos un archivo de programa Python y ejecutémoslo:
-
Abre tu editor de texto.
-
Escribe la línea
print(27)
, tal y como aparece aquí. -
Guárdalo en un archivo llamado prueba.py. Asegúrate de guardarlo como texto sin formato en lugar de en un formato "enriquecido" como RTF o Word. No es necesario que utilices el sufijo .py para los archivos de tus programas Python, pero te ayudará a recordar cuáles son.
-
Si utilizas una GUI -eso es casi todo el mundo- abre una ventana de terminal.2
-
Ejecuta tu programa escribiendo lo siguiente:
$ python test.py
Deberías ver una única línea de salida:
27
¿Ha funcionado? Si es así, enhorabuena por ejecutar tu primer programa Python autónomo.
¿Y ahora qué?
Vas a escribir comandos a un sistema Python real, y tienen que seguir la sintaxis legal de Python. En lugar de soltarte todas las reglas de sintaxis de golpe, las iremos repasando a lo largo de los próximos capítulos.
La forma básica de desarrollar programas Python es utilizando un editor de texto sin formato y una ventana de terminal. En este libro utilizo visualizaciones de texto sin formato, a veces mostrando sesiones interactivas de terminal y a veces fragmentos de archivos Python. Debes saber que también existen muchos buenosentornos de desarrollo integrados (IDE) para Python, que pueden incluir interfaces gráficas de usuario con edición avanzada de texto y visualizaciones de ayuda. Puedes conocer los detalles de algunos de ellos en el Capítulo 19.
Tu momento Zen
Cada lenguaje informático tiene su propio estilo. En el Prefacio, mencioné que a menudo hay una formapitónica de expresarse. En Python hay un poco de verso libre que expresa sucintamente la filosofía de Python (que yo sepa, Python es el único lenguaje que incluye un huevo de Pascua de este tipo). Sólo tienes que escribir import this
en tu intérprete interactivo y pulsar la tecla Intro siempre que necesites este momento de Zen:
>>>
import
this
The Zen of Python, by Tim Peters
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one--and preferably only one--obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea--let's do more of those!
Sacaré ejemplos de estos sentimientos a lo largo del libro.
Próximamente
El siguiente capítulo habla de los tipos de datos y variables de Python. Esto te preparará para los capítulos siguientes, que profundizan en los tipos de datos y estructuras de código de Python en detalle.
Cosas que hacer
Este capítulo ha sido una introducción al lenguaje Python: qué hace, cómo es y dónde encaja en el mundo de la informática. Al final de cada capítulo, sugiero algunos miniproyectos para ayudarte a recordar lo que acabas de leer y prepararte para lo que está por venir.
1.1 Si aún no tienes Python 3 instalado en tu ordenador, hazlo ahora. Lee el Apéndice B para conocer los detalles de tu sistema informático.
1.2 Inicia el intérprete interactivo Python 3. De nuevo, los detalles están en el Apéndice B. Debería imprimir unas líneas sobre sí mismo y luego una sola línea que empiece por >>>
. Ese es tu prompt para escribir comandos de Python.
1.3 Juega un poco con el intérprete. Utilízalo como una calculadora y escribe esto:8 * 9
. Pulsa la tecla Intro para ver el resultado. Python debería imprimir 72
.
1.4 Escribe el número 47
y pulsa la tecla Intro. ¿Te imprimió 47
en la línea siguiente?
1.5 Ahora, escribe print(47)
y pulsa Intro. ¿Eso también te imprimió 47
en la línea siguiente?
1 Normalmente sólo se encuentra en libros de cocina y en novelas de misterio.
2 Si no estás seguro de lo que esto significa, consulta el Apéndice B para obtener información detallada sobre los distintos sistemas operativos.
Get Introducción a Python, 2ª Edición now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.