Está en la página 1de 126

Tabla de contenido

Introducción 1.1

Dedicación 1.2
Prefacio 1.3
Sobre Python 1.4
Instalación 1,5
Primeros pasos 1,6
Lo esencial 1,7
Operadores y Expresiones 1.8
Flujo de control 1,9
Funciones 1,10
Módulos 1,11
Estructuras de datos 1.12
Resolución de problemas 1,13
Programación orientada a objetos 1,14
Entrada y salida 1,15
Excepciones 1,16
Biblioteca estándar 1,17
Más 1,18
Qué sigue 1,19
Apéndice: FLOSS 1,20
Apéndice: Acerca de 1,21
Apéndice: Historial de revisiones 1,22
Apéndice: Traducciones 1,23
Apéndice: Procedimientos de 1,24
traducción
Realimentación 1,25

1
Introducci

Un byte de Python
"A Byte of Python" es un libro gratuito sobre programación utilizando el lenguaje Python. Sirve como tutorial o guía del
lenguaje Python para una audiencia principiante. Si todo lo que sabe acerca de las computadoras es cómo guardar archivos de
texto, este es el libro para usted.

Para Python versión 3


Este libro le enseñará a usar Python versión 3. También habrá orientación para que se adapte a la versión 2 de Python más
antigua y más común del libro.

¿Quién lee un byte de Python?


Esto es lo que dice la gente sobre el libro:

En algún momento alrededor de 2004-05, cuando estaba convencido de que no era lo suficientemente inteligente como para
ser programador, me encontré con el A Byte original de #Python, y eso cambió toda mi perspectiva sobre la informática y
la vida, le debo mucho a ese libro. @swaroopch había escrito. -Rahul el 30 de julio de 2020

Este es el libro que me introdujo en la programación hace casi una década. Gracias @swaroopch. Cambiaste mi vida. -
Stefan Froelich el 2 de agosto de 2019

Le escribo este correo electrónico para agradecerle la gran ayuda que me ha brindado su libro. Fue un libro realmente
bueno que disfruté muchísimo. Como un chico de 15 años que nunca antes había hecho programación, intentar aprender
Python en línea era difícil y no podía entender nada. Pero sentí que su libro fue mucho más fácil de entender y me ayudó a
entrar en el nuevo mundo de la programación. Gracias a ti, ahora puedo escribir un idioma de alto nivel con facilidad.
Pensé que programar sería difícil y aburrido, pero con la ayuda de su libro, ¡me di cuenta de lo divertido e interesante que,
a la par que simple, puede ser! Me gustaría agradecerles nuevamente por su arduo trabajo para ayudar a principiantes como
yo. -Prottyashita Tahiyat el 17 de septiembre de 2019

¡Este es el mejor tutorial para principiantes que he visto! Gracias por su esfuerzo. -Walt Michalik

Lo mejor que encontré fue "A Byte of Python", que es simplemente un libro brillante para principiantes. Está bien escrito,
los conceptos están bien explicados con ejemplos evidentes. -Joshua Robin

Excelente introducción suave a la programación #Python para principiantes - Shan

Rajasekaran empiece a amar Python con cada página que lea - Herbert Feutl

guía perfecta para principiantes de Python, te dará la clave para desbloquear el mundo mágico de Python - Dilip

Debería estar haciendo mi "trabajo" real, pero acabo de encontrar "Un byte de Python". Una gran guía con grandes
ejemplos. -Biólogo john

Recientemente comencé a leer un Byte de Python. Impresionante trabajo. Y eso también gratis. Muy recomendado para
aspirantes a pythonistas. -Mangesh

Un byte de Python, escrito por Swaroop. (este es el libro que estoy leyendo actualmente). Probablemente el mejor para
empezar, y probablemente el mejor del mundo para cada novato o incluso para un usuario más experimentado. -Apostolos

Disfrutando leyendo #ByteOfPython por @swaroopch el mejor libro de todos los tiempos - Yuvraj Sharma

A Byte of Python de @swaroopch sigue siendo la "mejor guía para principiantes de Python" - Nickson Kaigi

2
Introducci

Muchas gracias por escribir A Byte Of Python. Empecé a aprender a codificar hace dos días y ya estoy creando algunos
juegos simples. Su guía ha sido un sueño y solo quería hacerle saber lo valioso que ha sido. - Franklin

Soy de la Facultad de Ingeniería de Dayanandasagar (séptimo sem, CSE). En primer lugar, quiero decir que su libro "El
byte de Python" es un libro demasiado bueno para un principiante en Python como yo. Los conceptos están tan bien
explicados con ejemplos simples que me ayudaron a aprender Python fácilmente. Muchas gracias. - Madhura

Soy un estudiante de informática de 18 años que estudia en la Universidad de Irlanda. Me gustaría expresarle mi gratitud
por escribir su libro "A Byte of Python", ya tenía conocimiento de 3 lenguajes de programación: C, Java y Javascript, y
Python fue, con mucho, el lenguaje más fácil que he aprendido, y eso se debió principalmente a que su libro era fantástico e
hizo que aprender Python fuera muy simple e interesante. Es uno de los libros de programación mejor escritos y fáciles de
seguir que he leído.
Felicitaciones y sigan con el gran trabajo. - Matt

Hola, soy de República Dominicana. Mi nombre es Pavel, recientemente leí tu libro A Byte of Python y lo considero
excelente !! :). Aprendí mucho de todos los ejemplos. Tu libro es de gran ayuda para novatos como yo ... -Pavel Simo

Soy un estudiante de China, ahora, le he leído el libro A byte of Python, Oh, es hermoso. El libro es muy simple pero puede
ayudar a todos los principiantes. Sabes que soy interesante en Java y la computación en la nube muchas veces, tengo que
codificar el programa para el servidor, así que creo que Python es una buena opción, termina tu libro, creo que no solo es
una buena opción, debe usar Python. Mi inglés no es muy bueno, el correo electrónico para ti, ¡solo quiero agradecerte! Los
mejores deseos para ti y tu familia. - Roy Lau

Recientemente terminé de leer Byte of Python y pensé que realmente debería agradecerte. Me entristeció mucho llegar a
las páginas finales, ya que ahora tengo que volver a manuales aburridos, tediosos, etc., para aprender sobre Python. De
todos modos, realmente aprecio tu libro.Samuel Young

Estimado Swaroop: Estoy tomando una clase de un instructor que no tiene interés en enseñar. Estamos usando Learning
Python, segunda edición, de O'Reilly. No es un texto para principiantes sin conocimientos de programación, y un instructor
que debería estar trabajando en otro campo. Muchas gracias por su libro, sin él no tendría ni idea de Python y la
programación. Un millón de gracias, puede desglosar el mensaje a un nivel que los principiantes pueden entender y no
todos. -José Duarte

¡Amo tu libro! Es el mejor tutorial de Python de todos los tiempos y una referencia muy útil. ¡Brillante, una verdadera obra
maestra! ¡Sigan con el buen trabajo! - Chris-André Sommerseth

En primer lugar, quiero agradecerles por este gran libro. Creo que es un buen libro para aquellos que buscan un tutorial
para principiantes de Python. Creo que fue hace dos o dos años, cuando escuché por primera vez sobre este libro. En ese
momento, todavía no puedo leer ningún libro en inglés, así que obtuve una traducción al chino, lo que me llevó a la puerta
de la programación Python. Recientemente, releí este libro. Esta vez, por supuesto, la versión en inglés. No podía creer
que pudiera leer todo el libro sin mi diccionario a mano. Por supuesto, todo se debe a su esfuerzo por hacer que este libro
sea fácil de entender. -myd7349

Solo le estoy enviando un correo electrónico para agradecerle por escribir Byte of Python en línea. Había estado probando
Python durante unos meses antes de tropezar con su libro, y aunque tuve un éxito limitado con pyGame, nunca completé un
programa. Gracias a su simplificación de las categorías, Python realmente parece un objetivo alcanzable. Parece que
finalmente he aprendido los fundamentos y puedo continuar hacia mi objetivo real, el juego.desarrollo Una vez más,
MUCHAS gracias por colocar tales............................................................. a
guía estructurada y útil para la programación básica en la web. Me empujó dentro y fuera de OOP con un entendimiento
donde dos libros de texto habían fallado. -Matt Gallivan

Me gustaría agradecerle por su libro A Byte of Python, que yo mismo encuentro la mejor manera de aprender Python.
Tengo 15 años, vivo en Egipto y me llamo Ahmed. Python fue mi segundo lenguaje de programación. Aprendí Visual Basic
6 en la escuela, pero no lo disfruté, sin embargo, realmente disfruté aprendiendo Python. Hice el programa de la libreta de
direcciones y tuve éxito. Intentaré comenzar a hacer más programas y leer programas de Python (si pudiera decirme la
fuente, sería útil). También comenzaré a aprender Java y si me pueden decir dónde encontrar un tutorial tan bueno como el
suyo para Java, eso me ayudaría mucho. Gracias. -Ahmed Mohammed

3
Introducci

Un recurso maravilloso para los principiantes que desean aprender más sobre Python es el tutorial en PDF de 110 páginas
A Byte of Python de Swaroop C H. Está bien escrito, es fácil de seguir y puede ser la mejor introducción a la
programación de Python disponible. -Drew Ames

Ayer revisé la mayor parte de Byte of Python en mi Nokia N800 y es la introducción más fácil y concisa a Python que he
encontrado. Muy recomendable como punto de partida para aprender Python. -Jason Delport

Byte of Vim and Python de @swaroopch es, con mucho, el mejor trabajo en escritura técnica para mí. Excelentes lecturas
#FeelGoodFactor -Surendran

"Byte de Python" el mejor de lejos (en respuesta a la pregunta "¿Alguien puede sugerir un recurso bueno y económico
para aprender los conceptos básicos de Python?") - Justin LoveVerdadero

El Byte de libro de Python fue muy útil. Gracias a lo grande :) Chinmay

Siempre he sido un fanático de A Byte of Python, hecho tanto para programadores nuevos como experimentados. -Patrick
Harrington

Empecé a aprender Python hace unos días de su libro ... gracias por un libro tan bonito. está tan bien escrito, me hiciste la
vida más fácil ... así que encontraste un nuevo fan tuyo ... ese soy yo :) toneladas de gracias. -Gadadhari Bheem

Antes de comenzar a aprender Python, adquirí habilidades básicas de programación en Ensamblador, C, C ++, C # y Java.
La verdadera razón por la que quería aprender Python es que es popular (la gente habla de él) y poderoso (la realidad). Este
libro escrito por el Sr. Swaroop es una muy buena guía tanto para los nuevos programadores como para los nuevos
programadores de Python. Tomó 10 días y medio para revisarlo. ¡Gran ayuda! -Fang Biyi (PhD Candidate ECE, Michigan
State University)

¡¡Muchas gracias por este libro !! Este libro aclaró muchas preguntas que tenía sobre ciertos aspectos de Python, como la
programación orientada a objetos. No me siento como un experto en OO, pero sé que este libro me ayudó en uno o dos
primeros pasos. Ahora he escrito varios programas de Python que realmente hacen cosas reales para mí como
administrador del sistema. Todos están orientados a los procedimientos, pero son pequeños según los estándares de la
mayoría de las personas. Nuevamente, gracias por este libro. Gracias por tenerlo en la web. -- Beto

Solo quiero agradecerles por escribir el primer libro sobre programación que realmente he leído. Python es ahora mi
primer idioma y puedo imaginar todas las posibilidades. Así que gracias por darme las herramientas para crear cosas que
nunca hubiera imaginado que podría hacer antes. - "La morsa"

Quería agradecerle por escribir A Byte Of Python (versiones 2 y 3). Ha sido invaluable para mi experiencia de aprendizaje
en Python y Programación en general. No hace falta decir que soy un principiante en el mundo de la programación, un par
de meses de autoaprendizaje hasta este momento. Había estado usando tutoriales de youtube y algunos otros tutoriales en
línea, incluidos otros libros gratuitos. Decidí indagar en tu libro ayer, y he aprendido más en las primeras páginas que en
cualquier otro libro o tutorial. Algunas cosas sobre las que me había confundido se aclararon con un GRAN ejemplo y una
explicación. ¡¡No puedo esperar para leer (y aprender) más !! Muchas gracias no solo por escribir el libro, sino por ponerlo
bajo la licencia creative commons (gratis).
Gracias a Dios que hay gente desinteresada como tú que nos ayuda y nos enseña al resto. - Chris

Te escribí en 2011 y estaba entrando en Python y quería agradecerte por tu tutorial "A Byte of Python". Sin él, me habría
quedado en el camino. Desde entonces he pasado a programar una serie de funciones en mi organización con este lenguaje
con más en el horizonte. No me llamaría programador avanzado de ninguna manera, pero ahora noto la solicitud ocasional de
ayuda de otros desde que comencé a usarlo. Descubrí, mientras leía "Byte", por qué había dejado de estudiar C y C ++ y era
porque el libro que me dieron comenzó con un ejemplo que contenía una tarea aumentada. Por supuesto, no había
explicación para esta disposición de operadores y caí de cabeza tratando de darle sentido a lo que estaba en la página escrita.
Según recuerdo, fue un ejercicio de lo más frustrante que finalmente abandoné. No significa que C o C ++ sea imposible de
aprender, o incluso que soy estúpido, pero sí significa que la documentación que me abrí paso no definía los símbolos y
palabras, que es una parte esencial de cualquier instrucción. Así como las computadoras no podrán entender una palabra de
computadora o un símbolo de computadora que esté fuera de la sintaxis del idioma que se está usando, un estudiante nuevo
en cualquier campo no comprenderá su materia si encuentra palabras o símbolos para los que no hay definiciones. Obtienes
una "pantalla azul" por así decirlo en cualquier caso. Sin embargo, la solución es simple: busque la palabra o símbolo y

4
Introducci
obtenga la definición o símbolo adecuado y, he aquí, la computadora o el estudiante pueden continuar. Tu libro o incluso que
soy estúpido, pero eso significa que la documentación con la que trabajé no definía los símbolos y las palabras, lo cual es una
parte esencial de cualquier instrucción. Así como las computadoras no podrán entender una palabra de computadora o un
símbolo de computadora que esté fuera de la sintaxis del idioma que se está usando, un estudiante nuevo en cualquier campo
no comprenderá su materia si encuentra palabras o símbolos para los que no hay definiciones. Obtienes una "pantalla azul"
por así decirlo en cualquier caso. Sin embargo, la solución es simple: busque la palabra o símbolo y obtenga la definición o
símbolo adecuado y, he aquí, la computadora o el estudiante pueden continuar. Tu libro o incluso que soy estúpido, pero eso
significa que la documentación con la que trabajé no definía los símbolos y las palabras, lo cual es una parte esencial de
cualquier instrucción. Así como las computadoras no podrán entender una palabra de computadora o un símbolo de
computadora que esté fuera de la sintaxis del idioma que se está usando, un estudiante nuevo en cualquier campo no
comprenderá su materia si encuentra palabras o símbolos para los que no hay definiciones. Obtienes una "pantalla azul" por
así decirlo en cualquier caso. Sin embargo, la solución es simple: busque la palabra o símbolo y obtenga la definición o
símbolo adecuado y, he aquí, la computadora o el estudiante pueden continuar. Tu libro Así como las computadoras no
podrán entender una palabra de computadora o un símbolo de computadora que esté fuera de la sintaxis del idioma que se
está usando, un estudiante nuevo en cualquier campo no comprenderá su materia si encuentra palabras o símbolos para los
que no hay definiciones. Obtienes una "pantalla azul" por así decirlo en cualquier caso. Sin embargo, la solución es simple:
busque la palabra o símbolo y obtenga la definición o símbolo adecuado y, he aquí, la computadora o el estudiante pueden
continuar. Tu libro Así como las computadoras no podrán entender una palabra de computadora o un símbolo de
computadora que esté fuera de la sintaxis del idioma que se está usando, un estudiante nuevo en cualquier campo no
comprenderá su materia si encuentra palabras o símbolos para los que no hay definiciones. Obtienes una "pantalla azul" por
así decirlo en cualquier caso. Sin embargo, la solución es simple: busque la palabra o símbolo y obtenga la definición o
símbolo adecuado y, he aquí, la computadora o el estudiante pueden continuar. Tu libro encuentre la palabra o símbolo y
obtenga la definición o símbolo apropiado y he aquí, la computadora o el estudiante pueden continuar. Tu libro encuentre la
palabra o símbolo y obtenga la definición o símbolo apropiado y he aquí, la computadora o el estudiante pueden continuar.
Tu libro

5
Introducci

estaba tan bien armado que encontré muy poco en él que no pudiera comprender. Así que gracias. Le animo a que continúe
incluyendo definiciones completas de términos. La documentación con Python es buena, una vez que la conoces (los
ejemplos son su fuerza por lo que veo) pero en muchos casos parece que tienes que saber para entender la documentación
que en mi opinión no es la que debería ser. Los tutoriales de terceros expresan la necesidad de aclarar la documentación y
su éxito depende en gran medida de las palabras que se utilizan para describir la terminología. He recomendado su libro a
muchos otros. Algunos en Australia, algunos en el Caribe y otros en Estados Unidos. Llena un nicho que ningún otro hace.
Espero que lo esté haciendo bien y le deseo todo el éxito en el futuro. - Nick

oye, esto es ankush (19). Me enfrentaba a una gran dificultad para comenzar con Python. Probé muchos libros, pero todos
eran más voluminosos y no estaban orientados a objetivos; y luego encontré este encantador, que me hizo amar a Python en
poco tiempo. Muchas gracias por este "hermoso libro". - Ankush

Me gustaría agradecerle por su excelente guía sobre Python. Soy un biólogo molecular (con poca experiencia en
programación) y para mi trabajo necesito manejar grandes conjuntos de datos de secuencias de ADN y analizar imágenes
microscópicas. Para ambas cosas, la programación en Python ha sido útil, si no esencial, para completar y publicar un
proyecto de 6 años. ¡Que tal guía esté disponible gratuitamente es una clara señal de que las fuerzas del mal aún no
gobiernan el mundo! :) - Luca

Dado que este será el primer idioma que aprenderá, debe usar A Byte of Python. Realmente brinda una introducción
adecuada a la programación en Python y tiene un ritmo lo suficientemente bueno para el principiante promedio. Lo más
importante a partir de ese momento será empezar a practicar la creación de sus propios pequeños programas. -"{No
registrado}"

Solo para decir un fuerte y feliz agradecimiento por publicar "A Byte of Python" y "A Byte of Vim". Esos libros me
resultaron muy útiles hace cuatro o cinco años cuando comencé a aprender programación. Ahora mismo estoy
desarrollando un proyecto que fue un sueño durante mucho, mucho tiempo y solo quiero dar las gracias. Sigue
caminando. Eres una fuente de motivación. Todo lo mejor. - Jocimar

Terminé de leer Un byte de Python en 3 días. Es muy interesante. Ni una sola página era aburrida. Quiero comprender el
código del lector de pantalla Orca. Es de esperar que su libro me haya preparado para ello. - Dattatray

Hola, 'Un byte de Python' es realmente una buena lectura para principiantes en Python. Así que, de nuevo, ¡BUEN
TRABAJO! Soy un desarrollador de Java & C con 4 años de experiencia en China. Recientemente, quiero trabajar un poco
en el proyecto de nota zim-wiki que usa pygtk para implementar. Leí su libro en 6 días y ahora puedo leer y escribir
ejemplos de código Python. gracias por su contribución. Por favor, mantenga su entusiasmo para mejorar este mundo, esto
es solo un pequeño estímulo de China. - Lee

Soy Isen de Taiwán, estudiante de doctorado en el Departamento de Ingeniería Eléctrica de la Universidad Nacional de
Taiwán. Me gustaría agradecerle por su gran libro. Creo que no solo es fácil de leer, sino también completo y completo
para un recién llegado de Python. La razón por la que leí su libro es que estoy empezando a trabajar en el marco de GNU
Radio. Su libro me permitió captar la mayoría de las ideas centrales importantes y las habilidades de Python con un tiempo
mínimo. También vi que no le importa que los lectores le envíen una nota de agradecimiento en su libro. Así que me gusta
mucho tu libro y lo aprecio. Gracias. -Isen I-Chun Chao

¡El libro incluso es utilizado por la NASA! Se utiliza en suLaboratorio de propulsión a chorro con su proyecto Deep Space Network.

Cursos Académicos
Este libro se está utilizando como material didáctico en varias instituciones educativas:

Curso 'Principios de lenguajes de programación' en Vrije Universiteit,


Ámsterdam Curso 'Conceptos Básicos de Computación' en Universidad de
California, Davis Curso 'Programación con Python' en Universidad Harvard
Curso de 'Introducción a la programación' en Universidad de Leeds
Curso de 'Introducción a la programación de aplicaciones' en
Universidad de Boston

6
Introducci
Curso de 'Habilidades de tecnología de la información para la meteorología' en Universidad
de Oklahoma Curso de 'geoprocesamiento' en Universidad del estado de michigan

7
Introducci

Curso 'Multi Agent Semantic Web Systems' en el Universidad de Edimburgo


'Introducción a la informática y la programación' en MIT OpenCourseWare
'Programación básica en la Facultad de Ciencias Sociales, Universidad de Ljubljana, Eslovenia' - Aleš Žiberna dice "Yo (y mi
predecesor) hemos estado usando su libro como literatura principal para este curso"
'Introducción a la programación', Departamento de Ciencias de la Información, Universidad de Zadar, Croacia - Krešimir Zauder
dice "Me gustaría informarle que A Byte of Python es una lectura obligatoria en mi curso"

Licencia
Este libro tiene una licencia Licencia internacional Creative Commons Attribution-ShareAlike 4.0.

Esto significa:

Eres libre de Compartir, es decir, copiar, distribuir y transmitir este libro.


Puede remezclar, es decir, realizar cambios en este libro (especialmente
traducciones). Puede utilizarlo con fines comerciales.

Tenga en cuenta:

No venda copias electrónicas o impresas del libro a menos que haya mencionado de manera clara y destacada en la
descripción que estas copias no son del autor original de este libro.
La atribución debe mostrarse en la descripción introductoria y la portada del documento enlazando a
https://python.swaroopch.com e indicando claramente que el oel texto original se puede recuperarHed desde
esta ubicación. Todos los códigos / scripts proporcionados en este libro están autorizados bajo laLicencia BSD
de 3 cláusulas a menos que se indique lo contrario.

Lee ahora
Puede leerlo en línea en https://python.swaroopch.com

Comprar el libro
Se puede comprar una copia impresa del libro en https://swaroopch.com/buybook para su placer de lectura sin conexión y para
apoyar el desarrollo y la mejora continuos de este libro.

Descargar
Visita https://github.com/swaroopch/byte-of-python/releases/latest para descargar un archivo PDF (mejor para lectura de
escritorio) o un archivo EPUB (mejor para dispositivos como dispositivos móviles, tabletas, lectores de libros electrónicos).

Visita https://github.com/swaroopch/byte-of-python para el contenido en bruto (para sugerir correcciones, cambios, traducir, etc.)

Lea el libro en su idioma nativo


Si está interesado en leer o contribuir con traducciones de este libro a otros lenguajes humanos, consulte Traducciones.

8
Dedicaci

Dedicación
A Kalyan Varma y muchas otras personas mayores en PESIT quien nos introdujo a GNU / Linux y el mundo del

código abierto. A la memoria deAtul Chitnis, un amigo y guía que extrañaremos mucho.

Hacia pioneros que hicieron posible Internet. Este libro fue escrito por primera vez en 2003. Aún sigue siendo popular, gracias a la
naturaleza de
compartir conocimientos en Internet como lo imaginaron los pioneros.

9
Prefa

Prefacio
Python es probablemente uno de los pocos lenguajes de programación que es a la vez simple y poderoso. Esto es bueno tanto para
principiantes como para expertos y, lo que es más importante, es divertido programar con él. Este libro tiene como objetivo
ayudarlo a aprender este maravilloso lenguaje y mostrarle cómo hacer las cosas de manera rápida y sin dolor, en efecto, 'El
antídoto para sus problemas de programación'.

Para quien es este libro


Este libro sirve como guía o tutorial del lenguaje de programación Python. Está dirigido principalmente a principiantes. También es
útil para programadores experimentados.

El objetivo es que si todo lo que sabes sobre computadoras es cómo guardar archivos de texto, entonces puedas aprender Python con
este libro. Si tiene experiencia previa en programación, también puede aprender Python con este libro.

Si tiene experiencia previa en programación, le interesarán las diferencias entre Python y su lenguaje de programación favorito; he
destacado muchas de esas diferencias. Sin embargo, una pequeña advertencia, Python pronto se convertirá en su lenguaje de
programación favorito.

Página web oficial


El sitio web oficial del libro es https://python.swaroopch.com donde puede leer el libro completo en línea, descargar las últimas
versiones del libro, comprar una copia impresa y también envíeme sus comentarios.

Algo sobre lo que pensar


Hay dos formas de construir un diseño de software: una es hacerlo tan simple que obviamente no haya deficiencias; la otra
es hacerlo tan complicado que no haya deficiencias obvias. - COCHE Hoare

El éxito en la vida no es tanto una cuestión de talento y oportunidades como de concentración y perseverancia. - CW Wendte

1
Sobre

Sobre Python
Python es uno de esos raros lenguajes que pueden presumir de ser simples y poderosos. Se sorprenderá gratamente al ver lo fácil
que es concentrarse en la solución del problema en lugar de en la sintaxis y estructura del lenguaje en el que está programando.

La introducción oficial a Python es:

Python es un potente lenguaje de programación fácil de aprender. Tiene estructuras de datos eficientes de alto nivel y un
enfoque simple pero efectivo para la programación orientada a objetos. La elegante sintaxis y la escritura dinámica de
Python, junto con su naturaleza interpretada, lo convierten en un lenguaje ideal para la creación de scripts y el rápido
desarrollo de aplicaciones en muchas áreas en la mayoría de las plataformas.

Discutiré la mayoría de estas características con más detalle en la siguiente sección.

Historia detrás del nombre


Guido van Rossum, el creador del lenguaje Python, nombró el lenguaje en honor al programa de la BBC "Monty Python's Flying
Circus". No le gustan particularmente las serpientes que matan animales para alimentarse enrollando sus largos cuerpos a su
alrededor y aplastándolos.

Características de Python

Sencillo
Python es un lenguaje simple y minimalista. Leer un buen programa en Python se siente casi como leer en inglés, ¡aunque un
inglés muy estricto! Esta naturaleza de pseudocódigo de Python es una de sus mayores fortalezas. Le permite concentrarse en la
solución del problema en lugar del idioma en sí.

Fácil de aprender
Como verá, Python es extremadamente fácil de comenzar. Python tiene una sintaxis extraordinariamente simple, como ya se
mencionó.

Gratis y de código abierto


Python es un ejemplo de FLOSS (software libre y de código abierto). En términos simples, puede distribuir libremente copias de
este software, leer su código fuente, realizar cambios en él y usar partes de él en nuevos programas gratuitos. FLOSS se basa en el
concepto de comunidad que comparte conocimientos. Esta es una de las razones por las que Python es tan bueno: ha sido creado y
mejorado constantemente por una comunidad que solo quiere ver un Python mejor.

Lenguaje de alto nivel


Cuando escribe programas en Python, nunca necesita preocuparse por los detalles de bajo nivel, como administrar la memoria
utilizada por su programa, etc.

Portátil
Debido a su naturaleza de código abierto, Python ha sido adaptado (es decir, cambiado para que funcione en) muchas
plataformas. Todos sus programas de Python pueden funcionar en cualquiera de estas plataformas sin requerir ningún cambio si
es lo suficientemente cuidadoso para evitar cualquier característica que dependa del sistema.

1
Sobre

Puede usar Python en GNU / Linux, Windows, FreeBSD, Macintosh, Solaris, OS / 2, Amiga, AROS, AS / 400, BeOS, OS /
390, z / OS, Palm OS, QNX, VMS, Psion, Acorn RISC OS, VxWorks, PlayStation, Sharp Zaurus, Windows CE y PocketPC.

Incluso puedes usar una plataforma como Kivy para crear juegos para su computadora y para iPhone, iPad y Android.

Interpretado
Esto requiere un poco de explicación.

Un programa escrito en un lenguaje compilado como C o C ++ se convierte del lenguaje fuente, es decir, C o C ++, a un lenguaje
hablado por su computadora (código binario, es decir, 0 y 1) utilizando un compilador con varios indicadores y opciones. Cuando
ejecuta el programa, el software vinculador / cargador copia el programa del disco duro a la memoria y comienza a ejecutarlo.

Python, por otro lado, no necesita compilación en binario. Simplemente ejecute el programa directamente desde el código
fuente. Internamente, Python convierte el código fuente en un formato intermedio llamado bytecodes y luego lo traduce al
idioma nativo de su computadora y luego lo ejecuta. Todo esto, en realidad, hace que el uso de Python sea mucho más fácil, ya
que no tiene que preocuparse por compilar el programa, asegurarse de que las bibliotecas adecuadas estén vinculadas y
cargadas, etc. Esto también hace que sus programas de Python sean mucho más portátiles, ya que puede simplemente copie su
programa Python en otra computadora y ¡simplemente funciona!

Orientado a objetos
Python admite la programación orientada a procedimientos y la programación orientada a objetos (OOP). En los lenguajes
orientados a procedimientos, el programa se basa en procedimientos o funciones que no son más que piezas de programas
reutilizables. En los lenguajes orientados a objetos, el programa se basa en objetos que combinan datos y funcionalidad. Python
tiene una forma muy poderosa pero simplista de hacer OOP, especialmente cuando se compara con grandes lenguajes como C
++ o Java.

Extensible
Si necesita que un fragmento de código crítico se ejecute muy rápido o desea que algún fragmento de algoritmo no esté abierto,
puede codificar esa parte de su programa en C o C ++ y luego usarlo desde su programa Python.

Integrable
Puede incrustar Python dentro de sus programas C / C ++ para brindar capacidades de scripting a los usuarios de su programa.

Bibliotecas extensas
La biblioteca estándar de Python es enorme. Puede ayudarlo a hacer varias cosas que involucran expresiones regulares, generación
de documentación, pruebas unitarias, subprocesos, bases de datos, navegadores web, CGI, FTP, correo electrónico, XML, XML-
RPC, HTML, archivos WAV, criptografía, GUI (interfaces gráficas de usuario), y otras cosas que dependen del sistema. Recuerde,
todo esto siempre está disponible dondequiera que esté instalado Python. Esto se llama la filosofía de Pilas incluidas de Python.

Además de la biblioteca estándar, hay varias otras bibliotecas de alta calidad que puede encontrar en el Índice de paquetes de Python.

Resumen
Python es de hecho un lenguaje emocionante y poderoso. Tiene la combinación correcta de rendimiento y características que hacen
que escribir programas en Python sea divertido y fácil.

Python 3 contra 2
Puede ignorar esta sección si no está interesado en la diferencia entre "Python versión 2" y "Python versión 3". Pero tenga en
cuenta qué versión está utilizando. Este libro está escrito para la versión 3 de Python.

1
Sobre

Recuerde que una vez que haya comprendido correctamente y haya aprendido a utilizar una versión, podrá conocer fácilmente las
diferencias y utilizar la otra. La parte difícil es aprender a programar y comprender los conceptos básicos del lenguaje Python en
sí. Ese es nuestro objetivo en este libro, y una vez que lo haya logrado, puede usar fácilmente Python 2 o Python 3 según su
situación.

Para obtener detalles sobre las diferencias entre Python 2 y Python 3, consulte:

El futuro de Python 2
Portando el código de Python 2 a Python 3
Escribir código que se ejecute en Python2 y 3 Compatible
con Python 3: una guía detallada

Lo que dicen los programadores


Puede resultarle interesante leer lo que grandes hackers como Eric S. Raymond (ESR) tienen que decir sobre Python:

Eric S. Raymond es el autor de "La Catedral y el Bazar" y también es la persona que acuñó el término Open Source. El dijo
quePython se ha convertido en su lenguaje de programación favorito. Este artículo fue la verdadera inspiración para mi
primer pincel con Python.
Bruce Eckel es el autor de los famosos libros 'Pensar en Java' y 'Pensar en C ++'. Dice que ningún lenguaje lo ha hecho más
productivo que Python. Él dice que Python es quizás el único lenguaje que se enfoca en hacer las cosas más fáciles para el
programador. Leer elentrevista completa para más detalles.
Peter Norvig es un conocido autor de Lisp y director de calidad de búsqueda en Google (gracias a Guido van Rossum por
señalarlo). El dijo queescribir Python es como escribir en pseudocódigo. Dice que Python siempre ha sido una parte integral
de Google. De hecho, puede verificar esta declaración mirando elTrabajos de Google página que enumera el conocimiento de
Python como un requisito para los ingenieros de software.

1
Instalaci

Instalación
Cuando nos referimos a "Python 3" en este libro, nos referiremos a cualquier versión de Python igual o superior a la versión
Python 3.6.0.

Instalación en Windows
Visita https://www.python.org/downloads/ y descargue la última versión. En el momento de escribir este artículo, era Python 3.5.1.
La instalación es como cualquier otro software basado en Windows.

Tenga en cuenta que si su versión de Windows es anterior a Vista, debe descargar Python 3.4 solamente ya que las versiones
posteriores requieren versiones más recientes de Windows.

PRECAUCIÓN: asegúrese de marcar la opción Agregar Python 3.5 a PATH .

Para cambiar la ubicación de instalación, haga clic en Personalizar la instalación , luego próximo y entrar C: \ python35

(u otra ubicación apropiada) como ubicación de instalación.

Si no marcó el Agregar PATH de Python 3.5 opción anterior, verifique Agregar Python a las variables de entorno . Esto
hace lo mismo queAgregar Python 3.5 a PATH en la primera pantalla de instalación.

Puedes optar por instalar Launcher para todos los usuarios o no, no importa mucho. El lanzador se utiliza para cambiar entre
diferentes versiones de Python instaladas.

Si su ruta no se configuró correctamente (marcando la Agregar ruta de Python 3.5 o Agregar Python a las variables de

entorno opciones), luego siga los pasos en la siguiente sección ( Símbolo del sistema DOS ) arreglarlo. De lo contrario, vaya
alEjecutando el indicador de Python en Windows sección de este documento.

NOTA: Para las personas que ya conocen la programación, si está familiarizado con Docker, consulte Python en Docker y Docker
en Windows.

Símbolo del sistema DOS


Si desea poder usar Python desde la línea de comandos de Windows, es decir, desde el indicador de DOS, debe configurar la
variable PATH de manera adecuada.

Para Windows 2000, XP, 2003, haga clic en Panel de control -> Sistema -> Avanzado -> Variables de entorno . Haga
clic en la variable nombradaCAMINO en la sección Variables del sistema, luego seleccione Editar y añadir ; C: \ Python35

(verifique que esta carpeta exista, será diferente para las versiones más nuevas de Python) al final de lo que ya está allí. Por
supuesto, use el nombre de directorio apropiado.

Para versiones anteriores de Windows, abra el archivo C: \ AUTOEXEC.BAT y agrega la línea RUTA =% RUTA%; C: \ Python35 y
reinicie el sistema. Para Windows NT, use elAUTOEXEC.NT expediente.

Para Windows Vista:

Haga clic en Inicio y elija Panel de control

Haga clic en Sistema, a la derecha verá "Ver información básica sobre su computadora"
A la izquierda hay una lista de tareas, la última de las cuales es Configuración avanzada del sistema . Haga clic en eso.
La Avanzado pestaña de la Propiedades del sistema Se muestra el cuadro de diálogo. Haga clic en elVariables de

entorno botón en la parte inferior derecha.


En el cuadro inferior titulado Variables del sistema, desplácese hacia abajo hasta Ruta y
haga clic en el botón Editar. Cambie su camino según sea necesario.
Reinicie su sistema. Vista no recogió el cambio de variable de entorno de la ruta del sistema hasta que reinicié.

1
Instalaci

Para Windows 7 y 8:

Haga clic derecho en Computadora desde su escritorio yPropiedades


clic selector Comienzo y elige Panel de control ->
Sistema y seguridad -> Sistema . Haga clic enConfiguración avanzada del sistema a la izquierda y luego haga clic en
el Avanzado pestaña. En la parte inferior, haga clic enVariables de entorno Y debajo Variables del sistema , busca el
CAMINO variable, seleccione y luego presione Editar .
Vaya al final de la línea debajo de Valor variable y agregue ; C: \ Python35 (verifique que esta carpeta exista, será
diferente para las versiones más nuevas de Python) al final de lo que ya está allí. Por supuesto, use el nombre de
carpeta apropiado. Si el valor fuera% SystemRoot% \ system32; Ahora se convertirá en % SystemRoot% \ system32;
C: \ Python36
Haga clic en Aceptar y ya está. No es necesario reiniciar, sin embargo, es posible que deba cerrar y volver a abrir la línea de
comandos.

Para Windows 10:

Menú Inicio de Windows> Ajustes > Acerca de > Información del sistema (esto está completamente a la derecha)>
Sistema avanzado Ajustes > Variables de entorno (esto es hacia la parte inferior)> (luego resalte Camino variable y haga
clic en Editar )> Nuevo > (escriba la ubicación de su Python. Por ejemplo, C: \ Python35 \ )

Ejecutando el indicador de Python en Windows


Para los usuarios de Windows, puede ejecutar el intérprete en la línea de comandos si tiene establecer la variable PATH de forma
adecuada.

Para abrir la terminal en Windows, haga clic en el botón de inicio y haga clic en Ejecutar. En el cuadro de diálogo, escriba cmd

y presione la tecla [enter]. Luego, escriba python y asegúrese de que no haya errores.

Instalación en Mac OS X
Para usuarios de Mac OS X, utilice Cerveza casera: brew instalar python3 .

Para verificar, abra el terminal presionando [Comando + Espacio] teclas (para abrir la búsqueda de Spotlight), escriba Terminal y
presione
[ingresar] clave. Ahora, correpython3 y asegúrese de que no haya errores.

Instalación en GNU / Linux


Para usuarios de GNU / Linux, use el administrador de paquetes de su distribución para instalar Python 3, por ejemplo, en
Debian y Ubuntu: sudo apt-get actualizar && sudo apt-get install python3 .

Para verificar, abra el terminal abriendo la aplicación Terminal o presionando Alt + F2 e ingresando gnome-terminal. Si eso no
funciona, consulte la documentación de su distribución GNU / Linux en particular. Ahora, ejecute python3 y asegúrese de que no
haya errores.

Puede ver la versión de Python en la pantalla ejecutando:

NOTA: $ es el -V
$ python3 indicador del shell. Será diferente para usted dependiendo de la configuración del sistema operativo en su
Python 3.6.0
computadora, por lo tanto, indicaré el mensaje solo con el símbolo $.

PRECAUCIÓN: La salida puede ser diferente en su computadora, dependiendo de la versión del software Python instalada en su
computadora.

Resumen

1
Instalaci

De ahora en adelante, asumiremos que tiene Python instalado en su sistema. A

continuación, escribiremos nuestro primer programa en Python.

1
Primero

Primeros pasos
Ahora veremos cómo ejecutar un programa tradicional 'Hola mundo' en Python. Esto le enseñará cómo escribir, guardar y ejecutar
programas Python.

Hay dos formas de usar Python para ejecutar su programa: usando el indicador interactivo del intérprete o usando un archivo
fuente. Ahora veremos cómo utilizar ambos métodos.

Uso de la indicación del intérprete


Abra el terminal en su sistema operativo (como se discutió anteriormente en el Instalación capítulo) y luego abra el indicador de
Python escribiendo python3 y presionando la tecla [enter].

Una vez que haya iniciado Python, debería ver >>> donde puedes empezar a escribir cosas. Esto se denomina indicador del intérprete
de Python.

En el indicador del intérprete de Python, escriba:

Seguido por el [ingresar]


impresión("Hola clave. Deberías ver las palabrasHola
Mundo") Mundo impreso en la pantalla.

A continuación, se muestra un ejemplo de lo que debería ver al utilizar una computadora Mac OS X. Los detalles sobre el
software Python diferirán según su computadora, pero la parte del indicador (es decir, desde >>> en adelante) debe ser la misma
independientemente del sistema operativo.

¡Tenga en cuenta que Python le da la salida de la línea inmediatamente! Lo que acaba de ingresar es una sola declaración de Python.
$ python3
Usamos
Pitón 3.6.0 (predeterminado, Jan 12 2017, 11:26:36)
impresiónpara imprimir (como era de esperar) cualquier valor que le proporcione. Aquí, estamos proporcionando el
[GCC 4.2.1 Compatible con Apple LLVM 8.0.0 (sonido metálico-
texto Hola mundo y esto se imprime rápidamente en la pantalla.
800.0.38)] en Darwin Type "ayuda", "derechos de autor", "créditos"
o "licencia" por más información.
>>> impresión("Hola
Cómo salir del mensaje de intérprete
Mundo") Hola Mundo

Si está utilizando un shell GNU / Linux u OS X, puede salir del indicador del intérprete presionando [ctrl + d] o ingresando exit ()
(nota: recuerde incluir el paréntesis, ()) seguido de la tecla [enter].

Si está utilizando el símbolo del sistema de Windows, presione [ctrl + z] Seguido por el [ingresar] clave.

Elegir un editor
No podemos escribir nuestro programa en el indicador del intérprete cada vez que queremos ejecutar algo, por lo que tenemos
que guardarlos en archivos y podemos ejecutar nuestros programas tantas veces como desee.

Para crear nuestros archivos fuente de Python, necesitamos un software de edición donde pueda escribir y guardar. Un buen
editor de programadores le facilitará la vida al escribir los archivos fuente. Por lo tanto, la elección de un editor es crucial. Tienes
que elegir un editor como elegirías un coche que comprarías. Un buen editor te ayudará a escribir programas Python fácilmente,
haciendo tu viaje más cómodo y te ayudará a llegar a tu destino (lograr tu objetivo) de una manera mucho más rápida y segura.

1
Primero

Uno de los requisitos muy básicos es el resaltado de sintaxis donde todas las diferentes partes de su programa Python están
coloreadas para que pueda ver su programa y visualizar su ejecución.

Si no tiene idea de por dónde empezar, le recomendaría usar Edición Educativa PyCharm software que está disponible en
Windows, Mac OS X y GNU / Linux. Detalles en la siguiente sección.

Si está utilizando Windows, no utilice el Bloc de notas; es una mala elección porque no resalta la sintaxis y, lo que es más
importante, no admite la sangría del texto, lo cual es muy importante en nuestro caso, como veremos más adelante. Los buenos
editores harán esto automáticamente.

Si es un programador experimentado, ya debe estar utilizando Empuje o Emacs. No hace falta decir que estos son dos de los
editores más poderosos y se beneficiará de su uso para escribir sus programas Python. Yo personalmente uso ambos para la
mayoría de mis programas, e incluso he escrito unlibro completo sobre Vim.

En caso de que esté dispuesto a tomarse el tiempo para aprender Vim o Emacs, le recomiendo que aprenda a usar cualquiera de
ellos, ya que le será muy útil a largo plazo. Sin embargo, como mencioné antes, los principiantes pueden comenzar con PyCharm y
enfocar el aprendizaje en Python en lugar del editor en este momento.

Para reiterar, elija un editor adecuado: puede hacer que escribir programas Python sea más divertido y fácil.

PyCharm
Edición Educativa PyCharm es un editor gratuito que puede utilizar para escribir programas

Python. Cuando abra PyCharm, verá esto, haga clic en Crear nuevo proyecto:

1
Primero

Seleccione Python puro :

1
Primero

Cambie sin título a helloworld como la ubicación del proyecto, debería ver detalles similares a este:

2
Primero

Haga clic en el Crear botón.

Haga clic derecho en el Hola Mundo en la barra lateral y seleccione Nuevo -> Archivo Python :

2
Primero

Se le pedirá que escriba el nombre, escriba hola:

Ahora puede ver un archivo abierto para usted:

2
Primero

Elimine las líneas que ya están presentes y ahora escriba lo siguiente:

Ahora haga clic con elMundo")


impresión("Hola botón derecho en lo que escribió (sin seleccionar el texto) y haga clic en Ejecutar 'hola'.

Ahora debería ver la salida (lo que imprime) de su programa:

2
Primero

¡Uf! Fueron bastantes pasos para comenzar, pero de ahora en adelante, cada vez que le pidamos que cree un nuevo archivo, recuerde
hacer clic derecho en helloworld a la izquierda -> Nuevo -> Archivo Python y continuar con los mismos pasos para escribir y ejecutar
como se muestra arriba.

Puede encontrar más información sobre PyCharm en el Inicio rápido de PyCharm página.

Empuje
1. Instalar en pc Empuje
Los usuarios de Mac OS X deben instalar el paquete macvim a través de InicioBrew
Los usuarios de Windows deben descargar el "ejecutable autoinstalable" de Sitio web de Vim
Los usuarios de GNU / Linux deben obtener Vim de los repositorios de software de su distribución, por ejemplo, los
usuarios de Debian y Ubuntu pueden instalar el paquete vim.
2. Instalar en pc jedi-vim complemento para autocompletar.
3. Instalar correspondiente Jedi paquete de python: instalar pip -U jedi

Emacs
1. Instalar en pc Emacs 24+.
Los usuarios de Mac OS X deberían obtener Emacs de
http://emacsformacosx.com Los usuarios de Windows deberían obtener Emacs
de http://ftp.gnu.org/gnu/emacs/windows/
Los usuarios de GNU / Linux deben obtener Emacs de los repositorios de software de su distribución, por ejemplo,
los usuarios de Debian y Ubuntu pueden instalar el paquete emacs24.
2. Instalar en pc ELPY

Usar un archivo de origen

2
Primero

Ahora volvamos a la programación. Existe la tradición de que cada vez que aprende un nuevo lenguaje de programación, el primer
programa que escribe y ejecuta es el programa 'Hola mundo'; todo lo que hace es decir 'Hola mundo' cuando lo ejecuta. Como
1
Simon Cozens dice, es el "encantamiento tradicional a los dioses de la programación para ayudarlo a aprender mejor el idioma".

Inicie su elección de editor, ingrese al siguiente programa y guárdelo como

hello.py. Si está utilizando PyCharm, ya tenemosdiscutió cómo ejecutar desde un

archivo fuente.

Para otros editores, abra un nuevo archivo hello.py y escriba esto:

¿Dónde debería guardar


impresión("Hola el archivo? A cualquier carpeta de la que conozca la ubicación de la carpeta. Si no comprende lo que
Mundo")
eso significa, cree una nueva carpeta y use esa ubicación para guardar y ejecutar todos sus programas de Python:

/ tmp / py en Mac OS X
/ tmp / py en GNU / Linux
C: \ py en Windows

Para crear la carpeta anterior (para el sistema operativo que está usando), use el comando mkdir en la terminal, por ejemplo, mkdir
/ tmp / py .

IMPORTANTE: Asegúrese siempre de darle la extensión de archivo .py, por ejemplo, foo.py.

Para ejecutar su programa Python:

1. Abra una ventana de terminal (consulte la Instalación capítulo sobre cómo hacer eso)
2. Ccambiar el directorio donde guardó el archivo, por ejemplo, cd / tmp / py

3. Ejecute el programa ingresando el comando python hello.py . La salida es como se muestra a continuación.

$ python
hello.py hola
mundo

2
Primero

Si obtuvo el resultado como se muestra arriba, ¡felicitaciones! - ha ejecutado con éxito su primer programa Python. Ha
superado con éxito la parte más difícil del aprendizaje de la programación, es decir, ¡comenzar con su primer programa!

En caso de que obtenga un error, escriba el programa anterior exactamente como se muestra arriba y ejecute el programa
nuevamente. Tenga en cuenta que Python distingue entre mayúsculas y minúsculas, es decir, imprimir no es lo mismo que
Imprimir; tenga en cuenta la p minúscula en la primera y la P mayúscula en la última. Además, asegúrese de que no haya
espacios ni tabulaciones antes del primer carácter en cada línea; veremospor qué esto es importante mas tarde.

Cómo funciona

Un programa de Python se compone de declaraciones. En nuestro primer programa, solo tenemos una declaración. En esta
declaración, llamamos al
impresión declaración a la que suministramos el texto "hola mundo".

Obteniendo ayuda
Si necesita información rápida sobre cualquier función o declaración en Python, puede utilizar la función de ayuda incorporada.
Esto es muy útil, especialmente cuando se utiliza la indicación del intérprete. Por ejemplo, ejecute help ('len'): esto muestra la
ayuda para la función len que se usa para contar el número de elementos.

SUGERENCIA: Presione q para salir de la ayuda.

Del mismo modo, puede obtener información sobre casi cualquier cosa en Python. Utilice help () para obtener más información sobre
el uso de la ayuda en sí.

En caso de que necesite obtener ayuda para operadores como return, entonces debe poner esas comillas entre comillas como help
('return') para que Python no se confunda sobre lo que estamos tratando de hacer.

Resumen
Ahora debería poder escribir, guardar y ejecutar programas Python con

facilidad. Ahora que es un usuario de Python, aprendamos algunos

conceptos más de Python.

1.
el autor del asombroso libro 'Beginning Perl' ↩

2
Lo

Lo esencial
Imprimir Hola mundo no es suficiente, ¿verdad? Quieres hacer más que eso, quieres tomar alguna entrada, manipularla y sacar
algo de ella. Podemos lograr esto en Python usando constantes y variables, y también aprenderemos algunos otros conceptos en
este capítulo.

Comentarios
Comentarios son cualquier texto a la derecha del símbolo # y son principalmente útiles como notas para el lector

del programa. Por ejemplo:

o: impresión('Hola Mundo') # Tenga en cuenta que imprimir es una función

Utilice tantosen
# Tenga comentarios
cuenta queútiles como pueda en su programa para:
imprimir
es una función impresión('Hola
Explicar
Mundo') supuestos Explicar
decisiones importantes
Explicar detalles
importantes
explica los problemas que estás tratando de resolver
explique los problemas que está tratando de superar en su programa, etc.

El código te dice cómo, los comentarios deberían decirte por qué.

Esto es útil para los lectores de su programa para que puedan entender fácilmente lo que hace el programa. Recuerde, esa
persona puede ser usted mismo después de seis meses.

Constantes literales
Un ejemplo de una constante literal es un número como 5 , 1,23 , o una cuerda como 'Esto es una cadena' o "¡Es una cuerda!" .

Se llama literal porque es literal; usas su valor literalmente. El número 2 siempre se representa a sí mismo y nada más; es una
constante porque su valor no se puede cambiar. Por lo tanto, todos estos se denominan constantes literales.

Números
Los números son principalmente de dos tipos: enteros y flotantes.

Un ejemplo de un número entero es 2, que es solo un número entero.

Ejemplos de números de coma flotante (o flotantes para abreviar) son 3,23 y 52.3E-4 . Lami la notación indica potencias de
10. En este caso, 52.3E-4 medio 52,3 * 10 ^ -4 ^ .

Nota para programadores experimentados

No hay un tipo largo separado. El tipo int puede ser un número entero de cualquier tamaño.

2
Lo

Instrumentos de cuerda
Una cadena es una secuencia de caracteres. Las cadenas son básicamente un montón de palabras.

Utilizará cadenas en casi todos los programas de Python que escriba, así que preste atención a la siguiente parte.

Una frase
Puede especificar cadenas utilizando comillas simples como "Citarme en

esto". Todos los espacios en blanco, es decir, los espacios y las tabulaciones,

dentro de las comillas, se conservan tal cual.

Doble comillas
Las cadenas entre comillas dobles funcionan exactamente de la misma manera que las cadenas entre comillas simples. Un ejemplo es
"¿Cuál es tu nombre?" .

Cotizaciones triples
Puede especificar cadenas de varias líneas utilizando comillas triples - ("" "o '' '). Puede utilizar comillas simples y dobles
libremente dentro de las comillas triples. Un ejemplo es:

Las'' cadenas son


'Esta es una inmutables
cadena de varias líneas. Esta es la
primera línea. Esta es la segunda línea.

Esto"¿Cuál es tu nombre?", Le
significa que una vez que haya creado una cadena, no podrá cambiarla. Aunque esto pueda parecer algo malo, en realidad no
pregunté. Dijo "Bond, James
lo es. Veremos
Bond". '' 'por qué esto no es una limitación en los distintos programas que veremos más adelante.

Nota para programadores de C / C ++

No hay un tipo de datos char por separado en Python. No hay ninguna necesidad real y estoy seguro de que no se lo perderá.

Nota para programadores de Perl / PHP

Recuerde que las cadenas entre comillas simples y las cadenas entre comillas dobles son iguales, no difieren de ninguna manera.

El método de formato
A veces, es posible que deseemos construir cadenas a partir de otra información. Aquí es donde el método format () es

útil. Guarde las siguientes líneas como un archivo str_format.py:

Producción:
edad = 20
nombre = 'Swaroop'

$ python str_format.py
impresión("{0} tenía {1} años cuando escribió este
Swaroop tenía 20 años cuando
libro".formato(nombre, edad))escribió
imprimireste
("¿Por qué {0} está jugando con
libro
esa ¿Por qué Swaroop juega con esa pitón?
pitón?".formato(nombre))

2
Lo

Cómo funciona

Una cadena puede usar ciertas especificaciones y, posteriormente, se puede llamar al método de formato para sustituir esas
especificaciones con los argumentos correspondientes al método de formato.

Observe el primer uso donde usamos {0} y esto corresponde al nombre de la variable que es el primer argumento del método de
formato. De manera similar, la segunda especificación es {1} correspondiente a la edad, que es el segundo argumento del método
de formato. Tenga en cuenta que Python comienza a contar desde 0, lo que significa que la primera posición está en el índice 0, la
segunda posición está en el índice 1, y así sucesivamente.

Observe que podríamos haber logrado lo mismo usando la concatenación de cadenas:

peronombre
eso es mucho
+ ' es más
' + feo y propenso
str(edad) a errores. En segundo lugar, la conversión a cadena se realizaría automáticamente
+ 'años'
mediante el método de formato en lugar de la conversión explícita a cadenas necesaria en este caso. En tercer lugar, cuando
utilizamos el método de formato, podemos cambiar el mensaje sin tener que lidiar con las variables utilizadas y viceversa.

También tenga en cuenta que los números son opcionales, por lo que también podría haber escrito como:

que edad
dará la
= misma
20 salida exacta que el programa anterior.
nombre = 'Swaroop'
También podemos nombrar los parámetros:
impresión("{} tenía {} años cuando escribió este
libro".formato(nombre, edad)) imprimir ("¿Por qué {} está jugando con
que edad
darápitón?".formato(nombre))
esa la
= misma
20 salida exacta que el programa anterior.
nombre = 'Swaroop'
Python 3.6 introdujo una forma más corta de hacer parámetros con nombre, llamados "f-strings":
impresión("{nombre} tenía {edad} años cuando escribió este libro".formato(nombre = nombre,
edad = edad)) imprimir ('¿Por qué {name} está jugando con esa pitón?'.formato(nombre =
que edad
dará la
= misma
nombre))20 salida exacta que el programa anterior.
nombre = 'Swaroop'
Lo que hace Python en el método de formato es que sustituye cada valor de argumento en el lugar de la especificación. Puede
impresión(f '{nombre} tenía {edad} años cuando escribió este libro') # observe la 'f' antes
haber especificaciones más detalladas como:
de la cadena impresión(f'¿Por qué {name} está jugando con esa pitón? ') # observe la 'f'
antes de la cadena
# precisión decimal (.) de 3 para flotante '0.333'
impresión('{0: .3f}'.formato(1.0/3))
# rellenar con guiones bajos (_) con el texto
centrado # (^) a 11 de ancho ' Hola '
impresión('{0: _ ^ 11}'.formato('Hola'))
# basado en palabras clave 'Swaroop escribió un byte de Python'
impresión("{nombre} escribió {libro}".formato(nombre ='Swaroop', libro ='Un byte de Python'))

2
Lo

Producción:

Ya que estamos discutiendo el formato, tenga en cuenta que print siempre termina con un carácter invisible de "nueva línea" (\ n)
0.333
Hola
de modo que las llamadas repetidas a print se imprimirán todas en una línea separada cada una. Para evitar que se imprima este
Swaroop escribió A Byte of Python
carácter de nueva línea, puede especificar que debe terminar con un espacio en blanco:

La salida es:
impresión('a', fin ='')
impresión('B', fin ='')

O puedes
ab terminar con un espacio:

La salida es:
impresión('a', fin ='')
impresión('B', fin ='')
impresión('C')
a B C
Secuencias de escape
Supongamos que desea tener una cadena que contenga una comilla simple ('), ¿cómo especificará esta cadena? Por ejemplo, la
cadena es "¿Cuál es tu nombre?" . No puede especificar '¿Cuál es su nombre?' porque Python se confundirá en cuanto a dónde
comienza y termina la cadena. Por lo tanto, deberá especificar que esta comilla simple no indica el final de la cadena. Esto se
puede hacer con la ayuda de lo que se llama secuencia de escape. La comilla simple se especifica como \ ': observe la barra
invertida. Ahora, puede especificar la cadena como '¿Cuál es su nombre?' .

Otra forma de especificar esta cadena específica sería "¿Cuál es tu nombre?" es decir, utilizando comillas dobles. De manera
similar, debe usar una secuencia de escape para usar una comilla doble en una cadena entre comillas dobles. Además, debe
indicar la barra invertida usando la secuencia de escape \\.

¿Y si quisiera especificar una cadena de dos líneas? Una forma es usar una cadena entre comillas triples como se
muestrapreviamente o puede usar una secuencia de escape para el carácter de nueva línea - \ n para indicar el comienzo de una
nueva línea. Un ejemplo es:
'Esta es la primera línea \ nEsta es la segunda línea'
Otra secuencia de escape útil que debe conocer es la pestaña: \ t. Hay muchas más secuencias de escape, pero aquí solo he
mencionado las más útiles.

Una cosa a tener en cuenta es que en una cadena, una sola barra invertida al final de la línea indica que la cadena continúa en la
siguiente línea, pero no se agrega una nueva línea. Por ejemplo:

"Esta es la primera oración. \


Esta es la segunda oración".

3
Lo

es equivalente a

"Esta es la primera oración. Esta es la segunda oración".


Cadena sin procesar
Si necesita especificar algunas cadenas en las que no se maneja ningún procesamiento especial, como secuencias de escape, entonces
lo que necesita es especificar una cadena sin procesar anteponiendo ro R a la cadena. Un ejemplo es:

Nota para usuarios de expresiones regulares


r "Las líneas nuevas se indican mediante \ n"

Utilice siempre cadenas sin formato cuando trabaje con expresiones regulares. De lo contrario, es posible que se requiera
mucho retroceso. Por ejemplo, las referencias inversas se pueden denominar '\\ 1' o r '\ 1'.

Variable
Usar solo constantes literales pronto puede volverse aburrido; necesitamos alguna forma de almacenar cualquier información y
manipularla también. Aquí es donde entran en juego las variables. Las variables son exactamente lo que su nombre implica: su
valor puede variar, es decir, puede almacenar cualquier cosa usando una variable. Las variables son solo partes de la memoria de
su computadora donde almacena cierta información. A diferencia de las constantes literales, necesita algún método para acceder a
estas variables y, por lo tanto, les da nombres.

Denominación de identificador
Las variables son ejemplos de identificadores. Los identificadores son nombres que se dan para identificar algo. Hay algunas
reglas que debe seguir para nombrar identificadores:

El primer carácter del identificador debe ser una letra del alfabeto (ASCII en mayúscula o ASCII en minúscula o carácter
Unicode) o un guión bajo (_).
El resto del nombre del identificador puede constar de letras (ASCII en mayúsculas o ASCII en minúsculas o carácter
Unicode), guiones bajos (_) o dígitos (0-9).
Los nombres de los identificadores distinguen entre mayúsculas y minúsculas. Por ejemplo, myname y myName no son
lo mismo. Tenga en cuenta la n minúscula en el primero y la N mayúscula en el último.
Ejemplos de nombres de identificadores válidos son I , nombre_2_3 . Ejemplos de nombres de identificadores no
válidos son2 cosas , esto es Espaciado , mi nombre y> a1b2_c3 .

Tipos de datos
Las variables pueden contener valores de diferentes tipos llamados tipos de datos. Los tipos básicos son números y cadenas, que ya
hemos comentado. En capítulos posteriores, veremos cómo crear nuestros propios tipos usandoclases.

Objeto
Recuerde, Python se refiere a todo lo que se usa en un programa como un objeto. Esto se entiende en sentido genérico. En lugar de
decir "el
alguna cosa"', decimos" el objeto ".

Nota para los usuarios de programación orientada a objetos:

Python está fuertemente orientado a objetos en el sentido de que todo es un objeto, incluidos números, cadenas y funciones.

3
Lo

Ahora veremos cómo usar variables junto con constantes literales. Guarde el siguiente ejemplo y ejecute el programa.

Cómo escribir programas en Python


De ahora en adelante, el procedimiento estándar para guardar y ejecutar un programa Python es el siguiente:

Para PyCharm
1. Abierto PyCharm.
2. Cree un nuevo archivo con el nombre de archivo mencionado.
3. Escriba el código de programa dado en the ejemplo.
4. Haga clic derecho y ejecute el archivo actual.

NOTA: Siempre que tenga que proporcionar argumentos de la línea de comando, haga clic en Correr -> Editar
configuraciones y escriba los argumentos en el Parámetros de la secuencia de comandos: sección y haga clic en el OK
botón:

Para otros editores


1. Abra el editor de su elección.
2. Escriba el código de programa dado en el ejemplo.
3. Guárdelo como un archivo con el nombre de archivo mencionado.
4. Ejecute el intérprete con el comando python program.py para ejecutar el programa.

Ejemplo: uso de variables y constantes literales


Escriba y ejecute el siguiente programa:

# Nombre de
archivo: var.py
yo = 5
imprim
ir (i)

3
Lo

imprimir (i)

s = '' 'Esta es una cadena de


varias líneas. Esta es la
segunda línea.'''huellas
dactilares)

Producción:

Cómo
5 funciona
6
Así Esta
es como funciona
es una estedeprograma. Primero, asignamos el valor constante literal 5 a la variable i usando el operador de asignación
cadena

(=). varias líneas. Esta es la


Esta línea se llama declaración porque indica que se debe hacer algo y, en este caso, conectamos el nombre de la variable
segunda línea.
Ial valor 5. A continuación, imprimimos el valor de i usando la declaración de impresión que, como era de
esperar, simplemente imprime el valor de la variable en la pantalla.

Luego agregamos 1 al valor almacenado en i y lo almacenamos nuevamente. Luego lo imprimimos y, como era de

esperar, obtenemos el valor 6. De manera similar, asignamos la cadena literal a la variable sy luego la imprimimos.

Nota para programadores de lenguaje estático

Las variables se utilizan simplemente asignándoles un valor. No se necesita / utiliza ninguna declaración o definición de tipo de
datos.

Línea lógica y física


Una línea física es lo que ve cuando escribe el programa. Una línea lógica es lo que Python ve como una sola declaración.
Python asume implícitamente que cada línea física corresponde a una línea lógica.

Un ejemplo de una línea lógica es una declaración como print ('hola mundo') - si esto estaba en una línea por sí mismo (como lo
ve en un editor), entonces esto también corresponde a una línea física.

Implícitamente, Python fomenta el uso de una sola declaración por línea, lo que hace que el código sea más legible.

Si desea especificar más de una línea lógica en una sola línea física, debe especificarlo explícitamente con un punto y coma (;)
que indica el final de una línea / declaración lógica. Por ejemplo:

es efectivamente igual que


yo = 5
imprim
ir (i)
que yo
también
= 5; es lo mismo que
imprimir (i);

y loyo
mismo
= 5;que
imprimir (i);

yo = 5; imprimir (i)

3
Lo

Sin embargo, le recomiendo encarecidamente que se limite a escribir un máximo de una sola línea lógica en cada línea física. La
idea es que nunca debes usar el punto y coma. De hecho, nunca he usado ni visto un punto y coma en un programa de Python.

Hay un tipo de situación en la que este concepto es realmente útil: si tiene una línea larga de código, puede dividirla en varias líneas
físicas utilizando la barra invertida. Esto se conoce como unión de línea explícita:

Producción:
s = 'Esto es una
cuerda. \ Esto continúa
la cadena. 'huellas
Similar,
Esta es una cuerda. Esto continúa la cadena.
dactilares)

es loi mismo
= que
\ 5

A veces,
yo = 5hay una suposición implícita en la que no es necesario utilizar una barra invertida. Este es el caso en el que la línea
lógica tiene un paréntesis inicial, corchetes iniciales o llaves iniciales pero no final. A esto se le llama unión de línea implícita.
Puede ver esto en acción cuando escribimos programas usandolista en capítulos posteriores.

Sangría
El espacio en blanco es importante en Python. De hecho, el espacio en blanco al principio de la línea es importante. Esto se llama
sangría. Los espacios en blanco iniciales (espacios y tabulaciones) al principio de la línea lógica se utilizan para determinar el
nivel de sangría de la línea lógica, que a su vez se utiliza para determinar la agrupación de declaraciones.

Esto significa que las declaraciones que van juntas deben tener la misma sangría. Cada uno de estos conjuntos de declaraciones
se denomina bloque. Veremos ejemplos de la importancia de los bloques en capítulos posteriores.

Una cosa que debe recordar es que una sangría incorrecta puede dar lugar a errores. Por ejemplo:

Cuando
yo =ejecuta
5 esto, obtiene el siguiente error:
# ¡Error a continuación! Observe un solo espacio al comienzo de la
línea.impresión('El valor es', I)
Observe que hay
Archivo un solo espacio
"whitespace.py",
impresión('Repito, el valoral comienzo
es', I) de la segunda línea. El error indicado por Python nos dice que la sintaxis del
programalínea
no es3válida,
print ('El valor
es decir, el programa no se escribió correctamente. Lo que esto significa para usted es que no puede iniciar
es', i)
arbitrariamente
^
nuevos bloques de declaraciones (excepto el bloque principal predeterminado que ha estado usando todo el
tiempo, por supuesto). Casos donde puedes usar

3
Lo

Los nuevos bloques se detallarán en capítulos posteriores, como el flujo de control.

Cómo sangrar

Utilice cuatro espacios para la sangría. Esta es la recomendación oficial del lenguaje Python. Los buenos editores harán esto
automáticamente por ti. Asegúrese de utilizar una cantidad constante de espacios para la sangría; de lo contrario, su
programa no se ejecutará o tendrá un comportamiento inesperado.

Nota para los programadores de lenguajes estáticos

Python siempre usará sangría para bloques y nunca usará llaves. Corre más. fromfutureimport tirantes aprender

Resumen
Ahora que hemos analizado muchos detalles esenciales, podemos pasar a cosas más interesantes, como las declaraciones de
flujo de control. Asegúrese de sentirse cómodo con lo que ha leído en este capítulo.

3
Operadores y

Operadores y Expresiones
La mayoría de las declaraciones (líneas lógicas) que escriba contendrán expresiones. Un ejemplo simple de expresión es 2 + 3.
Una expresión se puede dividir en operadores y operandos.

Operadores son funciones que hacen algo y se pueden representar mediante símbolos como + o palabras clave especiales. Los
operadores requieren algunos datos para operar y dichos datos se denominan operandos. En este caso, 2 y 3 son los operandos.

Operadores
Veremos brevemente los operadores y su uso.

Tenga en cuenta que puede evaluar las expresiones dadas en los ejemplos utilizando el intérprete de forma interactiva. Por
ejemplo, para probar la expresión 2 + 3, use el indicador interactivo del intérprete de Python:

A continuación, se ofrece una descripción general rápida de los operadores disponibles:


>>> 2 + 3
5
+ (más)
>>> 3 * 5
15
>>>
Agrega dos objetos
3+5 da 8 . 'a' + 'b' da 'ab' .
- (menos)

Da la resta de un número del otro; si el primer operando está ausente, se supone que es cero.
-5,2 da un número negativo y 50 - 24 da 26 .
* (multiplicar)

Da la multiplicación de los dos números o devuelve la cadena repetida tantas veces.


2*3 da 6 . 'la' * 3 da 'lalala' .
** (energía)

Devuelve x elevado a y
3 ** 4 da 81 (es decir 3 * 3 * 3 * 3 )
/ (dividir)

Dividir x por y
13/3 da 4.333333333333333
// (dividir y piso)

Divida x por y y redondee la respuesta hacia abajo al valor entero más cercano. Tenga en cuenta que si uno de los
valores es un flotante, obtendrá un flotante.
13 // 3 da 4
-13 // 3 da -5
9 // 1,81 da 4.0
% (módulo)

Devuelve el resto de la división.


13% 3 da 1 . -25,5% 2,25 da 1,5 .

3
Operadores y

<< (Shift izquierdo)

Desplaza los bits del número a la izquierda el número de bits especificado. (Cada número está representado en la
memoria por bits o dígitos binarios, es decir, 0 y 1)
2 << 2 da 8 . 2 está representado por 10 en bits.
El desplazamiento a la izquierda en 2 bits da 1000, que representa el decimal 8.
>> (Giro a la derecha)

Desplaza los bits del número a la derecha el número de bits especificado.


11 >> 1 da 5 .
11se representa en bits por 1011 que cuando se desplaza a la derecha en 1 bit da 101, que es
el decimal 5. (Y de bits)
Y

Y de los números a nivel de bits: si ambos bits son 1, el resultado es 1. De lo contrario, es 0.


5y3 da 1 ( 0101 y 0011 da 0001 )
| (OR bit a bit)

OR bit a bit de los números: si ambos bits son 0, el resultado es 0. De lo contrario, es 1.


5|3 da 7 ( 0101 | 0011 da 0111 )
^ (XOR bit a bit)

XOR bit a bit de los números: si ambos bits (1 o 0) son iguales, el resultado es 0. De lo contrario, es 1.
5^3 da 6 ( O101 ^ 0011 da 0110 )
~ (inversión de bits)

La inversión bit a bit de x es - (x + 1)


~ 5da -6. Más detalles enhttp://stackoverflow.com/a/11810203
< (menos que)

Devuelve si x es menor que y. Todos los operadores de comparación devuelven Verdadero o Falso. Tenga en cuenta
las mayúsculas de estos nombres.
5 <3 da Falso y 3 <5 da Cierto .
Las comparaciones se pueden encadenar arbitrariamente: 3 <5 <7
> da Verdadero. (mas grande que)

Devuelve si x es mayor que y


5> 3devuelve True. Si ambos operandos son números, primero se convierten a un tipo común. De lo
contrario, siempre devuelve False.
<= (Menos que o igual a)

Devuelve si x es menor o igual que y


x = 3; y = 6; x <= y devoluciones Cierto
> = (Mayor qué o igual a)

Devuelve si x es mayor o igual que y


x = 4; y = 3; x> = 3 devoluciones Cierto
== (igual a)

Compara si los objetos son iguales


x = 2; y = 2; x == y devoluciones Cierto
x = 'str'; y = 'stR'; x == y devoluciones Falso
x = 'str'; y = 'str'; x == y devoluciones Cierto
!= (no igual a)

Compara si los objetos no son iguales


x = 2; y = 3; x! = y devoluciones Cierto
no (NO booleano)

3
Operadores y

Si x es,Cierto
vuelve Falso . Si x esFalso , vuelve Cierto .
x = Verdadero; no x devoluciones Falso .
y (booleano Y)

XyY devoluciones Falso si x es Falso , de lo contrario, devuelve la evaluación de y


x = falso; y = Verdadero; X y Ydevuelve False ya que x es False. En este caso, Python no evaluará y ya
que sabe que el lado izquierdo de la expresión 'y' es Falso, lo que implica que toda la expresión será
Falsa independientemente de los otros valores. A esto se le llama evaluación de cortocircuito.

o (booleano OR)

Si x es Verdadero, devuelve Verdadero, de lo contrario, devuelve la evaluación de y


x = Verdadero; y = falso; xoy devoluciones Cierto . Aquí también se aplica la evaluación de cortocircuitos.

Atajo para operaciones y asignaciones matemáticas


Es común ejecutar una operación matemática en una variable y luego asignar el resultado de la operación a la variable, por lo
tanto, existe un atajo para tales expresiones:

Se puede escribir como:


a = 2
a = a * 3

Darse
a =cuenta
2 de var = var expresión de operación se convierte en operación var = expresión .
a * = 3

Orden de evaluación
Si tuvieras una expresión como 2 + 3 * 4, ¿se hace primero la suma o la multiplicación? Nuestras matemáticas de la escuela
secundaria nos dicen que la multiplicación debe hacerse primero. Esto significa que el operador de multiplicación tiene mayor
precedencia que el operador de suma.

La siguiente tabla proporciona la tabla de precedencia para Python, desde la precedencia más baja (menos vinculante) hasta la
precedencia más alta (más vinculante). Esto significa que en una expresión dada, Python primero evaluará los operadores y
expresiones que se encuentran en la parte inferior de la tabla antes de los que se enumeran en la parte superior de la tabla.

La siguiente tabla, tomada del Manual de referencia de Python, se proporciona en aras de la exhaustividad. Es mucho mejor usar
paréntesis para agrupar operadores y operandos de manera apropiada para especificar explícitamente la precedencia. Esto hace
que el programa sea más legible. VerCambiar el orden de evaluación a continuación para obtener más detalles.

lambda : Expresión Lambda


si - si no : Expresión condicional
o : Booleano OR
y : Booleano Y
no x : Booleano NOT
en, no en, es, no es, <, <=,>,> =,! =, == : Comparaciones, incluidas pruebas de membresía y pruebas de identidad
| : O bit a bit
^ : XOR bit a bit
Y : Bit a bit Y
<<, >> : Turnos

3
Operadores y

: Adición y sustracción
+,

*, /, //,
: Multiplicación, división, división de piso y resto

+ x, -x,
: Positivo, negativo, bit a bit NOT

*
: Exponenciación

x [índice], x [índice: índice], x (argumentos ...),


: Suscripción, segmentación, llamada, referencia de atributo
: Visualización de enlace o tupla, visualización
(expresiones ...), [expresiones ...], {clave: valor ...},
de lista,
pantalla de diccionario, pantalla de ajuste

Los operadores con los que aún no nos hemos encontrado se explicarán en capítulos posteriores.

Los operadores con la misma precedencia se enumeran en la misma fila en la tabla anterior. Por ejemplo, + y - tienen la misma
precedencia.

Cambiar el orden de evaluación


Para hacer las expresiones más legibles, podemos usar paréntesis. Por ejemplo, 2 + (3 * 4) es definitivamente más fácil de
entender que 2 + 3 * 4, lo que requiere el conocimiento de las precedencias del operador. Como con todo lo demás, los paréntesis
deben usarse de manera razonable (no exagere) y no deben ser redundantes, como en (2 + (3 * 4)).

El uso de paréntesis tiene una ventaja adicional: nos ayuda a cambiar el orden de evaluación. Por ejemplo, si desea que se
evalúe la suma antes que la multiplicación en una expresión, puede escribir algo como (2 + 3) * 4.

Asociatividad
Los operadores suelen estar asociados de izquierda a derecha. Esto significa que los operadores con la misma precedencia se
evalúan de izquierda a derecha. Por ejemplo, 2 + 3 + 4 se evalúa como (2 + 3) + 4.

Expresiones
Ejemplo (guardar como expresión.py ):

Producción:
longitud = 5
amplitud = 2

Cómo
$ funciona
python
área = largo * ancho
expression.py El área
imprimir ('El área es',
La longitud
es 10
área) y la anchura del rectángulo se almacenan en variables con el mismo nombre. Los usamos para calcular el área y el
perímetro del rectángulo con la ayuda de expresiones. Almacenamos el resultado de la expresión longitud * anchura en el área de
variables y luego lo imprimimos usando la función de impresión. En el segundo caso, usamos directamente el valor de la expresión
2 * (largo + ancho) en la función de impresión.

3
Operadores y

Además, observe cómo Python imprime de forma bonita la salida. Aunque no hemos especificado un espacio entre 'El área es' y el
área de la variable, Python lo pone por nosotros para que obtengamos un resultado limpio y agradable y el programa sea mucho
más legible de esta manera (ya que no tenemos que preocuparnos por espaciado en las cadenas que usamos para la salida). Este es
un ejemplo de cómo Python le facilita la vida al programador.

Resumen
Hemos visto cómo usar operadores, operandos y expresiones: estos son los bloques de construcción básicos de cualquier
programa. A continuación, veremos cómo hacer uso de estos en nuestros programas mediante declaraciones.

4
Flujo de

Flujo de control
En los programas que hemos visto hasta ahora, siempre ha habido una serie de declaraciones ejecutadas fielmente por Python en
el orden exacto de arriba hacia abajo. ¿Qué pasaría si quisieras cambiar el flujo de cómo funciona? Por ejemplo, ¿desea que el
programa tome algunas decisiones y haga diferentes cosas dependiendo de las diferentes situaciones, como imprimir 'Buenos
días' o 'Buenas noches' según la hora del día?

Como habrá adivinado, esto se logra mediante declaraciones de flujo de control. Hay tres declaraciones de flujo de control en Python:
Si , por y tiempo .

La declaración if
La sentencia if se usa para verificar una condición: si la condición es verdadera, ejecutamos un bloque de sentencias (llamado bloque
if), de lo contrario procesamos otro bloque de sentencias (llamado bloque else). La cláusula else es opcional.

Ejemplo (guardar como if.py ):

Producción:
numero = 23
adivinar = En t(aporte('Ingrese un número entero:'))

Cómo
$ funciona
Sipython if.py
adivinar == número:
Ingrese
# Elun número
nuevo entero:
bloque 50
comienza aquí
No, impresión(Felicitaciones,
es un poco más bajo que eso
lo has
Hecho
adivinado.) impresión('(¡pero no ganas
ningún premio!)') # El nuevo bloque
$ python if.py
termina aquí
Ingrese
elif un número entero: 22
adivinar
No, <número:
es un poco
# más alto que eso
Hecho
Otro bloque
impresión('No, es un poco más alto que
$ python
eso')if.py
# Puedes hacer lo que quieras en un
Ingrese un ...
bloque número entero: 23
Felicitaciones,
demás: lo adivinó.
(¡pero no ganas ningún
impresión('No, es un poco más bajo que eso')
premio!) Hecho
# debes haber adivinado> número para llegar aquí

4
Flujo de

En este programa, tomamos conjeturas del usuario y verificamos si es el número que tenemos. Establecemos el número de
variable en cualquier número entero que queramos, digamos 23. Luego, tomamos la suposición del usuario usando la función
input (). Las funciones son solo programas reutilizables. Leeremos más sobre ellos en elSiguiente capítulo.

Suministramos una cadena a la función de entrada incorporada que la imprime en la pantalla y espera la entrada del usuario. Una
vez que ingresamos algo y presionamos la tecla kbd: [enter], la función input () devuelve lo que ingresamos, como una cadena.
Luego convertimos esta cadena en un número entero usando int y luego la almacenamos en la variable guess. En realidad, int es
una clase, pero todo lo que necesita saber ahora es que puede usarlo para convertir una cadena en un número entero (asumiendo
que la cadena contiene un número entero válido en el texto).

A continuación, comparamos la suposición del usuario con el número que hemos elegido. Si son iguales, imprimimos un
mensaje de éxito. Observe que usamos niveles de sangría para decirle a Python qué declaraciones pertenecen a qué bloque. Es
por eso que la sangría es tan importante en Python. Espero que se apegue a la regla de "sangría consistente". ¿Eres tú?

Observe cómo la instrucción if contiene dos puntos al final; le estamos indicando a Python que sigue un bloque de declaraciones.

Luego, verificamos si la suposición es menor que el número, y si es así, le informamos al usuario que debe adivinar un poco
más que eso. Lo que hemos usado aquí es la cláusula elif que en realidad combina dos declaraciones if else-if else relacionadas
en una declaración if-elif-else combinada. Esto facilita el programa y reduce la cantidad de sangría requerida.

Las declaraciones elif y else también deben tener dos puntos al final de la línea lógica seguidos de su correspondiente bloque de
declaraciones (con la sangría adecuada, por supuesto)

Puede tener otra instrucción if dentro del bloque if de una instrucción if y así sucesivamente; esto se denomina instrucción if

anidada. Recuerde que las partes elif y else son opcionales. Una declaración if mínima válida es:

Si Cierto:
impresión('Si es cierto')

Una vez que Python ha terminado de ejecutar la instrucción if completa junto con las cláusulas elif y else asociadas, pasa a la
siguiente instrucción en el bloque que contiene la instrucción if. En este caso, es el bloque principal (donde comienza la ejecución
del programa), y la siguiente instrucción es la instrucción print ('Listo'). Después de esto, Python ve los extremos del programa y
simplemente termina.

Aunque este es un programa muy simple, he estado señalando muchas cosas que debes notar. Todos estos son bastante sencillos (y
sorprendentemente simples para aquellos de ustedes con experiencia en C / C ++). Tendrá que ser consciente de todas estas cosas
inicialmente, pero después de un poco de práctica se sentirá cómodo con ellas y todo se sentirá "natural" para usted.

Nota para programadores de C / C ++

No hay una declaración de cambio en Python. Puede usar una instrucción if..elif..else para hacer lo mismo (y en algunos
casos, use unadiccionario para hacerlo rápido)

La declaración while
La instrucción while le permite ejecutar repetidamente un bloque de declaraciones siempre que una condición sea verdadera. Una
instrucción while es un ejemplo de lo que se denomina instrucción en bucle. Una instrucción while puede tener una cláusula else
opcional.

Ejemplo (guardar como while.py ):

numero = 23
corriendo =
Cierto

tiempo corriendo:
adivinar = En t(aporte('Ingrese un número entero:'))

Si adivinar == número:

4
Flujo de

# esto hace que el ciclo while se


detenga corriendo = Falso
elif adivinar <número:
impresión('No, es un poco más alto que
eso.') demás:
impresión('No, es un poco más bajo que eso.')
demás:
impresión('El ciclo while ha terminado.')
# Haz cualquier otra cosa que quieras hacer aquí

impresión('Hecho')

Producción:

Cómo funciona
$ python while.py
Ingrese un número
En este programa,
entero: 50 todavía estamos jugando al juego de adivinanzas, pero la ventaja es que el usuario puede seguir adivinando
No, es un poco más bajo que eso.
hasta que adivine correctamente; no es necesario ejecutar repetidamente el programa para cada adivinación, como hemos hecho
Ingrese un número entero: 22
en laNo,
sección
es unanterior.
poco más. Esto
altodemuestra
que eso.acertadamente el uso de la instrucción while.
Ingrese un número entero: 23
Movemos la entrada ylo
Felicitaciones, lasadivinó.
declaraciones if al interior del ciclo while y establecemos la variable que se ejecuta en True antes
del ciclo while.while
El ciclo Primero,
ha verificamos si la variable en ejecución es Verdadera y luego procedemos a ejecutar el bloque while
terminado. Hecho
correspondiente. Una vez ejecutado este bloque, se vuelve a comprobar la condición que en este caso es la variable en
ejecución. Si es cierto, ejecutamos el bloque while de nuevo, de lo contrario continuamos ejecutando el bloque else opcional y
luego continuamos con la siguiente instrucción.

El bloque else se ejecuta cuando la condición del bucle while se vuelve Falsa; esta puede incluso ser la primera vez que se
verifica la condición. Si hay una cláusula else para un bucle while, siempre se ejecuta a menos que salga del bucle con un
rotura declaración.

El verdadero y el falso se denominan tipos booleanos y puede considerarlos equivalentes al valor 1 y 0


respectivamente.

Nota para programadores de C / C ++

Recuerde que puede tener una cláusula else para el ciclo while.

La por círculo
La instrucción for..in es otra instrucción en bucle que itera sobre una secuencia de objetos, es decir, pasa por cada elemento en una
secuencia. Veremos más sobresecuencias en detalle en capítulos posteriores. Lo que necesita saber ahora es que una secuencia es
solo una colección ordenada de elementos.

Ejemplo (guardar como for.py ):

por I en distancia(1, 5):


imprimir (i)
demás:
impresión('El ciclo for ha terminado')

4
Flujo de

Producción:

Cómo funciona
$ python
for.py 1
En este
2 programa, estamos imprimiendo una secuencia de números. Generamos esta secuencia de números usando el rango
incorporado
3
4
función.
El ciclo for ha terminado

Lo que hacemos aquí es proporcionarle dos números y el rango devuelve una secuencia de números comenzando desde el primer
número y hasta el segundo número. Por ejemplo, el rango (1,5) da la secuencia [1, 2, 3, 4]. Por defecto, el rango toma un conteo
de pasos de 1. Si proporcionamos un tercer número al rango, entonces ese se convierte en el conteo de pasos. Por ejemplo, el
rango (1,5,2) da [1,3]. Recuerde que el rango se extiende hasta el segundo número, es decir, no incluye el segundo número.

Tenga en cuenta que distancia() genera solo un número a la vez, si desea la lista completa de números, llame lista() sobre
el distancia() , por ejemplo, lista (rango (5)) resultará en [0, 1, 2, 3, 4] . Las listas se explican en lacapítulo de
estructuras de datos.

El bucle for luego itera sobre este rango - para i en el rango (1,5) es equivalente a para i en [1, 2, 3, 4] que es como asignar cada
número (u objeto) en la secuencia a i, uno a la vez, y luego ejecutar el bloque de declaraciones para cada valor de
I. En este caso, simplemente imprimimos el valor en el bloque de declaraciones.

Recuerde que la parte else es opcional. Cuando se incluye, siempre se ejecuta una vez después de que finaliza el ciclo for, a
menos que unrotura se encuentra la declaración.

Recuerde que el bucle for..in funciona para cualquier secuencia. Aquí, tenemos una lista de números generada por la función de
rango incorporada, pero en general podemos usar cualquier tipo de secuencia de cualquier tipo de objetos. Exploraremos esta
idea en detalle en capítulos posteriores.

Nota para programadores de C / C ++ / Java / C #

El bucle for de Python es radicalmente diferente del bucle for de C / C ++. Los programadores de C # notarán que el ciclo
for en Python es similar al ciclo foreach en C #. Los programadores de Java notarán que lo mismo es similar a para (int i:
IntArray) en Java 1.5.

En C / C ++, si quieres escribir para (int i = 0; i <5; i ++) , luego en Python escribes solo para i en el rango

(0,5) . Como puede ver, elpor loop es más simple, más expresivo y menos propenso a errores en Python.

La declaración de descanso
La sentencia de ruptura se utiliza para salir de una sentencia de bucle, es decir, detener la ejecución de una sentencia de bucle,
incluso si la condición de bucle no se ha vuelto Falsa o la secuencia de elementos no se ha repetido por completo.

Una nota importante es que si se escapa de un por o tiempo bucle, cualquier bucle correspondiente demás el bloque no se ejecuta.

Ejemplo (guardar como break.py ):

tiempo Cierto:
s = aporte('Ingrese algo:') Si
s == 'dejar':
rotura
impresión('La longitud de la cadena es',
len(pique('Hecho')

4
Flujo de

Producción:

Cómo funciona
$ python break.py
Ingrese algo: programar es divertido La
En este programa,
longitud tomamos
de la cadena repetidamente
es 18 la entrada del usuario e imprimimos la longitud de cada entrada cada vez.
Ingrese algo: Cuando el trabajo esté
Proporcionamos una condición especial para detener el programa comprobando si la entrada del usuario es 'salir'. Paramos el
terminado La longitud de la cuerda es
programa
21 saliéndonos del bucle y llegamos al final del programa.
Ingrese algo: si desea que su trabajo también sea
La longitud de lalacadena
divertido: de entrada
longitud de la se puede es
cuerda averiguar
37 utilizando el len función.
Ingrese algo: use Python!
Recuerda que elrotura
La longitud de la la declaración
cadena es se puede utilizar con el por bucle también.
11 Ingrese algo: salir
Pitón poética de Swaroop

La entrada que he usado aquí es un mini poema que he escrito:

Programar es

Ladivertido
Seguir Declaración
cuando el
trabajo está hecho
si quieres que tu trabajo también
La instrucción continue se¡usa
sea divertido: usa para decirle a Python que omita el resto de las declaraciones en el bloque de bucle actual y
Python!

continúe con la siguiente iteración del bucle.

Ejemplo (guardar como continue.py ):

Producción:
tiempo Cierto:
s = aporte('Ingrese algo:') Si
s == 'dejar':
$ pythonrotura
continue.py
Si len(s) < 3:
Ingrese impresión('Demasi
algo: a
Demasiado pequeño
ado pequeña')
Ingrese Seguir
algo: 12
Demasiado pequeño entrada es de longitud
impresión('La
Ingrese algo: abc# Realice otros tipos
suficiente')
La entrada es de longitud
suficiente Ingrese algo: salir

4
Flujo de

Cómo funciona

En este programa, aceptamos la entrada del usuario, pero procesamos la cadena de entrada solo si tiene al menos 3 caracteres.
Entonces, usamos el
incorpo función para obtener la longitud y si la longitud es menor que 3, omitimos el resto de las declaraciones en el bloque
rado l
usando la declaración. De lo contrario, se ejecutan el resto de sentencias en el bucle, realizando cualquier tipo de
Seguir
procesamiento que queramos hacer
aquí.

Tenga en cuenta que la instrucción continue también funciona con el bucle for.

Resumen
Hemos visto cómo utilizar las tres sentencias de flujo de control: if, while y for junto con su interrupción y
Seguir declaraciones. Estas son algunas de las partes de Python más utilizadas y, por lo tanto, es esencial
sentirse cómodo con ellas.

A continuación, veremos cómo crear y utilizar funciones.

4
Funcio

Funciones
Las funciones son programas reutilizables. Le permiten dar un nombre a un bloque de declaraciones, lo que le permite ejecutar ese
bloque usando el nombre especificado en cualquier lugar de su programa y la cantidad de veces que desee. Esto se conoce como
llamar a la función. Ya hemos utilizado muchas funciones integradas como len y range.

El concepto de función es probablemente el bloque de construcción más importante de cualquier software no trivial (en cualquier
lenguaje de programación), por lo que exploraremos varios aspectos de las funciones en este capítulo.

Las funciones se definen mediante la palabra clave def. Después de esta palabra clave viene un nombre de identificador para la
función, seguido de un par de paréntesis que pueden encerrar algunos nombres de variables, y de los dos puntos finales que
terminan la línea. A continuación, sigue el bloque de declaraciones que forman parte de esta función. Un ejemplo mostrará que
esto es realmente muy simple:

Ejemplo (guardar como function1.py ):

Producción:
def di hola():
# bloque perteneciente a la función
impresión('Hola Mundo')
Cómo
$ funciona
# python
Fin de función
function1.py hola
Definimos
mundo una #función
di hola() llamarllamada say_hello
a la función di usando la sintaxis como se explicó anteriormente. Esta función no toma parámetros y,
por hola()
lo tanto,#no
llamar a la función
hay variables de nuevo
declaradas entre paréntesis. Los parámetros de las funciones se ingresan simplemente en la función
para que podamos pasarle diferentes valores y obtener los resultados correspondientes.

Observe que podemos llamar a la misma función dos veces, lo que significa que no tenemos que volver a escribir el mismo código.

Parámetros de función
Una función puede tomar parámetros, que son valores que le proporciona a la función para que la función pueda hacer algo
utilizando esos valores. Estos parámetros son como variables excepto que los valores de estas variables se definen cuando
llamamos a la función y ya tienen valores asignados cuando se ejecuta la función.

Los parámetros se especifican dentro del par de paréntesis en la definición de la función, separados por comas. Cuando llamamos
a la función, proporcionamos los valores de la misma manera. Tenga en cuenta la terminología utilizada: los nombres dados en la
definición de la función se denominan parámetros, mientras que los valores que proporciona en la llamada a la función se
denominan argumentos.

Ejemplo (guardar como function_param.py ):

def print_max(a,
b): Si a> b:
imprimir (a, 'es
máximo') elif a == b:
imprimir (a, 'es igual
a', B) demás:

4
Funcio

imprimir (b, 'es máximo')

# pasar directamente valores


literales print_max (3, 4)

x = 5
y = 7

# pasar variables como


argumentos print_max (x, y)

Producción:

Cómo funciona
$ python function_param.py
4 es máximo
Aquí, definimos
7 es máximo una función llamada print_max que usa dos parámetros llamados ay b. Averiguamos el número mayor usando

una declaración simple if..else y luego imprimimos el número mayor.

La primera vez que llamamos a la función print_max, proporcionamos directamente los números como argumentos. En el
segundo caso, llamamos a la función con variables como argumentos. print_max (x, y) hace que el valor del argumento x se
asigne al parámetro ay el valor del argumento y se asigne al parámetro b. La función print_max funciona de la misma manera
en ambos casos.

Variables locales
Cuando declaras variables dentro de la definición de una función, no están relacionadas de ninguna manera con otras variables con
los mismos nombres usados fuera de la función, es decir, los nombres de las variables son locales a la función. A esto se le llama
el alcance de la variable. Todas las variables tienen el alcance del bloque en el que se declaran a partir del punto de definición del
nombre.

Ejemplo (guardar como function_local.py ):

Producción:
x = 50

Cómo
$ funciona
python
def func(X):
function_local.py
impresión('x x es
La primera
50 es', vezx)que
x =imprimimos
2 el valor del nombre x con la primera línea en el cuerpo de la función, Python usa el valor del
El local x
impresión('Se cambió
parámetro declarado en el bloquelaprincipal,
x local arriba
a', X)de la definición de la función.
cambiado a 2 x

func (x)
impresión('x es todavía', X)

4
Funcio

A continuación, asignamos el valor 2 ax. El nombre x es local a nuestra función. Entonces, cuando cambiamos el valor de x en
la función, la x definida en el bloque principal no se ve afectada.

Con la última declaración de impresión, mostramos el valor de x como se define en el bloque principal, confirmando así que en
realidad no se ve afectado por la asignación local dentro de la función previamente llamada.

La global declaración
Si desea asignar un valor a un nombre definido en el nivel superior del programa (es decir, no dentro de ningún tipo de alcance,
como funciones o clases), entonces debe decirle a Python que el nombre no es local, pero es global. . Hacemos esto usando la
declaración global. Es imposible asignar un valor a una variable definida fuera de una función sin la declaración global.

Puede utilizar los valores de dichas variables definidas fuera de la función (asumiendo que no hay ninguna variable con el mismo
nombre dentro de la función). Sin embargo, esto no se recomienda y debe evitarse, ya que al lector del programa no le queda
claro dónde está la definición de esa variable. El uso de la declaración global deja muy claro que la variable está definida en un
bloque más externo.

Ejemplo (guardar como function_global.py ):

Producción:
x = 50

Cómo funciona
def$ func():
python
function_global.py
global X x es
La declaración
50 global se usa para declarar que x es una variable global; por lo tanto, cuando asignamos un valor a x dentro de la
Se cambió la x global
función, ese cambio se refleja cuando usamos el valor de x en el bloque principal.
impresión('x
a 2 es',
El valor
x) xde x es
= 2
impresión('Se
Puede especificar más decambió la x global
una variable a', X)
global utilizando el mismo global declaración, por ejemplo global x, y, z .

func ()
Valores devalor
impresión('El argumento
de x es', X) predeterminados
Para algunas funciones, es posible que desee hacer que algunos parámetros sean opcionales y usar valores predeterminados en
caso de que el usuario no quiera proporcionar valores para ellos. Esto se hace con la ayuda de valores de argumento
predeterminados. Puede especificar valores de argumento predeterminados para los parámetros agregando al nombre del
parámetro en la definición de la función el operador de asignación (=) seguido del valor predeterminado.

Tenga en cuenta que el valor del argumento predeterminado debe ser una constante. Más precisamente, el valor del argumento
predeterminado debería ser inmutable; esto se explica en detalle en capítulos posteriores. Por ahora, recuerda esto.

4
Funcio

Ejemplo (guardar como function_default.py ):

Producción:
def decir(mensaje, tiempos
= 1): imprimir
(mensaje * veces)
Cómo funciona
$ python
function_default.py
decir('Hola') Hola
La función denominada say se utiliza para imprimir una cadena tantas veces como se especifique. Si no proporcionamos un
WorldWorldWorldWorldWorld

valor, entonces, de forma predeterminada, la cadena se imprime solo una vez. Logramos esto especificando un valor de
argumento predeterminado de 1 a los tiempos del parámetro.

En el primer uso de say, proporcionamos solo la cadena y la imprime una vez. En el segundo uso de say, proporcionamos tanto la
cadena como un argumento 5 que indica que queremos decir el mensaje de cadena 5 veces.

PRECAUCIÓN

Solo los parámetros que están al final de la lista de parámetros pueden recibir valores de argumento predeterminados, es
decir, no puede tener un parámetro con un valor de argumento predeterminado antes de un parámetro sin un valor de
argumento predeterminado en la lista de parámetros de la función.

Esto se debe a que los valores se asignan a los parámetros por posición. Por ejemplo, def func (a, b = 5) es válido, pero
def func (a = 5, b) no es válido.

Argumentos de palabras clave


Si tiene algunas funciones con muchos parámetros y desea especificar solo algunos de ellos, entonces puede dar valores para
dichos parámetros nombrándolos - esto se llama argumentos de palabra clave - usamos el nombre (palabra clave) en lugar de la
posición (que usamos han estado usando todo el tiempo) para especificar los argumentos de la función.

Hay dos ventajas: una, usar la función es más fácil ya que no necesitamos preocuparnos por el orden de los argumentos. Dos,
podemos dar valores solo a aquellos parámetros a los que queramos, siempre que los otros parámetros tengan valores de
argumento predeterminados.

Ejemplo (guardar como function_keyword.py ):

Producción:
def func(a, b = 5, c = 10):
impresión('a es', a, 'y b es', B, 'yc es', C)

$ python
func3, 7) func
function_keyword.py
(25, c =24) a es 3
y b es
func (c7=50,
y c a
es 10 a es 25
y b es 5 y c es 24
=100)

5
Funcio

Cómo funciona

La función denominada func tiene un parámetro sin un valor de argumento predeterminado, seguido de dos parámetros con
valores de argumento predeterminados.

En el primer uso, func (3, 7), el parámetro a obtiene el valor 3, el parámetro b obtiene el valor 7 y c obtiene el valor
predeterminado de 10.

En la segunda función de uso (25, c = 24), la variable a obtiene el valor de 25 debido a la posición del argumento. Luego, el
parámetro c obtiene el valor de 24 debido al nombre, es decir, los argumentos de palabras clave. La variable b obtiene el valor
predeterminado de 5.

En la tercera función de uso (c = 50, a = 100), usamos argumentos de palabras clave para todos los valores especificados.
Observe que estamos especificando el valor para el parámetro c antes que para a, aunque a se define antes que c en la
definición de la función.

Parámetros VarArgs
A veces, es posible que desee definir una función que pueda tomar cualquier número de parámetros, es decir, un número variable
de argumentos, esto se puede lograr usando las estrellas (guardar como function_varargs.py):

Producción:
def total(a = 5, * números, ** directorio
telefónico): impresión('a', a)

Cómo funciona
$ python
#iterate a través de todos los
function_varargs.py a 10
elementos en tupla por objeto unico en
Cuando declaramos
single_item 1 un parámetro con asterisco como * param, todos los argumentos posicionales desde ese punto hasta el final
números:
single_item 2
se recopilan como una tupla llamada
impresión('objeto 'param'.
unico', objeto unico)
single_item 3
Inge 1560
De manera similar,acuando
#iterate travésdeclaramos un parámetro
de todos los elementoscon doble
del estrella como ** param, todos los argumentos de palabras clave
diccionario
Juan 2231
desde esepor
punto
Gato 1123
primera_parte,
hasta el final se
segunda_parte
recopilan como
en un diccionario llamado 'param'.
phonebook.items (): imprimir (primera_parte,
Exploraremossegunda_parte)
tuplas y diccionarios en un capítulo posterior.

La regreso declaración
La declaración de retorno se usa para regresar de una función, es decir, salir de la función. Opcionalmente, también podemos
devolver un valor de la función.

5
Funcio

Ejemplo (guardar como function_return.py ):

Producción:
def máximo(x, y):
Si x> y:
regreso
Cómo funciona
$ python
X elif x ==
function_return.py
y: 3
La función máxima
regresodevuelve el máximo
'Los números son de los parámetros, en este caso los números proporcionados a la función. Utiliza un simple
iguales' demás:
si ... si no declaración para encontrar el valor mayor y luego devuelve ese valor.
regreso y

Tenga en cuenta que una declaración de retorno sin un valor equivale a devolver Ninguno. Ninguno es un tipo especial en Python que
representa la nada. Por ejemplo, se usa para indicar que una variable no tiene valor si tiene un valor de Ninguno.

Cada función contiene implícitamente un regresar Ninguno declaración al final a menos que haya escrito su propia regreso
declaración. Puedes ver esto corriendoimprimir (alguna_función ()) donde la funcion alguna_función no usa el regreso
declaración como:

La declaración de paso se usa en Python para indicar un bloque vacío de declaraciones.


def alguna_función():
aprobar
SUGERENCIA: Hay una función incorporada llamada max que ya implementa la funcionalidad 'buscar máximo', así que
use esta función incorporada siempre que sea posible.

DocStrings
Python tiene una característica ingeniosa llamada cadenas de documentación, a la que generalmente se hace referencia por su
nombre más corto cadenas de documentación. DocStrings es una herramienta importante que debe utilizar, ya que ayuda a
documentar mejor el programa y lo hace más fácil de entender. Sorprendentemente, incluso podemos recuperar la cadena de
documentos de, digamos una función, cuando el programa se está ejecutando.

Ejemplo (guardar como function_docstring.py ):

def print_max(x, y):


'' 'Imprime el máximo de dos números.

Los dos valores deben ser


números enteros '' '. #
convertir a números enteros, si
es posible x = En t(X)
y = En t(y)

Si x> y:
imprimir (x, 'es
máximo') demás:
imprimir (y, 'es máximo')

5
Funcio

print_max (3, 5) imprimir (print_max. doc)

Producción:

Cómo funciona
$ python function_docstring.py
5 es máximo
UnaImprime
cadena en
el lamáximo
primeradelínea
dos lógica de una función es la cadena de documentación para esa función. Tenga en cuenta que
números.

DocStrings también se aplican amodulos y clases que conoceremos en los capítulos respectivos.
Los dos valores deben ser números enteros.

La convención que se sigue para una cadena de documentos es una cadena de varias líneas donde la primera línea comienza con
una letra mayúscula y termina con un punto. Luego, la segunda línea está en blanco seguida de una explicación detallada a partir
de la tercera línea. Se le recomienda encarecidamente que siga esta convención para todas sus cadenas de documentos para todas
sus funciones no triviales.

Podemos acceder a la cadena de documentos de la función print_max usando el atributo doc (observe el doble subrayado)
(nombre que pertenece a) de la función. Solo recuerda que Python trata todo como un objeto y esto incluye funciones.
Aprenderemos más sobre los objetos en el capítulo sobreclases.

Si ha utilizado help () en Python, ¡ya ha visto el uso de cadenas de documentos! Lo que hace es buscar el Doc
atributo de esa función y lo muestra de una manera ordenada para usted. Puede probarlo en la función anterior, solo incluya
ayuda (print_max) en su programa. Recuerde presionar elq tecla para salir ayuda .

Las herramientas automatizadas pueden recuperar la documentación de su programa de esta manera. Por lo tanto, le recomiendo
encarecidamente que utilice cadenas de documentación para cualquier función no trivial que escriba. El comando pydoc que viene
con su distribución de Python funciona de manera similar a help () usando cadenas de documentación.

Resumen
Hemos visto muchos aspectos de las funciones, pero tenga en cuenta que todavía no hemos cubierto todos los aspectos de ellas. Sin
embargo, ya hemos cubierto la mayor parte de lo que usará con respecto a las funciones de Python a diario.

A continuación, veremos cómo usar y crear módulos de Python.

5
Módul

Módulos
Ha visto cómo puede reutilizar código en su programa definiendo funciones una vez. ¿Y si quisiera reutilizar una serie de funciones
en otros programas que escribe? Como habrás adivinado, la respuesta son los módulos.

Existen varios métodos para escribir módulos, pero la forma más sencilla es crear un archivo con extensión .py que contenga
funciones y variables.

Otro método consiste en escribir los módulos en el idioma nativo en el que se escribió el intérprete de Python. Por ejemplo, puede
escribir módulos en elLenguaje de programación C y cuando se compilan, se pueden usar desde su código Python cuando se usa el
intérprete estándar de Python.

Otro programa puede importar un módulo para hacer uso de su funcionalidad. Así es como también podemos usar la biblioteca
estándar de Python. Primero, veremos cómo usar los módulos de biblioteca estándar.

Ejemplo (guardar como module_using_sys.py ):

Producción:
importar sys

impresión('Los argumentos de la línea


Cómo
$ funciona
depython module_using_sys.py
comando somos argumentos
son:') por I en sys.argv: # cada argumento está separado por
blanco
imprimir (i) espacio Los argumentos de la línea
Primero, importamos
de comando son: el módulo sys usando la declaración de importación. Básicamente, esto se traduce en que le decimos a
module_using_sys.
impresión('\ n \ usar
nEl este
PYTHONPATH es', sys.path, '\norte')
Python que queremos módulo. El módulo sys contiene funciones relacionadas con el intérprete de Python y su
py nosotros
entorno,
son es decir, el sistema.
argument
Cuando
os Python ejecuta la instrucción import sys, busca el módulo sys. En este caso, es uno de los módulos integrados y, por lo
tanto, Python sabe dónde encontrarlo.

Si no
Elera un móduloes
PYTHONPATH compilado,
['/ tmp /espy',
decir, un módulo escrito en Python, entonces el intérprete de Python lo buscará en los
# muchas entradas aquí, no se muestran
directorios listados en su variable sys.path. Si se encuentra el módulo, se ejecutan las instrucciones en el cuerpo de ese módulo
aquí '/Library/Python/2.7/site-
y el módulo está disponible para su uso. Tenga en cuenta que la inicialización se realiza solo la primera vez que importamos un
módulo.

Se accede a la variable argv en el módulo sys utilizando la notación con puntos, es decir, sys.argv. Indica claramente que este
nombre es parte del módulo sys. Otra ventaja de este enfoque es que el nombre no choca con ninguna variable argv utilizada en
su programa.

5
Módul

La sys.argv variable es una lista de cadenas (las listas se explican en detalle en una capítulo posterior). Específicamente,
elsys.argv contiene la lista de argumentos de la línea de comandos, es decir, los argumentos pasados a su programa usando la
línea de comandos.

Si está utilizando un IDE para escribir y ejecutar estos programas, busque una forma de especificar argumentos de línea de comando
para el programa en los menús.

Aquí, cuando ejecutamos python module_using_sys.py somos argumentos , ejecutamos el módulo module_using_sys.py con el
pitóncomando y las otras cosas que siguen son argumentos pasados al programa. Python almacena los argumentos de
la línea de comandos en la variable sys.argv para que los usemos.

Recuerde, el nombre del script que se ejecuta es siempre el primer elemento de la lista sys.argv. Entonces, en este caso tendremos
'module_using_sys.py' como sys.argv [0] , 'nosotros' como sys.argv [1] , 'están' como sys.argv [2] y 'argumentos' como
sys.argv [3] . Observe que Python comienza a contar desde 0 y no desde 1.

Sys.path contiene la lista de nombres de directorio desde donde se importan los módulos. Observe que la primera cadena en
sys.path está vacía; esta cadena vacía indica que el directorio actual también es parte de sys.path, que es la misma que la variable
de entorno PYTHONPATH. Esto significa que puede importar directamente módulos ubicados en el directorio actual. De lo
contrario, tendrá que colocar su módulo en uno de los directorios enumerados en sys.path.

Tenga en cuenta que el directorio actual es el directorio desde el que se inicia el programa. Ejecute import os; print (os.getcwd
()) para encontrar el directorio actual de tu programa.

Archivos .pyc compilados por bytes


Importar un módulo es un asunto relativamente costoso, por lo que Python hace algunos trucos para hacerlo más rápido. Una
forma es crear compilado por bytesarchivos con la extensión .pyc, que es una forma intermedia en la que Python transforma el
programa (recuerde la sección de introducción sobre cómo funciona Python?). Este archivo .pyc es útil cuando importa el
módulo la próxima vez desde un programa diferente:será mucho más rápido ya que una parte del procesamiento requerido para
importar un módulo ya está hecho. Además, estos archivos compilados por bytes son independientes de la plataforma.

NOTA: Estos archivos .pyc generalmente se crean en el mismo directorio que los archivos .py correspondientes. Si Python no
tiene permiso para escribir en archivos en ese directorio, no se crearán los archivos .pyc.

La declaración from..import
Si desea importar directamente la variable argv a su programa (para evitar escribir sys. Cada vez que lo haga), puede usar la
instrucción from sys import argv.

ADVERTENCIA: En general, evite usar la instrucción from..import, use la instrucción de importación en su lugar. Esto
se debe a que su programa evitará conflictos de nombres y será más legible.

Ejemplo:

de Matemáticas importar sqrt


Unimpresión("La
móduloraíz cuadrada
nombre
de 16 es", sqrt (dieciséis))

Cada módulo tiene un nombre y las declaraciones en un módulo pueden encontrar el nombre de su módulo. Esto es útil para el
propósito particular de determinar si el módulo se está ejecutando de forma independiente o se está importando. Como se
mencionó anteriormente, cuando se importa un módulo por primera vez, se ejecuta el código que contiene. Podemos usar esto
para hacer que el módulo se comporte de diferentes maneras.

5
Módul

dependiendo de si se está utilizando solo o se está importando de otro módulo. Esto se puede lograr utilizando el atributo del
nombre módulo.

Ejemplo (guardar como module_using_name.py ):

Sinombre == ' principal ':


impresión('Este programa se está ejecutando solo') demás:
impresión('Me importan de otro módulo')

Producción:

Cómo funciona
$ python module_using_name.py
Este programa se ejecuta solo
Cada módulo de Python tiene su nombre definido. Si es 'principal', eso implica que el usuario está ejecutando el módulo de
$ python
forma independiente y podemos tomar las acciones adecuadas.
>>> importar nombre_usando_módulo
Me importan de otro módulo
>>>
Hacer sus propios módulos
Crear tus propios módulos es fácil, ¡lo has estado haciendo todo el tiempo! Esto se debe a que cada programa de Python también
es un módulo. Solo debes asegurarte de que tenga una extensión .py. El siguiente ejemplo debería dejarlo claro.

Ejemplo (guardar como mymodule.py ):

def Di hola():
impresión('Hola, habla mi módulo'.)

version = '0.1'

Lo anterior fue un módulo de muestra. Como puede ver, no tiene nada de especial en comparación con nuestro programa
Python habitual. A continuación, veremos cómo usar este módulo en nuestros otros programas de Python.

Recuerde que el módulo debe ubicarse en el mismo directorio que el programa desde el cual lo importamos o en uno de los
directorios listados en sys.path.

Otro módulo (guardar como mymodule_demo.py ):

importar mymodule

mymodule.say_hi ()
impresión('Versión', mymodule. versión )

Producción:

Cómo funciona
$ python mymodule_demo.py
Hola, habla mymodule. Versión
0.1

5
Módul

Observe que usamos la misma notación con puntos para acceder a los miembros del módulo. Python hace una buena
reutilización de la misma notación para darle la sensación distintiva de 'Pythonic' para que no tengamos que seguir aprendiendo
nuevas formas de hacer las cosas.

Aquí hay una versión que utiliza el desde..importar sintaxis (guardar como mymodule_demo2.py ):

de mymodule importar say_hi, versión

Di hola()
impresión('Versión',versión )

La salida de mymodule_demo2.py es igual que la salida de mymodule_demo.py .

Tenga en cuenta que si ya había un nombre de versión declarado en el módulo que importa mymodule, habría un conflicto.
Esto también es probable porque es una práctica común que cada módulo declare su número de versión con este nombre. Por lo
tanto, siempre se recomienda preferir la declaración de importación aunque pueda hacer que su programa sea un poco más
largo.

También puedes usar:

Estodeimportará
mymoduletodos los nombres
importar * públicos como say_hi pero no importará la versión porque comienza con guiones bajos dobles.

ADVERTENCIA: Recuerde que debe evitar el uso de import-star, es decir desde mymodule import * .

Zen de Python

Uno de los principios rectores de Python es que "Explícito es mejor que implícito". Ejecute importar esto en Python para obtener
más información.

La dir función
La función incorporada dir () devuelve la lista de nombres definidos por un objeto. Si el objeto es un módulo, esta lista incluye
funciones, clases y variables, definidas dentro de ese módulo.

Esta función puede aceptar argumentos. Si el argumento es el nombre de un módulo, la función devuelve la lista de nombres de
ese módulo especificado. Si no hay ningún argumento, la función devuelve la lista de nombres del módulo actual.

Ejemplo:

$ python
>>> importar sys

# obtener nombres de atributos en el módulo sys


>>> dir(sys)
['displayhook', ' Doc ',
'argv',
'nombres_de_módulo_builtin',
'versión', 'Información de la
versión']
# solo se muestran algunas entradas aquí

# obtener nombres de atributos para el módulo actual


>>> dir()
['incorporados', ' Doc ',
' nombre ', ' paquete ', 'sys']

# crea una nueva variable 'a'


>>> a = 5

>>> dir()
['incorporados', ' Doc ', ' nombre ', ' paquete ', 'sys', 'a']

5
Módul

>>> dir()
['incorporados', ' Doc ', ' nombre ', ' paquete ', 'sys']

Cómo funciona

Primero, vemos el uso de dir en el módulo sys importado. Podemos ver la enorme lista de atributos que contiene.

A continuación, usamos la función dir sin pasarle parámetros. De forma predeterminada, devuelve la lista de atributos del módulo
actual. Tenga en cuenta que la lista de módulos importados también forma parte de esta lista.

Para observar dir en acción, definimos una nueva variable ay le asignamos un valor y luego comprobamos dir y observamos que
hay un valor adicional en la lista del mismo nombre. Eliminamos la variable / atributo del módulo actual usando la declaración
del y el cambio se refleja nuevamente en la salida de la función dir.

Una nota sobre del: Esta declaración se usa para eliminar una variable / nombre y después de que se haya ejecutado la declaración,
en este caso del a, ya no puede acceder a la variable a; es como si nunca hubiera existido antes.

Tenga en cuenta que la función dir () funciona en cualquier objeto. Por ejemplo, ejecute dir (str) para los atributos de la clase str

(string). También hay una vars () función que potencialmente puede proporcionarle los atributos y sus valores, pero no

funcionará en todos los casos.

Paquetes
A estas alturas, debe haber comenzado a observar la jerarquía de organización de sus programas. Las variables suelen ir dentro de
funciones. Las funciones y las variables globales suelen ir dentro de los módulos. ¿Y si quisiera organizar módulos? Ahí es donde
los paquetes entran en escena.

Los paquetes son solo carpetas de módulos con un archivo init .py especial que le indica a Python que esta carpeta es especial
porque contiene módulos de Python.

Supongamos que desea crear un paquete llamado 'mundo' con subpaquetes 'asia', 'áfrica', etc. y estos subpaquetes a su vez contienen
módulos como 'india', 'madagascar', etc.

Así es como estructurarías las carpetas:

Los-paquetes
<algunason solo una
carpeta conveniencia
presente para organizar
en sys.path> / módulos jerárquicamente. Verá muchos casos de esto en elbiblioteca estándar.
- mundo/
- init .py

Resumen- - Asia/
init .py
- India/
- init .py
Al igual que las funciones son partes reutilizables de programas, los módulos son programas reutilizables. Los paquetes son otra
- foo.py
jerarquía para- organizar
África/
módulos. La biblioteca estándar que viene con Python es un ejemplo de tal conjunto de paquetes y módulos.
- init .py
Hemos visto cómo
- utilizar estos módulos y crear nuestros propios módulos.
Madagascar/
- init .py
- bar.py

5
Módul

A continuación, aprenderemos sobre algunos conceptos interesantes llamados estructuras de datos.

5
Estructuras

Estructuras de datos
Las estructuras de datos son básicamente eso: son estructuras que pueden mantener algunos datos juntos. En otras palabras, se
utilizan para almacenar una colección de datos relacionados.

Hay cuatro estructuras de datos integradas en Python: lista, tupla, diccionario y conjunto. Veremos cómo utilizar cada uno de ellos y
cómo nos facilitan la vida.

Lista
Una lista es una estructura de datos que contiene una colección ordenada de elementos, es decir, puede almacenar una secuencia de
elementos en una lista. Esto es fácil de imaginar si puede pensar en una lista de compras en la que tenga una lista de artículos para
comprar, excepto que probablemente tenga cada artículo en una línea separada en su lista de compras, mientras que en Python coloca
comas entre ellos.

La lista de elementos debe incluirse entre corchetes para que Python entienda que está especificando una lista. Una vez que
haya creado una lista, puede agregar, eliminar o buscar elementos en la lista. Como podemos agregar y eliminar elementos,
decimos que una lista es un tipo de datos mutable, es decir, este tipo puede modificarse.

Introducción rápida a objetos y clases


Aunque en general he estado retrasando la discusión de objetos y clases hasta ahora, ahora se necesita una pequeña explicación
para que pueda comprender mejor las listas. Exploraremos este tema en detalle en uncapítulo posterior.

Una lista es un ejemplo del uso de objetos y clases. Cuando usamos una variable i y le asignamos un valor, digamos un entero 5,
puede pensar en ella como la creación de un objeto (es decir, una instancia) i de clase (es decir, tipo) int. De hecho, puede leer
help (int) para comprender esto mejor.

Una clase también puede tener métodos, es decir, funciones definidas para su uso con respecto a esa clase únicamente. Puede
usar estas piezas de funcionalidad solo cuando tenga un objeto de esa clase. Por ejemplo, Python proporciona un método de
adición para la clase de lista que le permite agregar un elemento al final de la lista. Por ejemplo, mylist.append ('an item')
agregará esa cadena a la lista
mi lista . Tenga en cuenta el uso de la notación con puntos para acceder a los métodos de los objetos.

Una clase también puede tener campos que no son más que variables definidas para su uso con respecto a esa clase únicamente.
Puede usar estas variables / nombres solo cuando tenga un objeto de esa clase. También se accede a los campos mediante la notación
con puntos, por ejemplo,
mylist.field .

Ejemplo (guardar como ds_using_list.py ):

# Esta es mi lista de compras


shoplist = ['manzana', 'mango', 'zanahoria',

'plátano'] impresión('Tengo', len(ladrón de

tiendas), 'artículos para comprar'.)

impresión('Estos elementos
son:', fin ='') por Articulo en
ladrón:
print (item, end ='')

impresión('\ nTambién tengo que comprar arroz'.)


shoplist.append ('arroz')
impresión('Mi lista de compras es ahora', ladrón)

impresión('Ordenaré mi lista 6
Estructuras

impresión('El primer artículo que compraré es',


ladrón [0]) olditem = shoplist [0]
del shoplist [0]
impresión('Compre el', artículo antiguo)
impresión('Mi lista de compras es ahora', ladrón)

Producción:

Cómo funciona
$ python
ds_using_list.py Tengo 4
La variable
artículosshoplist
para es una lista de compras para alguien que va al mercado. En shoplist, solo almacenamos cadenas de los
comprar.
Estos artículos son: manzana mango
nombres de los artículos para comprar, pero puede agregar cualquier tipo de objeto a una lista, incluidos números e incluso
zanahoria plátano También tengo que
otrascomprar
listas. arroz.
Mi lista de compras ahora es ['manzana', 'mango', 'zanahoria',
También hemos 'arroz'].
'plátano', utilizado el Ordenaré
bucle for..in
mi para recorrer
lista ahora los elementos de la lista. A estas alturas, debe haberse dado cuenta de que una
listaLa
también
lista es
deuna secuencia.
compras La especialidad
ordenada de secuencias
es ['manzana', se discutirá
'plátano', en unsección posterior.
'zanahoria',
'mango', 'arroz'] El primer artículo que compraré es manzana
Observe el uso del parámetro end en la llamada a la función de impresión para indicar que queremos terminar la salida con un
espacio en lugar del salto de línea habitual.

A continuación, agregamos un elemento a la lista utilizando el método de adición del objeto de lista, como ya se discutió antes.
Luego, verificamos que el elemento se haya agregado a la lista imprimiendo el contenido de la lista simplemente pasando la lista a
la función de impresión que la imprime de manera ordenada.

Luego, ordenamos la lista utilizando el método de ordenación de la lista. Es importante comprender que este método afecta a la
lista en sí y no devuelve una lista modificada; esto es diferente de la forma en que funcionan las cadenas. Esto es lo que
queremos decir cuando decimos que las listas son mutables y que las cadenas son inmutables.

A continuación, cuando terminemos de comprar un artículo en el mercado, queremos eliminarlo de la lista. Logramos esto
usando la declaración del. Aquí, mencionamos qué elemento de la lista queremos eliminar y la instrucción del lo elimina de la
lista por nosotros. Especificamos que queremos eliminar el primer elemento de la lista y, por lo tanto, usamos del shoplist [0]
(recuerde que Python comienza a contar desde 0).

Si desea conocer todos los métodos definidos por el objeto de lista, consulte la ayuda (lista) para obtener más detalles.

Tupla
Las tuplas se utilizan para mantener juntos varios objetos. Piense en ellos como similares a las listas, pero sin la amplia
funcionalidad que le brinda la clase de lista. Una característica importante de las tuplas es que son inmutables como cadenas, es
decir, no se pueden modificar las tuplas.

Las tuplas se definen especificando elementos separados por comas dentro de un par opcional de paréntesis.

Las tuplas se utilizan generalmente en los casos en que una declaración o una función definida por el usuario puede asumir con
seguridad que la colección de valores (es decir, la tupla de valores utilizados) no cambiará.

Ejemplo (guardar como ds_using_tuple.py ):

# Recomendaría usar siempre paréntesis #


para indicar el inicio y el final de la

6
Estructuras

# aunque los paréntesis son


opcionales. # Explícito es mejor que
implícito.zoo = ('pitón',
'elefante', 'pingüino')
impresión('El número de animales en el zoológico es', len(zoo))

new_zoo = 'mono', 'camello', zoo # no se requieren paréntesis, pero son una


buena idea impresión('El número de jaulas en el nuevo zoológico es',
len(nuevo_zoo))
impresión('Todos los animales en el nuevo zoológico
son', new_zoo) imprimir ('Los animales traídos del
antiguo zoológico son', new_zoo [2]) impresión('El
último animal traído del antiguo zoológico es', new_zoo

Producción:

Cómo funciona
$ python ds_using_tuple.py El
número de animales en el
La variable
zoológicozooes
se 3refiere a una tupla de elementos. Vemos que la función len se puede usar para obtener la longitud de la tupla.
EstoEltambién
número de jaulas en el nuevo zoológico es 3
indica que una tupla es unasecuencia también.
Todos los animales del zoológico nuevo son ('mono', 'camello', ('pitón', 'elefante',
'pingüino')) Los animales traídos del zoológico antiguo son ('pitón', 'elefante',
Ahora estamos trasladando estos animales a un nuevo zoológico ya que el antiguo zoológico está siendo cerrado. Por lo tanto, la
'pingüino')
tupla new_zoo contiene algunos animales que ya están allí junto con los animales traídos del antiguo zoológico. Volviendo a la
realidad, tenga en cuenta que una tupla dentro de una tupla no pierde su identidad.

Podemos acceder a los elementos de la tupla especificando la posición del elemento dentro de un par de corchetes, como hicimos
con las listas. A esto se le llama operador de indexación. Accedemos al tercer elemento en new_zoo especificando new_zoo [2] y
accedemos al tercer elemento dentro del tercer elemento en la tupla new_zoo especificando new_zoo [2] [2]. Esto es bastante
simple una vez que haya entendido el idioma.

Tupla con 0 o 1 elementos

Una tupla vacía se construye con un par de paréntesis vacíos como myempty = (). Sin embargo, una tupla con un solo
elemento no es tan simple. Debe especificarlo usando una coma después del primer (y único) elemento para que Python
pueda diferenciar entre una tupla y un par de paréntesis que rodean el objeto en una expresión, es decir, debe especificar
singleton = (2
,) si quiere decir que quiere una tupla que contenga el elemento 2.

Nota para programadores de Perl

Una lista dentro de una lista no pierde su identidad, es decir, las listas no se aplanan como en Perl. Lo mismo se aplica a
una tupla dentro de una tupla, o una tupla dentro de una lista, o una lista dentro de una tupla, etc. En lo que respecta a
Python, son solo objetos almacenados usando otro objeto, eso es todo.

Diccionario
Un diccionario es como una libreta de direcciones donde puede encontrar la dirección o los datos de contacto de una persona
sabiendo solo su nombre.
es decir, asociamos claves (nombre) con valores (detalles). Tenga en cuenta que la clave debe ser única, al igual que no puede
encontrar la información correcta si tiene dos personas con el mismo nombre exacto.

Tenga en cuenta que solo puede usar objetos inmutables (como cadenas) para las claves de un diccionario, pero puede usar
objetos inmutables o mutables para los valores del diccionario. Básicamente, esto se traduce en decir que debe usar solo objetos
simples para las claves.

6
Estructuras

Los pares de claves y valores se especifican en un diccionario mediante la notación d = {clave1: valor1, clave2: valor2}. Observe
que los pares clave-valor están separados por dos puntos y los pares están separados por comas y todo esto está encerrado en un
par de llaves.

Recuerde que los pares clave-valor en un diccionario no están ordenados de ninguna manera. Si desea un pedido en particular,
deberá ordenarlos usted mismo antes de usarlo.

Los diccionarios que utilizará son instancias / objetos de la clase dict.

Ejemplo (guardar como ds_using_dict.py ):

Producción:
# 'ab' es la abreviatura de 'a'ddress'b'ook

ab = {
Cómo funciona
$ python ds_using_dict.py
'Swaroop': ' swaroop@swaroopch.com
La dirección de '
', 'Larry': Swaroop es
larry@wall.org ',
Creamos'Matsumoto':
el diccionario 'abmatz@ruby-lang.org
usando la notación ya comentada. Luego accedemos a los pares clave-valor especificando la clave usando
swaroop@swaroopch.com
', 'Spammer': Hay 3 contactos en la
' como
spammer@hotmail.com
el operador de indexación se explica en el contexto de listas y tuplas. Observe la sintaxis simple.
'
}libreta de direcciones
Podemos eliminar pares clave-valor usando nuestro viejo amigo: la declaración del. Simplemente especificamos el diccionario y
el operador
Póngase de
enindexación
impresión("Lacontacto para queSwaroop
con de
dirección
se elimine
Swaroop la clave
en es", ab
y la pasamos a la instrucción del. No es necesario conocer el valor
correspondiente a la clave para
swaroop@swaroopch.com esta operación.
Póngase en contacto
con Matsumoto#en
['Swaroop']) matz@ruby-lang.org
Eliminación de un parPóngase
en contacto accedemos
A continuación, con Larry aen larry@wall.org
cada par clave-valor del diccionario utilizando el método de elementos del diccionario que
clave-valor
devuelve una lista de tuplas donde cada tupla contiene un par de elementos: la clave seguida del valor. Recuperamos este par y lo
del ab ['Spammer']
asignamos al nombre de las variables y la dirección correspondiente para cada par usando el bucle for..in y luego imprimimos
estosimpresión('\
valores en el nHay
bloque{}for.
contactos en la libreta de direcciones \

n'.formato(len(ab))) por Nombre dirección en ab.items ():


impresión("Comuníquese con {} en {}".formato(Nombre dirección))

# Agregar un par clave-valor


ab ['Guido'] = '
guido@python.org '

6
Estructuras

Podemos agregar nuevos pares clave-valor simplemente usando el operador de indexación para acceder a una clave y asignar ese
valor, como lo hemos hecho para Guido en el caso anterior.

Podemos verificar si existe un par clave-valor usando el

operador in. Para obtener la lista de métodos de la clase dict,

consulte help (dict).

Argumentos y diccionarios de palabras clave

Si ha utilizado argumentos de palabras clave en sus funciones, ¡ya ha utilizado diccionarios! Solo piénselo: usted
especifica el par clave-valor en la lista de parámetros de la definición de la función y cuando accede a las variables dentro
de su función, es solo un acceso clave de un diccionario (que se llama tabla de símbolos en el diseño del compilador
terminología).

Secuencia
Las listas, tuplas y cadenas son ejemplos de secuencias, pero ¿qué son las secuencias y qué tienen de especial?

Las características principales son las pruebas de membresía (es decir, la en y no en expresiones) y operaciones de indexación,
que nos permiten buscar un elemento en particular en la secuencia directamente.

Los tres tipos de secuencias mencionados anteriormente, listas, tuplas y cadenas, también tienen una operación de corte que nos
permite recuperar una porción de la secuencia, es decir, una parte de la secuencia.

Ejemplo (guardar como ds_seq.py ):

Producción:
shoplist = ['manzana', 'mango', 'zanahoria',
'plátano'] nombre = 'swaroop'

$
# python
Operación de indexación o
ds_seq.py El # impresión('El elemento
'suscripción'
artículo
0 0 es [0]) impresión('El
es', ladrón
manzana
artículoEl
1 es', ladrón [1])
artículo 1 es elemento 2 es', ladrón
impresión('El
mangoimpresión('El
[2]) El elemento 3 es',
artículo 2 es
ladrón [3]) impresión('El elemento -1
zanahoria
es', ladrónEl[-1]) impresión('El
artículo
elemento 3-2es
es', ladrón [-2])
plátano El
impresión('El carácter 0 es',
artículo
nombre[0])-1 es
plátano El
# Cortar en una lista #
impresión('El elemento 1 a 3 es', ladrón
[1:3]) impresión('El elemento 2 al final
es', ladrón [2:]) impresión('El elemento 1
a -1 es', ladrón [1: -1]) impresión('El
artículo de principio a fin es', ladrón
[:])

# Cortar en una cuerda #

6
Estructuras

El elemento de principio a fin es ['manzana', 'mango',


'zanahoria', 'plátano'] los caracteres 1 a 3 son wa
los caracteres 2 hasta el final
son aroop caracteres 1 a -1 es
waroo caracteres de principio a
fin es swaroop

Cómo funciona

Primero, vemos cómo usar índices para obtener elementos individuales de una secuencia. Esto también se conoce como
operación de suscripción. Siempre que especifique un número para una secuencia entre corchetes como se muestra arriba,
Python le buscará el elemento correspondiente a esa posición en la secuencia. Recuerde que Python comienza a contar números
desde 0. Por lo tanto, el ladrón [0] busca el primer elemento y el ladrón [3] busca el cuarto elemento en la secuencia del ladrón.

El índice también puede ser un número negativo, en cuyo caso, la posición se calcula a partir del final de la secuencia. Por lo tanto,
ladrón [-1] se refiere al último elemento de la secuencia y ladrón [-2] obtiene el penúltimo elemento de la secuencia.

La operación de corte se utiliza especificando el nombre de la secuencia seguido de un par opcional de números separados por
dos puntos entre corchetes. Tenga en cuenta que esto es muy similar a la operación de indexación que ha estado utilizando hasta
ahora. Recuerde que los números son opcionales, pero los dos puntos no lo son.

El primer número (antes de los dos puntos) en la operación de corte se refiere a la posición desde donde comienza el corte y el
segundo número (después de los dos puntos) indica dónde se detendrá el corte. Si no se especifica el primer número, Python
comenzará al principio de la secuencia. Si se omite el segundo número, Python se detendrá al final de la secuencia. Tenga en
cuenta que el segmento devuelto comienza en la posición inicial y terminará justo antes de la posición final, es decir, se incluye la
posición inicial pero la posición final se excluye del segmento de secuencia.

Por lo tanto, shoplist [1: 3] devuelve un segmento de la secuencia que comienza en la posición 1, incluye la posición 2 pero se
detiene en la posición 3 y, por lo tanto, se devuelve un segmento de dos elementos. De manera similar, shoplist [:] devuelve
una copia de toda la secuencia.

También puedes hacer rebanar con posiciones negativas. Los números negativos se utilizan para posiciones desde el final de la
secuencia. Por ejemplo, shoplist [: - 1] devolverá una porción de la secuencia que excluye el último elemento de la secuencia
pero contiene todo lo demás.

También puede proporcionar un tercer argumento para el sector, que es el paso para el corte (de forma predeterminada, el tamaño del
paso es 1):

Observe que cuando


>>> shoplist el paso es 2, obtenemos
= ['manzana', los elementos con
'mango', 'zanahoria', la posición 0, 2, ... Cuando el tamaño del paso es 3, obtenemos
'plátano']
>>> shoplist
los elementos [::1]
con la posición 0, 3, etc.
['manzana', 'mango', 'zanahoria', 'plátano']
>>> varias
Pruebe shoplist
combinaciones de dichas especificaciones de corte utilizando el intérprete de Python de forma interactiva, es decir,
[::2]
el indicador para que pueda ver los resultados de inmediato. ¡Lo mejor de las secuencias es que puede acceder a tuplas, listas y
['manzana',
cadenas de la misma manera!
'zanahoria']
>>> shoplist
[::3]

Colocar
['manzana',

Los conjuntos son colecciones desordenadas de objetos simples. Se utilizan cuando la existencia de un objeto en una colección es
más importante que el orden o cuántas veces ocurre.

Con conjuntos, puede probar la pertenencia, si es un subconjunto de otro conjunto, encontrar la intersección entre dos conjuntos, etc.

6
Estructuras

>>> bri = colocar(['Brasil', 'Rusia', 'India'])


>>> 'India' en
bri Cierto
>>> 'EE.UU' en
bri Falso
>>> bric = bri.copy ()
>>> bric.add'porcelana')
>>> bric.issuperset (bri)
Cierto
>>> bri.remove'Rusia')
>>> bri y bric # OR bri.intersection (bric)
{'Brasil', 'India'}

Cómo funciona

Si recuerda las matemáticas básicas de la teoría de conjuntos de la escuela, entonces este ejemplo se explica por sí mismo. Pero si
no, puede buscar en Google "teoría de conjuntos" y "diagrama de Venn" para comprender mejor nuestro uso de conjuntos en
Python.

Referencias
Cuando crea un objeto y lo asigna a una variable, la variable solo se refiere al objeto y no representa el objeto en sí. Es decir, el
nombre de la variable apunta a la parte de la memoria de su computadora donde está almacenado el objeto. A esto se le llama
vincular el nombre al objeto.

Generalmente, no debe preocuparse por esto, pero hay un efecto sutil debido a las referencias que debe conocer: Ejemplo (guardar

como ds_reference.py):

impresión('Asignación simple')
shoplist = ['manzana', 'mango', 'zanahoria', 'plátano']
# mylist es solo otro nombre que apunta al mismo objeto.
mylist = shoplist

# Compré el primer artículo, así que lo elimino de la


lista. del shoplist [0]

impresión('ladrón es',
shoplist) imprimir ('mi lista
es', mi lista)
# Observe que tanto shoplist como mylist
imprimen # la misma lista sin la 'manzana'
confirmando que # apuntan al mismo objeto

impresión('Copiar haciendo un
corte completo') # Haga una copia
haciendo un corte completo mylist
= shoplist [:]
# Eliminar el
primer elemento
del mi lista[0]

Producción:

$ python ds_reference.py
Asignación simple
el ladrón es ['mango', 'zanahoria',
'plátano'] mi lista es ['mango',
'zanahoria', 'plátano']
Copiar haciendo un corte completo
el ladrón es ['mango', 'zanahoria',
'plátano'] mi lista es ['zanahoria',

6
Estructuras

Cómo funciona

La mayor parte de la explicación está disponible en los comentarios.

Recuerde que si desea hacer una copia de una lista o ese tipo de secuencias u objetos complejos (no objetos simples como números
enteros), entonces debe usar la operación de corte para hacer una copia. Si simplemente asigna el nombre de la variable a otro
nombre, ambos "se referirán" al mismo objeto y esto podría ser un problema si no tiene cuidado.

Nota para programadores de Perl

Recuerde que una declaración de asignación para listas no crea una copia. Tienes que usar la operación de corte para hacer
una copia de la secuencia.

Más sobre cadenas


Ya hemos discutido las cadenas en detalle anteriormente. ¿Qué más puede haber por saber? Bueno, ¿sabías que las cadenas
también son objetos y tienen métodos que hacen de todo, desde verificar parte de una cadena hasta eliminar espacios? De
hecho, ya ha estado usando un método de cadena ... ¡el método de formato!

Las cadenas que usa en los programas son todos objetos de la clase str. En el siguiente ejemplo se muestran algunos métodos
útiles de esta clase. Para obtener una lista completa de dichos métodos, consulte help (str).

Ejemplo (guardar como ds_str_methods.py ):

Producción:
# Este es un objeto de
cadena nombre = 'Swaroop'

Cómo
$ funciona
Sipython ds_str_methods.py
name.startswith ('Swa'):
Sí, impresión('Sí,
la cadena comienza con
la cadena comienza con "Swa"')
Aquí, vemos
"Swa" Sí,muchos de los
contiene la métodos
cadena de cadena en acción. El método startswith se utiliza para averiguar si la cadena comienza

con "a"
Si Sí,en
'a'
la cadenacontiene
nombre:
dada. la cadena
El operador in se usa para verificar si una cadena dada es parte de la cadena.
"guerra" Brasil _ *contiene
impresión('Sí, _ Rusia la
_ *cadena "a"')
_ India _ * _ China
El método de búsqueda se utiliza para localizar la posición de la subcadena dada dentro de la cadena; find devuelve -1 si no
Si name.find ('guerra')! = -1:
consigueimpresión('Sí,
encontrar la subcadena. La clase str también tiene un método ordenado para unir los elementos de una secuencia con
contiene la cadena "guerra"')
la cadena actuando como un delimitador entre cada elemento de la secuencia y devuelve una cadena más grande generada a
delimitador
partir de esto. = '_ * _'
mylist = ['Brasil', 'Rusia', 'India', 'Porcelana']
print (delimiter.join (mylist))

Resumen

6
Estructuras

Hemos explorado en detalle las diversas estructuras de datos integradas de Python. Estas estructuras de datos serán esenciales
para escribir programas de tamaño razonable.

Ahora que tenemos muchos de los conceptos básicos de Python en su lugar, veremos a continuación cómo diseñar y escribir un
programa Python del mundo real.

6
Resolución de

# Resolución de problemas

Hemos explorado varias partes del lenguaje Python y ahora veremos cómo encajan todas estas partes, diseñando y escribiendo
un programa que haga algo útil. La idea es aprender a escribir un script de Python por su cuenta.

El problema
El problema que queremos resolver es:

Quiero un programa que cree una copia de seguridad de todos mis archivos importantes.

Aunque este es un problema simple, no hay suficiente información para que podamos comenzar con la solución. Se requiere un poco
más de análisis. Por ejemplo, ¿cómo especificamos qué archivos se respaldarán? ¿Cómo se almacenan? ¿Dónde se almacenan?

Después de analizar el problema adecuadamente, diseñamos nuestro programa. Hacemos una lista de cosas sobre cómo debería
funcionar nuestro programa. En este caso, he creado la siguiente lista sobre cómo quiero que funcione. Si haces el diseño, es
posible que no se te ocurra el mismo tipo de análisis, ya que cada persona tiene su propia forma de hacer las cosas, por lo que está
perfectamente bien.

Los archivos y directorios de los que se realizará la copia de


seguridad se especifican en una lista. La copia de seguridad
debe almacenarse en un directorio principal de copias de
seguridad.
Los archivos se respaldan en un archivo zip.
El nombre del archivo zip es la fecha y hora actuales.
Usamos el comando zip estándar disponible por defecto en cualquier distribución estándar GNU / Linux o Unix. Tenga en
cuenta que puede utilizar cualquier comando de archivo que desee siempre que tenga una interfaz de línea de comandos.

Para usuarios de Windows

Los usuarios de Windows pueden Instalar en pc el comando zip del Página del proyecto GnuWin32 y agregue C: \
Program Archivos \ GnuWin32 \ bin a la variable de entorno PATH de su sistema, similar a lo que hicimos
para reconocer el comando python en sí.

La solución
Como el diseño de nuestro programa ahora es razonablemente estable, podemos escribir el código que es una

implementación de nuestra solución. Guardar como backup_ver1.py :

importar os
importar
hora

# 1. Los archivos y directorios que se deben


respaldar se # especifican en una lista.
# Ejemplo en Windows:
# source = ['"C: \\ My
Documents"'] # Ejemplo en Mac
OS X y Linux:
fuente = ['/ Usuarios / swa / notas']
# Note que tenemos que usar comillas dobles dentro
de una cadena # para nombres con espacios en ella.
También podríamos haber usado # una cadena sin
procesar escribiendo [r'C: \ My Documents '].

# 2. La copia de seguridad debe


almacenarse en un # directorio
principal de copias de seguridad.
# Ejemplo en Windows:
# target_dir = 'E: \\ Copia de seguridad'
# Ejemplo en Mac OS X y Linux: 6
Resolución de

# 4. El nombre del archivo zip es la fecha y hora actual


target = target_dir + os.sep + \
time.strftime'% Y% m% d% H% M% S') + '.Código Postal'

# Crear directorio de destino si no está


presente si no os.path.exists (target_dir):
os.mkdir (target_dir) # hacer directorio

# 5. Usamos el comando zip para poner los archivos en un archivo zip


zip_command = 'zip -r {0} {1}'.formato(objetivo,
''.join (fuente))

# Ejecutar la copia de
seguridad impresión('El
comando Zip es:')
imprimir (zip_command)
imprimir ('Corriendo:')
Si os.system (comando_zip) == 0:
impresión('Copia de seguridad exitosa
en', objetivo)

Producción:

Ahora, estamos en
El comando la fase de prueba en la que probamos que nuestro programa funcione correctamente. Si no se comporta como se
$ python
esperaba, entonces tenemos
backup_ver1.py Zip que
es: nuestro programa, es decir, eliminar los errores (errores) del programa.
depurar
zip -r /Users/swa/backup/20140328084844.zip / Users / swa /

Si elnotes En ejecución:
programa anterior no funciona para usted, copie la línea impresa después de que el comando Zip esté en la línea de salida,
agregando: Usuarios / swa / notas / (almacenado 0%)
péguelo en el shell Users
agregando: (en GNU / Linux
/ swa y Mac/ OS
/ notes X) / cmd (en Windows), vea cuál es el error es e intenta arreglarlo. También
blah1.txt
consulte el manual del
(almacenado 0%)comando zip para
agregando: saber/ qué
Users swapodría
/ estar mal. Si este comando tiene éxito, entonces el problema podría
notes / blah2.txt (almacenado 0%)
estar en el propio programa Python, así que verifique si coincide exactamente con el programa escrito anteriormente.
agregando: Users / swa / notes / blah3.txt

Cómo funciona

Notarás cómo hemos convertido nuestro diseño en código paso a paso.

Hacemos uso de los módulos de tiempo y sistema operativo importándolos primero. Luego, especificamos los archivos y
directorios que se respaldarán en la lista de fuentes. El directorio de destino es donde almacenamos todos los archivos de respaldo
y esto se especifica en la variable target_dir. El nombre del archivo zip que vamos a crear es la fecha y hora actual que generamos
usando el
time.strftime () función. También tendrá el.Código Postal extensión y se almacenará en la target_dir directorio.

Observe el uso de la variable os.sep: esto le da el separador de directorio de acuerdo con su sistema operativo, es decir, será '/' en
GNU / Linux, Unix, macOS y será '\\' en Windows. El uso de os.sep en lugar de estos caracteres directamente hará que nuestro
programa sea portátil y funcione en todos estos sistemas.

La función time.strftime () toma una especificación como la que hemos usado en el programa anterior. La especificación% Y será
reemplazada por el año con el siglo. La especificación% m será reemplazada por el mes como un número decimal entre
01y 12 y así sucesivamente. La lista completa de dichas especificaciones se puede encontrar en el Manual de referencia
de Python.

Creamos el nombre del archivo zip de destino usando el operador de adición que concatena las cadenas, es decir, une las dos
cadenas y devuelve una nueva. Luego, creamos una cadena zip_command que contiene el comando que vamos a ejecutar. Puede
comprobar si este comando funciona ejecutándolo en el shell (terminal GNU / Linux o indicador de DOS).

7
Resolución de

El comando zip que estamos usando tiene algunas opciones disponibles, y una de estas opciones es -r. La opción -r especifica
que el comando zip debería funcionar de forma recursiva para los directorios, es decir, debería incluir todos los subdirectorios y
archivos. Las opciones van seguidas del nombre del archivo zip que se va a crear, seguido de la lista de archivos y directorios
para realizar la copia de seguridad. Convertimos la lista de fuentes en una cadena usando el método de unión de cadenas que ya
hemos visto cómo usar.

Luego, finalmente ejecutamos el comando usando la función os.system que ejecuta el comando como si se ejecutara desde el
sistema, es decir, en el shell; devuelve 0 si el comando fue exitoso, de lo contrario, devuelve un número de error.

Dependiendo del resultado del comando, imprimimos el mensaje apropiado de que la copia de seguridad ha fallado o

se ha realizado correctamente. Eso es todo, ¡hemos creado un script para realizar una copia de seguridad de nuestros

archivos importantes!

Nota para los usuarios de Windows

En lugar de secuencias de escape con doble barra invertida, también puede utilizar cadenas sin formato. Por ejemplo, use 'C: \\
Documentos' o
r'C: \ Documentos ' . Sin embargo, no utilice'C: \ Documentos' ya que terminas usando una secuencia de escape
desconocida \D .

Ahora que tenemos un script de copia de seguridad que funciona, podemos usarlo siempre que queramos realizar una copia de
seguridad de los archivos. Esto se llama
operación fase o la fase de implementación del software.

El programa anterior funciona correctamente, pero (normalmente) los primeros programas no funcionan exactamente como
esperaba. Por ejemplo, puede haber problemas si no ha diseñado el programa correctamente o si ha cometido un error al escribir el
código, etc. Apropiadamente, tendrá que volver a la fase de diseño o tendrá que depurar su programa.

Segunda versión
La primera versión de nuestro script funciona. Sin embargo, podemos hacerle algunos ajustes para que funcione mejor a diario.
A esto se le llama la fase de mantenimiento del software.

Una de las mejoras que sentí que fue útil es un mejor mecanismo de nomenclatura de archivos: usar la hora como el nombre del
archivo dentro de un directorio con la fecha actual como un directorio dentro del directorio principal de respaldo. La primera
ventaja es que tus copias de seguridad se almacenan de forma jerárquica y por tanto es mucho más fácil de gestionar. La segunda
ventaja es que los nombres de archivo son mucho más cortos. La tercera ventaja es que los directorios separados lo ayudarán a
verificar si ha realizado una copia de seguridad para cada día, ya que el directorio se creará solo si ha realizado una copia de
seguridad para ese día.

Guardar como backup_ver2.py :

importar os
importar
hora

# 1. Los archivos y directorios que se deben


respaldar se # especifican en una lista.
# Ejemplo en Windows:
# source = ['"C: \\ My Documents"', 'C: \\
Code'] # Ejemplo en Mac OS X y Linux:
fuente = ['/ Usuarios / swa / notas']
# Observe que tuvimos que usar comillas dobles
dentro de la cadena # para los nombres con
espacios.

# 2. La copia de seguridad debe


almacenarse en un # directorio
principal de copias de seguridad.
# Ejemplo en Windows:
# target_dir = 'E: \\ Copia de seguridad'
# Ejemplo en Mac OS X y Linux: 7
target_dir = '/ Usuarios / swa / backup'
# Recuerde cambiar esto a qué carpeta usará
Resolución de

# 3. Se realiza una copia de seguridad de los archivos en un archivo zip.


# 4. El día actual es el nombre del subdirectorio
# en el directorio principal.
hoy = target_dir + os.sep + time.strftime ('% Y% m
% d') # La hora actual es el nombre del archivo
zip. ahora = tiempo.strftime ('% H% M% S')

# El nombre del archivo zip


target = today + os.sep + now + '.Código Postal'

# Cree el subdirectorio si aún no está allí si


no os.path.exists (hoy):
os.mkdir (hoy)
impresión('Directorio creado con éxito', hoy)

# 5. Usamos el comando zip para poner los archivos en un archivo zip


zip_command = 'zip -r {0} {1}'.formato(objetivo,
''.join (fuente))

# Ejecutar la copia de
seguridad impresión('El
comando Zip es:')
imprimir (zip_command)
imprimir ('Corriendo:')
Si os.system (comando_zip) == 0:
impresión('Copia de seguridad exitosa
en', objetivo)

Producción:

Cómo funciona
$ python backup_ver2.py
El directorio / Usuarios / swa / backup / 20140329
La mayor
creadoparte
con del programa
éxito sigue siendo
El comando Zip es:el mismo. Los cambios son que comprobamos si hay un directorio con el día actual
zip -r /Users/swa/backup/20140329/073201.zip / Users / swa /
como su nombre dentro del directorio principal de respaldo usando la función os.path.exists. Si no existe, lo creamos usando
notes En ejecución:
la función os.mkdir.
agregando: Usuarios/ swa / notas / (almacenado 0%)
agregando: Users / swa / notes / blah1.txt
(almacenado 0%) agregando: Users / swa /

Tercera
notes /
versión
blah2.txt (almacenado 0%)
agregando: Users / swa / notes / blah3.txt
(almacenado 0%)
La segunda versión funciona bien cuando hago muchas copias de seguridad, pero cuando hay muchas copias de seguridad, ¡me
resulta difícil diferenciar para qué sirven las copias de seguridad! Por ejemplo, podría haber realizado algunos cambios
importantes en un programa o presentación, luego quiero asociar cuáles son esos cambios con el nombre del archivo zip. Esto se
puede lograr fácilmente adjuntando un comentario proporcionado por el usuario al nombre del archivo zip.

ADVERTENCIA: El siguiente programa no funciona, así que no se alarme, sígalo porque hay una lección aquí.

Guardar como backup_ver3.py :

importar os
importar
hora

7
Resolución de

# especificado en
una lista. # Ejemplo
en Windows:
# source = ['"C: \\ My Documents"', 'C: \\
Code'] # Ejemplo en Mac OS X y Linux:
fuente = ['/ Usuarios / swa / notas']
# Observe que tuvimos que usar comillas dobles
dentro de la cadena # para los nombres con
espacios.

# 2. La copia de seguridad debe


almacenarse en un # directorio
principal de copias de seguridad.
# Ejemplo en Windows:
# target_dir = 'E: \\ Copia de seguridad'
# Ejemplo en Mac OS X y Linux:
target_dir = '/ Usuarios / swa / backup'
# Recuerde cambiar esto a qué carpeta usará

# Crear directorio de destino si no está


presente si no os.path.exists (target_dir):
os.mkdir (target_dir) # hacer directorio

# 3. Se realiza una copia de seguridad de los archivos en un archivo zip.


# 4. El día actual es el nombre del subdirectorio
# en el directorio principal.
hoy = target_dir + os.sep + time.strftime ('% Y% m
% d') # La hora actual es el nombre del archivo
zip. ahora = tiempo.strftime ('% H% M% S')

# Tome un comentario del


usuario para # crear el nombre
del archivo zip
comentario = aporte('Ingrese un
comentario ->') # Verifique si se
ingresó un comentario
Si len(comentario) == 0:
target = today + os.sep + now +
'.Código Postal' demás:
target = today + os.sep + now + '_' +
comentario.replace ('', '_') + '.Código
Postal'

# Cree el subdirectorio si aún no está allí si


no os.path.exists (hoy):
os.mkdir (hoy)
impresión('Directorio creado con éxito', hoy)

# 5. Usamos el comando zip para poner los archivos en un archivo zip


zip_command = "zip -r {0} {1}".formato(objetivo,
''.join (fuente))

# Ejecutar la copia de
seguridad impresión('El
comando Zip es:')

Producción:

Cómo esto (no)


$ python funciona
backup_ver3.py
Archivo "backup_ver3.py", línea 39
target = today + os.sep + now + '_' +
^
Error de sintaxis: sintaxis invalida

7
Resolución de

¡Este programa no funciona! Python dice que hay un error de sintaxis que significa que el script no satisface la estructura que
Python espera ver. Cuando observamos el error dado por Python, también nos dice el lugar donde detectó el error. Entonces
comenzamos a depurar nuestro programa desde esa línea.

En una observación cuidadosa, vemos que la única línea lógica se ha dividido en dos líneas físicas, pero no hemos especificado
que estas dos líneas físicas pertenecen juntas. Básicamente, Python ha encontrado el operador de suma (+) sin ningún operando en
esa línea lógica y, por lo tanto, no sabe cómo continuar. Recuerde que podemos especificar que la línea lógica continúa en la
siguiente línea física mediante el uso de una barra invertida al final de la línea física. Entonces, hacemos esta corrección a nuestro
programa. Esta corrección del programa cuando encontramos errores se llama corrección de errores.

Cuarta versión
Guardar como backup_ver4.py :

importar os
importar
hora

# 1. Los archivos y directorios que se deben


respaldar se # especifican en una lista.
# Ejemplo en Windows:
# source = ['"C: \\ My Documents"', 'C: \\
Code'] # Ejemplo en Mac OS X y Linux:
fuente = ['/ Usuarios / swa / notas']
# Observe que tuvimos que usar comillas dobles
dentro de la cadena # para los nombres con
espacios.

# 2. La copia de seguridad debe


almacenarse en un # directorio
principal de copias de seguridad.
# Ejemplo en Windows:
# target_dir = 'E: \\ Copia de seguridad'
# Ejemplo en Mac OS X y Linux:
target_dir = '/ Usuarios / swa / backup'
# Recuerde cambiar esto a qué carpeta usará

# Crear directorio de destino si no está


presente si no os.path.exists (target_dir):
os.mkdir (target_dir) # hacer directorio

# 3. Se realiza una copia de seguridad de los archivos en un archivo zip.


# 4. El día actual es el nombre del subdirectorio
# en el directorio principal.
hoy = target_dir + os.sep + time.strftime ('% Y% m
% d') # La hora actual es el nombre del archivo
zip. ahora = tiempo.strftime ('% H% M% S')

# Tome un comentario del


usuario para # crear el nombre
del archivo zip
comentario = aporte('Ingrese un
comentario ->') # Verifique si se
ingresó un comentario
Si len(comentario) == 0:
target = today + os.sep + now +
'.Código Postal' demás:
target = today + os.sep + now + '_' + \
comment.replace ('', '_') + '.Código Postal'

# Cree el subdirectorio si aún no está allí si


no os.path.exists (hoy):
os.mkdir (hoy)
impresión('Directorio creado con éxito', hoy)

7
Resolución de

# Ejecutar la copia de
seguridad impresión('El
comando Zip es:')
imprimir (zip_command)
imprimir ('Corriendo:')
Si os.system (comando_zip) == 0:
impresión('Copia de seguridad exitosa
en', objetivo)

Producción:

Cómo funciona
$ python backup_ver4.py
Ingrese un comentario -> nuevos
¡Este programaagregados
ejemplos ahora funciona! Repasemos
El comando Zip las mejoras reales que hicimos en la versión 3. Tomamos los comentarios del
es:
usuario usando la función de entrada y luego verificamos si el usuario realmente ingresó algo averiguando la longitud de la
zip -r /Users/swa/backup/20140329/074122_added_new_examples.zip / Users / swa /
entrada usando
notes la función len. Si el usuario acaba de presionar enter sin ingresar nada (tal vez fue solo una copia de seguridad
En ejecución:
de rutina o no se hicieron
agregando: Usuarioscambios
/ swa especiales),
/ notas / entonces procedemos
(almacenado 0%) como lo hemos hecho antes.
agregando: Users / swa / notes / blah1.txt
Sin embargo, si se proporcionó
(almacenado un comentario,
0%) agregando: Users / este
swase/adjunta al nombre del archivo zip justo antes de la extensión .zip. Tenga en
notes / blah2.txt (almacenado 0%)
cuenta que estamos reemplazando espacios en el comentario con guiones bajos; esto se debe a que administrar nombres de
agregando: Users / swa / notes / blah3.txt
archivos sin espacios es mucho más fácil.

Más refinamientos
La cuarta versión es un script que funciona satisfactoriamente para la mayoría de los usuarios, pero siempre hay margen de
mejora. Por ejemplo, puede incluir un nivel de verbosidad para el comando zip especificando una opción -v para que su
programa se vuelva más hablador o
-q opción para hacerlo silencioso.

Otra posible mejora sería permitir que se pasen archivos y directorios adicionales al script en la línea de comandos. Podemos
obtener estos nombres de la lista sys.argv y podemos agregarlos a nuestra lista de fuentes utilizando el método de extensión
proporcionado por el
lista clase.

El perfeccionamiento más importante sería no utilizar la forma os.system de crear archivos y, en su lugar, utilizar la archivo zip o
tarfile módulos incorporados para crear estos archivos. Son parte de la biblioteca estándar y ya están disponibles para su uso sin
dependencias externas del programa zip que estará disponible en su computadora.

Sin embargo, he estado usando la forma os.system de crear una copia de seguridad en los ejemplos anteriores puramente con
fines pedagógicos, de modo que el ejemplo es lo suficientemente simple como para que todos lo entiendan, pero lo
suficientemente real como para ser útil.

¿Puedes intentar escribir la quinta versión que usa el archivo zip módulo en lugar de la llamada os.system?

El proceso de desarrollo de software


Ahora hemos pasado por las distintas fases del proceso de escritura de un software. Estas fases se pueden resumir de la siguiente
manera:

1. Qué (análisis)
2. Cómo (Diseño)

7
Resolución de

3. Hazlo (implementación)
4. Prueba (prueba y depuración)
5. Uso (operación o implementación)
6. Mantener (refinamiento)

Una forma recomendada de escribir programas es el procedimiento que hemos seguido al crear el script de respaldo: hacer el
análisis y el diseño. Comience a implementar con una versión simple. Pruébelo y depúrelo. Úselo para asegurarse de que
funcione como se espera. Ahora, agregue las funciones que desee y continúe repitiendo el ciclo Do It-Test-Use tantas veces
como sea necesario.

Recuerda:

El software se cultiva, no se construye. -Bill de hÓra

Resumen
Hemos visto cómo crear nuestros propios programas / scripts de Python y las diversas etapas involucradas en la escritura de dichos
programas. Puede resultarle útil crear su propio programa como lo hicimos en este capítulo para que se sienta cómodo con Python y
con la resolución de problemas.

A continuación, analizaremos la programación orientada a objetos.

7
Programación orientada a

Programación orientada a objetos


En todos los programas que escribimos hasta ahora, hemos diseñado nuestro programa en torno a funciones, es decir, bloques de
declaraciones que manipulan datos. A esto se le llama la forma de programación orientada a procedimientos. Hay otra forma de
organizar su programa que es combinar datos y funcionalidad y envolverlos dentro de algo llamado objeto. Esto se denomina
paradigma de programación orientada a objetos. La mayoría de las veces puede utilizar la programación procedimental, pero
cuando escribe programas grandes o tiene un problema que se adapta mejor a este método, puede utilizar técnicas de
programación orientada a objetos.

Las clases y los objetos son los dos aspectos principales de la programación orientada a objetos. Una clase crea un nuevo tipo
donde los objetos son instancias de la clase. Una analogía es que puede tener variables de tipo int, lo que se traduce en decir
que las variables que almacenan enteros son variables que son instancias (objetos) de la clase int.

Nota para programadores de lenguaje estático

Tenga en cuenta que incluso los enteros se tratan como objetos (de la clase int). Esto es diferente a C ++ y Java (antes de la
versión 1.5) donde los enteros son tipos nativos primitivos.

Ver ayuda (int) para más detalles sobre la clase.

Los programadores de C # y Java 1.5 encontrarán esto similar al concepto de boxeo y unboxing.

Los objetos pueden almacenar datos utilizando variables ordinarias que pertenecen al objeto. Las variables que pertenecen a un
objeto o clase se denominan campos. Los objetos también pueden tener funcionalidad mediante el uso de funciones que
pertenecen a una clase. Estas funciones se denominan métodos de la clase. Esta terminología es importante porque nos ayuda a
diferenciar entre funciones y variables independientes de las que pertenecen a una clase u objeto. En conjunto, los campos y
métodos pueden denominarse atributos de esa clase.

Los campos son de dos tipos: pueden pertenecer a cada instancia / objeto de la clase o pueden pertenecer a la propia clase. Se les
llama
variables de instancia y variables de clase respectivamente.

Una clase se crea usando la palabra clave class. Los campos y métodos de la clase se enumeran en un bloque con sangría.

La uno mismo

Los métodos de clase tienen solo una diferencia específica de las funciones ordinarias: deben tener un nombre adicional que debe
agregarse al principio de la lista de parámetros, pero no le da un valor para este parámetro cuando llama al método, Python lo
proporcionará eso. Esta variable en particular se refiere al objeto en sí y, por convención, se le da el nombre self.

Aunque puede dar cualquier nombre a este parámetro, se recomienda encarecidamente que utilice el nombre self; cualquier otro
nombre está definitivamente mal visto. El uso de un nombre estándar tiene muchas ventajas: cualquier lector de su programa lo
reconocerá de inmediato e incluso los IDE (entornos de desarrollo integrados) especializados pueden ayudarlo si usa self.

Nota para programadores de C ++ / Java / C #

El self en Python es equivalente al puntero this en C ++ y la referencia this en Java y C #.

Debes preguntarte cómo Python da el valor a uno mismo y por qué no es necesario que le des un valor. Un ejemplo lo aclarará.
Digamos que tienes una clase llamadaMi clase y una instancia de esta clase llamada myobject . Cuando llamas a un método de
este objeto comomyobject.method (arg1, arg2) , Python lo convierte automáticamente en MyClass.method (myobject, arg1,

arg2) - esto es todo lo especial uno mismo es sobre.

Esto también significa que si tiene un método que no toma argumentos, entonces todavía tiene que tener un argumento: el yo.

Clases
7
Programación orientada a

La clase más simple posible se muestra en el siguiente ejemplo (guardar como oop_simplestclass.py ).

Producción:
clase Persona:
aprobar # Un bloque vacío

$ python oop_simplestclass.py
p = Persona ()
<instancia principal de .Person en 0x10171f518>
imprimir (p)

Cómo funciona

Creamos una nueva clase usando la declaración de clase y el nombre de la clase. A esto le sigue un bloque de declaraciones con
sangría que forman el cuerpo de la clase. En este caso, tenemos un bloque vacío que se indica mediante la instrucción pass.

A continuación, creamos un objeto / instancia de esta clase usando el nombre de la clase seguido de un par de paréntesis.
(Nosotros aprenderemosmás sobre la creación de instancias en la siguiente sección). Para nuestra verificación, confirmamos el
tipo de variable simplemente imprimiéndola. Nos dice que tenemos una instancia de la clase Person en el módulo principal.

Observe que también se imprime la dirección de la memoria de la computadora donde está almacenado su objeto. La dirección
tendrá un valor diferente en su computadora, ya que Python puede almacenar el objeto dondequiera que encuentre espacio.

Métodos
Ya hemos comentado que las clases / objetos pueden tener métodos como funciones, excepto que tenemos una variable propia
adicional. Ahora veremos un ejemplo (guardar como oop_method.py).

Producción:
clase Persona:
def Di hola(uno mismo):
impresión('¿Hola como estas?')
Cómo funciona
$ python oop_method.py
Hola, ¿cómo estás?
p = Persona ()
Aquí vemos al yo en acción. Observe que el método say_hi no toma parámetros pero aún tiene el self en la definición de la
p.say_hi ()
función.
# Las 2 líneas anteriores también se pueden
escribir como # Person (). Say_hi ()

La en eso método
Hay muchos nombres de métodos que tienen un significado especial en las clases de Python. Veremos el significado de la en eso

método ahora.

7
Programación orientada a

El método
en esose ejecuta tan pronto como se crea una instancia de un objeto de una clase (es decir, se crea). El método es útil para hacer
alguna
inicialización (es decir, pasar valores iniciales a su objeto) que desea hacer con su objeto. Observe los subrayados dobles tanto al
principio como al final del nombre.

Ejemplo (guardar como oop_init.py ):

Producción:
clase Persona:
def en eso (yo,
nombre): self.name
Cómo funciona
$ python= oop_init.py
nombre
Hola, mi nombre es
Aquí, definimos
Swaroop el métodomismo):
def Di hola(uno init tomando un nombre de parámetro (junto con el self habitual). Aquí, simplemente creamos un nuevo
impresión('Hola,
campo también llamado nombre.miTenga
nombre es', self.name)
en cuenta que estas son dos variables diferentes, aunque ambas se llaman 'nombre'. No hay
problema porque la notación con puntos self.name significa que hay algo llamado "nombre" que es parte del objeto llamado "self" y
p = Persona ('Swaroop')
el otro nombre()es una variable local. Dado que indicamos explícitamente a qué nombre nos referimos, no hay confusión.
p.say_hi
# Las 2 líneas anteriores también se pueden
Al crear una nueva
escribir como instancia
# Personp,('Swaroop').
de la clase Person,
Say_hilo hacemos usando el nombre de la clase, seguido de los argumentos entre
paréntesis: p = Person ('Swaroop').

No llamamos explícitamente al método init. Este es el significado especial de este método.

Ahora, podemos usar el campo self.name en nuestros métodos, lo que se demuestra en el método say_hi.

Variables de clase y objeto


Ya hemos discutido la parte de funcionalidad de clases y objetos (es decir, métodos), ahora aprendamos sobre la parte de datos.
La parte de datos, es decir, los campos, no son más que variables ordinarias que están vinculadas a los espacios de nombres de
las clases y objetos. Esto significa que estos nombres son válidos dentro del contexto de estas clases y objetos únicamente. Por
eso se llaman espacios de nombres.

Hay dos tipos de campos: variables de clase y variables de objeto, que se clasifican según si la clase o el objeto poseen las
variables respectivamente.

Variables de clase son compartidos: todas las instancias de esa clase pueden acceder a ellos. Solo hay una copia de la variable
de clase y cuando cualquier objeto realiza un cambio en una variable de clase, todas las demás instancias verán ese cambio.

Variables de objeto son propiedad de cada objeto / instancia individual de la clase. En este caso, cada objeto tiene su propia copia
del campo
es decir, no se comparten y no están relacionados de ninguna manera con el campo del mismo nombre en una instancia diferente.
Un ejemplo hará que esto sea fácil de entender (guardar como oop_objvar.py):

clase Robot:
"" "Representa un robot, con un nombre." ""

# Una variable de clase, contando el número de


robots población = 0

7
Programación orientada a

def en eso (yo, nombre): ""


"Inicializa los datos." ""
self.name = nombre
impresión("(Inicializando {})".formato(auto.nombre))

# Cuando se crea esta persona, el


robot # se suma a la población
Robot.población + = 1

def morir(uno mismo):


"""Yo me estoy muriendo."""
impresión("¡{} está siendo destruido!".formato(auto.nombre))

Robot.población - = 1

Si Robot.población == 0:
impresión("{} fue el
último"..formato(auto.nombre)) demás:
impresión("Todavía hay {: d} robots
funcionando"..formato(Robot.población))

def Di hola(uno mismo): ""


"Saludo del robot.

Sí, pueden hacer eso. "" "


impresión("Saludos, mis maestros me llaman {}"..formato(auto.nombre))

@classmethod
def Cuantos(cls):
"" "Imprime la población actual." ""
impresión("Tenemos {: d} robots"..formato(población clasificada))

droid1 = Robot ("R2-


D2") droid1.say_hi
() Robot.how_many ()

droid2 = Robot ("C-


3PO") droid2.say_hi
() Robot.how_many ()

impresión("\ nLos robots pueden trabajar aquí. \ n")

impresión("Los robots han terminado su trabajo. Así que vamos a


destruirlos".) droid1.die ()
droid2.die ()

Robot.how_many ()

Producción:

$ python oop_objvar.py
(Inicializando R2-D2)
Saludos, mis maestros me llaman
R2-D2. Tenemos 1 robots.
(Inicializando C-3PO)
Saludos, mis maestros me llaman C-
3PO. Tenemos 2 robots.

Los robots pueden hacer algo de trabajo aquí.

Los robots han terminado su trabajo. Así que vamos a


destruirlos. ¡R2-D2 está siendo destruido!
Todavía hay 1 robots
funcionando. ¡C-3PO está
siendo destruido!
C-3PO fue el último.

8
Programación orientada a

Tenemos 0 robots.

Cómo funciona

Este es un ejemplo extenso, pero ayuda a demostrar la naturaleza de las variables de clase y objeto. Aquí, pertenece a la
població
Robot

class y, por tanto, es una variable de clase. La variable de nombre pertenece al objeto (se asigna mediante self) y, por tanto, es
una variable de objeto.

Por lo tanto, nos referimos a la variable de clase de población como Robot.población y no como auto.población. Nos referimos
al nombre de la variable del objeto usando la notación self.name en los métodos de ese objeto. Recuerde esta simple diferencia
entre las variables de clase y de objeto. También tenga en cuenta que una variable de objeto con el mismo nombre que una
variable de clase ocultará la variable de clase.

En vez de Robot.población , también podríamos haber usado uno mismo. clase .población porque cada objeto se refiere a su clase
a través de la uno mismo. clase atributo.

How_many es en realidad un método que pertenece a la clase y no al objeto. Esto significa que podemos definirlo como un
método de clase o un método estático dependiendo de si necesitamos saber de qué clase formamos parte. Como nos referimos a una
variable de clase, usemosmétodo de clase .

Hemos marcado el método how_many como un método de clase usando un decorador.

Se puede imaginar que los decoradores son un atajo para llamar a una función contenedora (es decir, una función que "envuelve"
otra función para que pueda hacer algo antes o después de la función interna), por lo que aplicar el decorador @classmethod es lo
mismo que llamar:
how_many = método de clase(Cuantos)
Observe que el método init se usa para inicializar la instancia de Robot con un nombre. En este método, aumentamos la
poblacióncuente de uno en uno ya que tenemos un robot más que se está agregando. También observe que los valores
de self.name son específicos de cada objeto, lo que indica la naturaleza de las variables del objeto.

Recuerde que debe hacer referencia a las variables y métodos del mismo objeto utilizando el uno mismo solo. A esto se le llama
referencia de atributo.

En este programa, también vemos el uso de cadenas de documentación para clases y métodos. Podemos acceder a la cadena de
documentos de la clase en tiempo de ejecución usando Robot. Doc y el método docstring como Robot.say_hi. Doc

En el morir método, simplemente disminuimos el Robot.población contar de 1 en 1.

Todos los miembros de la clase son públicos. Una excepción: si utiliza miembros de datos con nombres que utilizan el prefijo de
subrayado doble, como
privatevar , Python usa la alteración de nombres para convertirla efectivamente en una variable privada.

Por lo tanto, la convención seguida es que cualquier variable que se use solo dentro de la clase u objeto debe comenzar con un
guión bajo y todos los demás nombres son públicos y pueden ser usados por otras clases / objetos. Recuerde que esto es solo una
convención y no es impuesta por Python (excepto por el prefijo de subrayado doble).

Nota para programadores de C ++ / Java / C #

Todos los miembros de la clase (incluidos los miembros de datos) son públicos y todos los métodos son virtuales en Python.

Herencia
Uno de los principales beneficios de la programación orientada a objetos es la reutilización del código y una de las formas en que esto
se logra es mediante la
herencia mecanismo. La herencia se puede imaginar mejor implementando una relación de tipo y subtipo entre clases.

Suponga que desea escribir un programa que debe realizar un seguimiento de los profesores y estudiantes de una universidad.
Tienen algunas características comunes como nombre, edad y dirección. También tienen características específicas como salario,
cursos y licencias para profesores y, notas y honorarios para estudiantes.

8
Programación orientada a

Puede crear dos clases independientes para cada tipo y procesarlas, pero agregar una nueva característica común significaría
agregar a ambas clases independientes. Esto rápidamente se vuelve difícil de manejar.

Una mejor manera sería crear una clase común llamada SchoolMember y luego hacer que las clases de profesor y alumno
hereden de esta clase, es decir, se convertirán en subtipos de este tipo (clase) y luego podemos agregar características específicas
a estos subtipos. .

Hay muchas ventajas en este enfoque. Si agregamos / cambiamos alguna funcionalidad en SchoolMember, esto también se refleja
automáticamente en los subtipos. Por ejemplo, puede agregar un nuevo campo de tarjeta de identificación para profesores y
estudiantes simplemente agregándolo a la clase SchoolMember. Sin embargo, los cambios en los subtipos no afectan a otros
subtipos. Otra ventaja es que puede referirse a un objeto de profesor o alumno como un objeto SchoolMember que podría ser útil
en algunas situaciones, como contar el número de miembros de la escuela. Esto se denomina polimorfismo cuando un subtipo
puede sustituirse en cualquier situación en la que se espera un tipo principal, es decir, el objeto puede tratarse como una instancia
de la clase principal.

Observe también que reutilizamos el código de la clase padre y no necesitamos repetirlo en las diferentes clases como habríamos
tenido que hacerlo en caso de que hubiéramos utilizado clases independientes.

La SchoolMember clase en esta situación se conoce como la clase base o la superclase. La Profesor y Estudiante las clases se
denominan clases derivadas o subclases.

Ahora veremos este ejemplo como un programa (guardar como oop_subclass.py ):

clase SchoolMember:
'' 'Representa a cualquier
miembro de la escuela' ''. def
en eso (yo, nombre, edad):
self.name = nombre
self.age = edad
impresión('(SchoolMember inicializado: {})'.formato(auto.nombre))

def contar(uno mismo):


'' 'Cuéntame mis detalles' ''.
impresión('Nombre Edad:"{}"'.formato(self.name, self.age), end ="")

clase Profesor(SchoolMember):
'' 'Representa a un
maestro' ''.
def en eso (yo, nombre, edad,
salario): Miembro de la escuela.
init (yo, nombre, edad) self.salary
= salario
impresión('(Profesor inicializado: {})'.formato(auto.nombre))

def contar(uno mismo):


SchoolMember.tell (yo)
impresión('Salario: "{: d}"'.formato(auto.salario))

clase
Estudiante(SchoolMember):
'' 'Representa a un
estudiante' ''.
def en eso (yo, nombre, edad,
marcas): Miembro de la escuela.
init (yo, nombre, edad) self.marks
= marcas
impresión('(Estudiante inicializado: {})'.formato(auto.nombre))

def contar(uno mismo):


SchoolMember.tell (yo)
impresión('Marcas: "{: d}"'.formato(auto.marcas))

t = Maestro ('Señora. Shrividya ', 40, 30000)


s = Estudiante ('Swaroop', 25, 75)

8
Programación orientada a

member.tell ()

Producción:

Cómo funciona
$ python oop_subclass.py
(Miembro de la escuela inicializado: Sra.
ParaShrividya)
usar la herencia, especificamos
(Maestra los nombres
inicializada: Sra. de las clases base en una tupla después del nombre de la clase en la definición de la

claseShrividya) (Miembro de la escuela


(por ejemplo, la clase Teacher (SchoolMember)). A continuación, observamos que el método init de la clase base se llama
inicializado: Swaroop) (Estudiante
explícitamente usando
inicializado: el método self
Swaroop)
variable para que podamos inicializar la parte de la clase base de una instancia en la subclase. Esto es muy importante de
Nombre: "Sra. Shrividya" Edad: "40" Salario: "30000"
recordar: dado que estamos definiendo un método init en las subclases Teacher y Student, Python no llama automáticamente al
Nombre: "Swaroop" Edad: "25" Puntos: "75"
constructor de la clase base SchoolMember, debe llamarlo explícitamente usted mismo.

Por el contrario, si no hemos definido un método init en una subclase, Python llamará automáticamente al constructor de la
clase base.

Si bien podríamos tratar instancias de Teacher o Student como lo haríamos con una instancia de SchoolMember y acceder al
método tell de SchoolMember simplemente escribiendo Teacher.tell o Student.tell, en su lugar definimos otro método tell en cada
subclase (usando el método tell de SchoolMember para una parte) para adaptarlo a esa subclase. Debido a que hemos hecho esto,
cuando escribimos Teacher.tell Python usa el método tell para esa subclase frente a la superclase. Sin embargo, si no tuviéramos
un método tell en la subclase, Python usaría el método tell en la superclase. Python siempre comienza a buscar métodos en el tipo
de subclase real primero, y si no encuentra nada, comienza a buscar los métodos en las clases base de la subclase, uno por uno en
el orden en que se especifican en la tupla (aquí solo tenemos 1 clase base,

Una nota sobre la terminología: si se enumera más de una clase en la tupla de herencia, se denomina herencia múltiple.

El parámetro end se usa en la función de impresión en el método tell () de la superclase para imprimir una línea y permitir que
la siguiente impresión continúe en la misma línea. Este es un truco para hacer que la impresión no imprima un símbolo \ n
(nueva línea) al final de la impresión.

Resumen
Ahora hemos explorado los diversos aspectos de las clases y los objetos, así como las diversas terminologías asociadas con ellos.
También hemos visto los beneficios y las dificultades de la programación orientada a objetos. Python está altamente orientado a
objetos y comprender estos conceptos cuidadosamente lo ayudará mucho a largo plazo.

A continuación, aprenderemos cómo manejar la entrada / salida y cómo acceder a archivos en Python.

8
Entrada y

Entrada y salida
Habrá situaciones en las que su programa tenga que interactuar con el usuario. Por ejemplo, querrá tomar información del
usuario y luego imprimir algunos resultados. Podemos lograr esto usando la función input () y la función print respectivamente.

Para la salida, también podemos usar los diversos métodos de la clase str (string). Por ejemplo, puede usar el método rjust para
obtener una cadena que esté justificada a la derecha a un ancho especificado. Consulte la ayuda (str) para obtener más detalles.

Otro tipo común de entrada / salida es el manejo de archivos. La capacidad de crear, leer y escribir archivos es esencial para
muchos programas y exploraremos este aspecto en este capítulo.

Entrada del usuario


Guarde este programa como io_input.py :

Producción:
def
contrarrestar(tex
to): regreso
Cómo funciona
$ python3 io_input.py
texto[::-1]
Ingrese texto: señor
Usamos la función
No, no de corte para invertir el texto. Ya hemos visto como podemos hacercortes de secuencias usando el código seq
es un palíndromo
def
[a: b] is_palindrome(texto):
comenzando desde la posición a hasta la posición b. También podemos proporcionar un tercer argumento que determina el
$ python3 io_input.py
regreso texto == reverso (texto)
pasoIngrese
por el cual se realiza
texto: señorael corte. El paso predeterminado es 1, por lo que devuelve una parte continua del texto. Dar un paso
negativo,
Si, esesun
decir, -1 devolverá el texto al revés.
palíndromo
algo = aporte("Ingrese texto:
La función
$ input () toma una
")python3
Si is_palindrome cadena como argumento y se la muestra al usuario. Luego espera a que el usuario escriba algo y
(algo):
io_input.py
presioneimpresión("Sí, es un
la tecla de retorno. Una vez que el usuario ha ingresado y presionado la tecla de retorno, la función input () devolverá el
Introduzca texto:
palíndromo") demás:
textocoche
que eldeusuario ingresó.
carreras

Tomamos ese texto y lo invertimos. Si el texto original y el texto invertido son iguales, entonces el texto es unpalíndromo.

8
Entrada y

Ejercicio de tarea
Verificar si un texto es un palíndromo también debe ignorar la puntuación, los espacios y las mayúsculas y minúsculas. Por
ejemplo, "Levántese a votar, señor". también es un palíndromo, pero nuestro programa actual no dice que lo sea. ¿Puedes mejorar
el programa anterior para reconocer este palíndromo?
1
Si necesitas una pista, la idea es que ...

Archivos
Puede abrir y usar archivos para leer o escribir creando un objeto de la clase de archivo y usando su read, readline o
escribirmétodos apropiados para leer o escribir en el archivo. La capacidad de leer o escribir en el archivo
depende del modo que haya especificado para la apertura del archivo. Luego, finalmente, cuando haya terminado
con el archivo, llame al método close para decirle a Python que hemos terminado de usar el archivo.

Ejemplo (guardar como io_using_file.py ):

Producción:
poema = '' '\
Programar es
divertido cuando el
Cómo
$ funciona
python3
trabajo io_using_file.py
está hecho
La
si programación estrabajo también
quieres que tu
Tenga ensea
cuenta
divertida que podemos
divertido: crear un nuevo objeto de archivo simplemente usando el método open. Abrimos (o lo creamos si
¡usa Python!
aún Cuando
'' el trabajo esta hecho
no 'existe) este archivo usando la función de apertura incorporada y especificando el nombre del archivo y el modo en el que
si quieres que tu trabajo también
queremos abrir
sea el archivo.
divertido:
# Abierto
El modo
¡usa
para 'escritura'
puede ser un modo de lectura ('r'), un modo de escritura ('w') o un modo de adición ('a').
Python!
También
f = podemos especificar si estamos leyendo,
abierto('poema.txt',
'w') # Escribir texto
en archivo f.write
(poema)
# Cerrar el
archivo f.close
()

# Si no se especifica ningún modo,


El modo # 'r'ead se asume por
defecto f = abierto('poema.txt')
tiempo Cierto:
línea = f.readline ()
# La longitud cero indica
EOF Si len(línea) == 0:
rotura
# La `línea` ya tiene una línea
nueva # al final de cada línea
# ya que está leyendo de un archivo.

8
Entrada y

escribiendo o añadiendo en modo texto ('t') o modo binario ('b'). En realidad, hay muchos más modos disponibles y
ayuda (abierto)le dará más detalles sobre ellos. Por defecto, open () considera que el archivo es un archivo 't'ext
y lo abre en modo' r'ead.

En nuestro ejemplo, primero abrimos / creamos el archivo en modo de escritura de texto y usamos el método de escritura del
objeto de archivo para escribir nuestro poema de variable de cadena en el archivo y luego finalmente cerramos el archivo.

A continuación, volvemos a abrir el mismo archivo para su lectura. No necesitamos especificar un modo porque 'leer archivo de
texto' es el modo predeterminado. Leemos en cada línea del archivo usando el método readline en un bucle. Este método
devuelve una línea completa que incluye el carácter de nueva línea al final de la línea. Cuando se devuelve una cadena vacía,
significa que hemos llegado al final del archivo y salimos del bucle.

Al final, finalmente cerramos el archivo.

Podemos ver en nuestra salida readline que este programa de hecho ha escrito y leído en nuestro nuevo archivo poem.txt.

Pepinillo
Python proporciona un módulo estándar llamado pickle que puede usar para almacenar cualquier objeto Python simple en un
archivo y luego recuperarlo más tarde. A esto se le llama almacenar el objeto de forma persistente.

Ejemplo (guardar como io_pickle.py ):

Producción:
importar pepinillo

# El nombre del archivo donde almacenaremos el


Cómo
$ funciona
python
objeto io_pickle.py
shoplistfile = 'shoplist.data'
['manzana',
# La lista de'mango',
cosas para comprar
Para'zanahoria']
almacenar= un
shoplist objeto en un'mango',
['manzana', archivo, 'zanahoria']
primero tenemos que abrir el archivo en modo binario de escritura y luego llamar a la
función de volcado del pickle
# Escribir
módulo. en else
Este proceso archivo
llama decapado.
f = abierto(archivo de
lista de tiendas,
A continuación, 'wb')el#objeto usando la función de carga del módulo pickle que devuelve el objeto. Este proceso se llama
recuperamos
Volcar el objeto a un
despellejar.
archivo pickle.dump
(shoplist, f) f.close ()

# Destruye la variable de
ladrón del comerciante

# Leer del almacenamiento


f = abierto(archivo de
lista de tiendas, 'rb')
# Carga el objeto del archivo
lista almacenada = pickle.load
(f) imprimir (lista

8
Entrada y

Unicode
Hasta ahora, cuando hemos estado escribiendo y usando cadenas, o leyendo y escribiendo en un archivo, solo hemos usado
caracteres simples en inglés. Tanto los caracteres en inglés como en otros idiomas se pueden representar en Unicode (consulte los
artículos al final de esta sección para obtener más información), y Python 3 por defecto almacena variables de cadena (piense en
todo el texto que escribimos usando simple, doble o triple comillas) en Unicode.

NOTA: Si está usando Python 2, y queremos poder leer y escribir en otros idiomas que no sean el inglés, debemos usar el
tipo Unicode, y todo comienza con el carácter u, por ejemplo, u "hola mundo".

Cuando los datos se envían a través de Internet, necesitamos enviarlos en bytes ... algo que su computadora entiende fácilmente.
>>> "hola
Las mundo"
reglas para traducir Unicode (que es lo que Python usa cuando almacena una cadena) a bytes se llama codificación. Una
'hola
mundo' popular para usar es UTF-8. Podemos leer y escribir en UTF-8 usando un argumento de palabra clave simple en
codificación
>>> tipo ("hola mundo")
nuestra función abierta.
<clase 'str'>
>>> u "hola=
# encoding
Cómo funciona
mundo"
utf-8 'hola
mundo'
importar io
Usamos io.open y luego usamos el argumento de codificación en la primera declaración abierta para codificar el mensaje, y
f = io.abierto("abc.txt", "wt", codificación
luego nuevamente en la segunda declaración abierta al decodificar el mensaje. Tenga en cuenta que solo deberíamos usar la
="utf-8") f. escribir (u "Imagínese un idioma
codificación
que no seaen la
eldeclaración abierta
inglés aquí") cuando()
f.close estamos en modo texto.

Cada vez =que


texto escribimos un programa
io.abierto("abc.txt", que usa literales
codificación Unicode (poniendo au antes de la cadena) como lo hemos usado
="utf-8")
anteriormente, tenemos (texto)
.read () imprimir que asegurarnos de que a Python se le diga que nuestro programa usa UTF-8, y tenemos que poner #
encoding = utf -8 comentarios en la parte superior de nuestro programa.

Debería aprender más sobre este tema leyendo:

"El mínimo absoluto que todo desarrollador de software debe conocer absoluta y positivamente sobre Unicode y conjuntos de
caracteres" Howto de Python Unicode
Charla pragmática Unicode por Nat Batchelder

Resumen
Hemos discutido varios tipos de entrada / salida, sobre el manejo de archivos, sobre el módulo pickle y sobre Unicode.

A continuación, exploraremos el concepto de excepciones.

8
Entrada y

1.
Utilice una tupla (puede encontrar una lista de todos signos de puntuación aquí) para contener todos los caracteres prohibidos,
luego use el
prueba de membresía para determinar si un personaje debe eliminarse o no, es decir, prohibido =!(,,, ?...). . ↩

8
Excepci

Excepciones
Las excepciones ocurren cuando ocurren situaciones excepcionales en su programa. Por ejemplo, ¿qué pasa si va a leer un archivo
y el archivo no existe? ¿O qué pasa si lo borró accidentalmente cuando el programa se estaba ejecutando? Estas situaciones se
manejan mediante excepciones.

Del mismo modo, ¿qué pasa si su programa tiene algunas declaraciones no válidas? Esto lo maneja Python, que levanta la mano y
le dice que hay un error.

Errores
Considere una simple llamada a la función de impresión. ¿Qué pasa si escribimos mal la impresión como Imprimir? Tenga en cuenta
las mayúsculas. En este caso, Python
levanta un error de sintaxis.

Observe que se genera un NameError


>>> Impresión("Hola Mundo") y también se imprime la ubicación donde se detectó el error. Esto es lo que es un controlador de
errores
Rastreo (llamadas recientes más
última):
porque este error lo hace.
Archivo "<stdin>", línea 1, en <módulo>
NameError: nombre 'Impresión' no es
definido
Excepciones
Intentaremos leer la entrada del usuario. Ingrese la primera línea a continuación y presione la tecla Enter. Cuando su
computadora le pida que ingrese, presione [ctrl-d] en una Mac o [ctrl-z] con Windows y vea qué sucede. (Si está utilizando
Windows y ninguna de las opciones funciona, puede probar [ctrl-c] en el símbolo del sistema para generar un error
KeyboardInterrupt en su lugar).
>>> s = input ('Ingresa algo ->')
Python genera
Ingrese un error
algo llamado EOFError
-> Traceback que básicamente
(última llamada más significa que encontró un símbolo de fin de archivo (que está
representado por ctrl-d)
reciente): Archivocuando no esperaba
"<stdin>", verlo.
línea 1, en <module>
EOFError

Manejo de excepciones
Podemos manejar excepciones usando la declaración try..except. Básicamente, colocamos nuestras declaraciones habituales
dentro del bloque try y todos nuestros controladores de errores en el bloque except.

Ejemplo (guardar como exceptions_handle.py ):

intentar:
texto = aporte('Ingrese algo ->')
excepto EOFError:
impresión('¿Por qué me hiciste un
EOF?') excepto KeyboardInterrupt:
impresión(Has cancelado la operación.)

8
Excepci

demás:
impresión('Entraste {}'.formato(texto))

Producción:

Cómo funciona ctrl


# Presione + d
$ python exceptions_handle.py
Colocamos
Ingresatodas
algo las
-> declaraciones
¿Por qué me que pueden
hiciste ungenerar
EOF? excepciones / errores dentro del bloque try y luego colocamos

controladores para los errores / excepciones apropiados en la cláusula / bloque except. La cláusula except puede manejar un
# Presione ctrl + c
solo$error o excepción
python especificada, o una lista entre paréntesis de errores / excepciones. Si no se proporcionan nombres de
exceptions_handle.py
errores o excepciones,
Ingrese algo -> ^seCencargará de todos
Usted canceló lalos errores y excepciones.
operación.

Tenga en cuenta
$ python que tiene que haber al menos una cláusula except asociada con cada cláusula try. De lo contrario, ¿cuál es el
exceptions_handle.py
Ingrese algo -> Sin excepciones
punto de tener un bloque de prueba?
Ingresó Sin excepciones

Si no se maneja algún error o excepción, se llama al controlador de Python predeterminado, que simplemente detiene la
ejecución del programa e imprime un mensaje de error. Ya hemos visto esto en acción anteriormente.

También puede tener una cláusula else asociada con un bloque try..except. La cláusula else se ejecuta si no se produce ninguna

excepción. En el siguiente ejemplo, también veremos cómo obtener el objeto de excepción para poder recuperar información

adicional.

Generación de excepciones
Puede generar excepciones utilizando la instrucción raise proporcionando el nombre del error / excepción y el objeto de
excepción que se lanzará.

El error o la excepción que puede generar debe ser una clase que directa o indirectamente debe ser una clase derivada de la
excepción.
clase.

Ejemplo (guardar como exceptions_raise.py ):

clase ShortInputException(Excepción):
'' 'Una clase de excepción
definida por el usuario.' '' def
en eso (yo, longitud, al
menos):
Excepción. init (self)
self.length = longitud
self.al menos = al
menos

intentar:
texto = aporte('Ingrese algo ->')
Si len(texto) < 3:
aumentar ShortInputException
(len(texto), 3) # Otros trabajos pueden
continuar como de costumbre aquí
excepto EOFError:
impresión('¿Por qué me hiciste un
EOF?') excepto ShortInputException como ex:

9
Excepci

demás:
impresión("No se planteó ninguna excepción".)

Producción:

Cómo funciona
$ python
exceptions_raise.py
Aquí, estamos
Ingrese creando
algo -> a nuestro propio tipo de excepción. Este nuevo tipo de excepción se llama ShortInputException. Tiene dos
campos:
ShortInputException: la entrada era 1 larga, se esperaba al menos 3
largo que es la longitud de la entrada dada, y al menos cuál es la longitud mínima que esperaba el programa.
$ python
exceptions_raise.py
En la cláusula except, mencionamos la clase de error que se almacenará como el nombre de la variable para contener el objeto
Ingrese algo -> abc
de error / excepción correspondiente. Esto es análogo a los parámetros y argumentos en una llamada a función. Dentro de esta
cláusula de excepción en particular, usamos la longitud y al menos los campos del objeto de excepción para imprimir un
mensaje apropiado para el usuario.

Prueba ... Finalmente


Suponga que está leyendo un archivo en su programa. ¿Cómo se asegura de que el objeto de archivo se cierre correctamente,
independientemente de si se generó una excepción? Esto se puede hacer usando el bloque finalmente.

Guarde este programa como exceptions_finally.py :

Producción:
importar
sys
importar
$ python exceptions_finally.py
hora
La programación es divertida
Presione
f = ctrl + c ahora
^ C !! Cancelaste la lectura del archivo.
Ningun
o
intent
ar:
f = abierto("poema.txt")
# Nuestro lenguaje habitual
de lectura de archivos
tiempo Cierto:
línea =
f.readline () Si
len(línea) == 0:
rotura
imprimir (línea,
fin ='')
sys.stdout.flush
()
impresión("Presiona ctrl + c ahora")
# Para asegurarse de que se ejecute
durante un tiempo tiempo de dormir(2)

9
Excepci

(Limpieza: cerrado el archivo)

Cómo funciona

Hacemos las cosas habituales de lectura de archivos, pero hemos introducido arbitrariamente dormir durante 2 segundos después de
imprimir cada línea usando el
tiempo de dormirfunción para que el programa se ejecute lentamente (Python es muy rápido por naturaleza). Cuando el
programa aún se esté ejecutando, presione

Ctrl + C para interrumpir / cancelar el programa.

Observe que se lanza la excepción KeyboardInterrupt y el programa se cierra. Sin embargo, antes de que el programa salga, se
ejecuta la cláusula finalmente y el objeto de archivo siempre se cierra.

Observe que una variable a la que se le asigna un valor de 0 o Ninguno o una variable que es una secuencia o colección vacía se
considera Falsa
por Python. Es por eso que podemos usar if f: en el código anterior.

También tenga en cuenta que usamos sys.stdout.flush () después impresión para que se imprima en la pantalla inmediatamente.

La declaración con
Adquirir un recurso en el bloque try y posteriormente liberar el recurso en el bloque finalmente es un patrón común. Por lo
tanto, también hay una declaración with que permite que esto se haga de manera limpia:

Guardar como exceptions_using_with.py :

Cómo
confunciona
abierto("poema.txt")
como F: por línea en
La salidaF:debe ser la misma que en el ejemplo anterior. La diferencia aquí es que estamos usando la función abierta con la con
declaración: dejamos que el cierre del archivo se realice automáticamente con open.

Lo que sucede detrás de escena es que hay un protocolo utilizado por la declaración with. Obtiene el objeto devuelto por el
abierto declaración, llamémosla "el archivo" en este caso.

Siempre llama al el archivo. ingresar función antes de iniciar el bloque de código debajo de él y siempre llama el archivo.
Salida

después de terminar el bloque de código.

Entonces, el código que hubiéramos escrito en un bloque finalmente debería ser atendido automáticamente por el método de
salida. Esto es lo que nos ayuda a evitar tener que usar declaraciones explícitas try..finally repetidamente.

Más discusión sobre este tema está más allá del alcance de este libro, así que consulte PEP 343 para una explicación completa.

Resumen
Hemos discutido el uso de las declaraciones try..except and try..finally. Hemos visto cómo crear nuestros propios tipos de
excepciones y también cómo generar excepciones.

A continuación, exploraremos la biblioteca estándar de Python.

9
Biblioteca

Biblioteca estándar
La biblioteca estándar de Python contiene una gran cantidad de módulos útiles y es parte de cada instalación estándar de
Python. Es importante familiarizarse con la biblioteca estándar de Python, ya que muchos problemas se pueden resolver
rápidamente si está familiarizado con la variedad de cosas que estas bibliotecas pueden hacer.

Exploraremos algunos de los módulos de uso común en esta biblioteca. Puede encontrar detalles completos de todos los módulos en
la biblioteca estándar de Python en elSección 'Referencia de biblioteca' de la documentación que viene con su instalación de Python.

Exploremos algunos módulos útiles.

PRECAUCIÓN: Si encuentra que los temas de este capítulo son demasiado avanzados, puede omitir este capítulo. Sin
embargo, recomiendo encarecidamente volver a este capítulo cuando se sienta más cómodo programando con Python.

sys módulo
El módulo sys contiene funciones específicas del sistema. Ya hemos visto que la lista sys.argv contiene los argumentos de la
línea de comandos.

Supongamos que queremos verificar la versión del software Python que se está utilizando, el módulo sys nos da esa información.

Cómo
>>>funciona
importar sys
>>> sys.version_info
El módulo sys tiene una(mayor
sys.version_info tupla version_info que micro
=3, menor =6, nos da =0,
la información de la='final',
releaselevel versión. La primera
serial =0)entrada es la versión principal.
>>> sys.version_info.major ==
Podemos extraer esta información para usarla.
3 verdadero

Inicio sesión módulo


¿Qué pasaría si quisiera tener algunos mensajes de depuración o mensajes importantes para almacenarlos en algún lugar para
poder verificar si su programa se ha estado ejecutando como lo esperaría? ¿Cómo "guardas en algún lugar" estos mensajes?
Esto se puede lograr utilizando el módulo de registro.

Guardar como stdlib_logging.py :

importar os
importar
plataforma
importar
Inicio
sesión

Si platform.platform (). startswith ('Windows'):


archivo_registro = os.path.join (os.getenv
('HOMEDRIVE'),
os.getenv
('HOMEPATH'),
'test.log')
demás:
archivo_registro = os.path.join (os.getenv ('CASA'),
'test.log')

9
Biblioteca

level = logging.DEBUG,
formato='% (asctime) s:% (levelname) s:%
(message) s', nombre de archivo =
archivo_registro,
filemode ='w',
)

logging.debug"Inicio del programa")


logging.info ("Haciendo algo") logging.warning
("Morir ahora")

Producción:

El comando
$ pythoncat se usa en la línea de comandos para leer el archivo 'test.log'. Si el comando cat no está disponible, puede abrir el
stdlib_logging.py
Iniciar
test.log en su sesión en
lugar, archivo en un editor de texto.
/Users/swa/test.log

Cómo funciona
$ cat /Users/swa/test.log
2014-03-29 09: 27: 36,660: DEBUG: Inicio del
Usamos tres módulos de la biblioteca estándar: el módulo del sistema operativo para interactuar con el sistema operativo, la
programa 2014-03-29 09: 27: 36,660: INFO: Haciendo
plataforma
algo
módulo para obtener información sobre la plataforma, es decir, el sistema operativo y el módulo de registro para registrar
información.

Primero, verificamos qué sistema operativo estamos usando verificando la cadena devuelta por platform.platform () (para
obtener más información, consulte importar plataforma; ayuda (plataforma)). Si es Windows, averiguamos el disco de inicio, la
carpeta de inicio y el nombre del archivo donde queremos almacenar la información. Juntando estas tres partes, obtenemos la
ubicación completa del archivo. Para otras plataformas, necesitamos conocer solo la carpeta de inicio del usuario y obtenemos la
ubicación completa del archivo.

Usamos el os.path.join () función para unir estas tres partes de la ubicación. La razón para usar una función especial en lugar
de simplemente agregar las cadenas es porque esta función asegurará que la ubicación completa coincida con el formato
esperado por el sistema operativo. Nota lajoin () 'método que usamos aquí que es parte del os el módulo es diferente

de la cadena método join () `que hemos utilizado en otras partes de este libro.

Configuramos el módulo de registro para escribir todos los mensajes en un formato particular en el archivo que hemos especificado.

Finalmente, podemos poner mensajes que estén destinados a depuración, información, advertencia o incluso mensajes críticos.
Una vez que el programa se ha ejecutado, podemos verificar este archivo y sabremos qué sucedió en el programa, aunque no se
mostró ninguna información al usuario que ejecuta el programa.

Módulo de la serie de la semana


Hay mucho más por explorar en la biblioteca estándar, como depuración, manejo de opciones de línea de comando, expresiones
regulares y así.

La mejor manera de explorar más a fondo la biblioteca estándar es leer el excelente libro de Doug Hellmann. Módulo de Python de la
semana serie (también disponible como libro) y leyendo el Documentación de Python.

Resumen
Hemos explorado algunas de las funciones de muchos módulos en la biblioteca estándar de Python. Es muy recomendable navegar
por elDocumentación de la biblioteca estándar de Python para tener una idea de todos los módulos disponibles.

9
Biblioteca

A continuación, cubriremos varios aspectos de Python que harán que nuestro recorrido por Python sea más completo.

9
M

Más
Hasta ahora hemos cubierto la mayoría de los diversos aspectos de Python que utilizará. En este capítulo, cubriremos algunos
aspectos más que harán que nuestro conocimiento de Python sea más completo.

Pasando tuplas alrededor


¿Alguna vez ha deseado poder devolver dos valores diferentes de una función? Usted puede. Todo lo que tienes que hacer es usar una
tupla.

Observe que get_error_details():


>>> def el uso de a, b = <alguna expresión> interpreta el resultado de la expresión como una tupla con dos
... regreso (2, 'detalles')
valores.
... Esto también significa que la forma más rápida de intercambiar dos variables en Python es:
>>> errnum, errstr = get_error_details ()
>>>
>>> a =25; b =8
errnum
>>> a,
errstr
b (5,
'detalles'
8)
>>> a, b = b, a
>>> a,
b (8,

Métodos especiales
Hay ciertos métodos, como los métodos init y del, que tienen un significado especial en las clases.

Se utilizan métodos especiales para imitar ciertos comportamientos de tipos integrados. Por ejemplo, si desea usar la operación de
indexación x [clave] para su clase (tal como la usa para listas y tuplas), entonces todo lo que tiene que hacer es implementar el
método getitem () y su trabajo está hecho. Si lo piensas bien, ¡esto es lo que hace Python para la clase de lista en sí!

En la siguiente tabla se enumeran algunos métodos especiales útiles. Si desea conocer todos los métodos especiales,ver el manual.

en eso (uno mismo, ...)

Este método se llama justo antes de que el objeto recién creado se devuelva para su uso.
del (uno mismo)

Llamado justo antes de que se destruya el objeto (que tiene un tiempo impredecible, así que evite usar esto)
str (uno mismo)

Se llama cuando usamos la función de impresión o cuando se usa str ().


es (yo, otro)

Se llama cuando se utiliza el operador menor que (<). Del mismo modo, existen métodos especiales para todos los
operadores (+,>, etc.)
obtiene el objeto (yo, clave)

Se llama cuando se utiliza la operación de indexación x [tecla].

9
M

len (yo)

Se llama cuando se usa la función incorporada len () para el objeto de secuencia.

Bloques de declaración única


Hemos visto que cada bloque de declaraciones se diferencia del resto por su propio nivel de sangría. Bueno, hay una salvedad. Si su
bloque de declaraciones contiene solo una declaración, entonces puede especificarla en la misma línea de, digamos, una declaración
condicional o una declaración en bucle. El siguiente ejemplo debería aclarar esto:

Tenga en cuenta que la declaración única se usa en el lugar y no como un bloque separado. Aunque puede usar esto para hacer
>>> bandera = Cierto
que >>>
su programa sea más
Si bandera: pequeño,
imprimir le recomiendo encarecidamente evitar este método de atajo, excepto para la verificación de
('Sí')
... principalmente porque será mucho más fácil agregar una declaración adicional si está usando la sangría adecuada.
errores,

Formas lambda
Se utiliza una declaración lambda para crear nuevos objetos de función. Esencialmente, la lambda toma un parámetro seguido
de una sola expresión. Lambda se convierte en el cuerpo de la función. La nueva función devuelve el valor de esta expresión.

Ejemplo (guardar como more_lambda.py ):

Producción:
puntos = [{'X': 2, 'y':
3},
{'X': 4, 'y': 1}]
Cómo funciona
puntos.ordenar
$ python (clave =lambda
more_lambda.py
yo: yo 1,
[{'y': ['y'])
'x':imprimir (puntos)
4}, {'y': 3, 'x': 2}]
Tenga en cuenta que el método de ordenación de una lista puede tomar un parámetro clave que determina cómo se ordena la
lista (por lo general, solo conocemos el orden ascendente o descendente). En nuestro caso, queremos hacer una ordenación
personalizada, y para eso necesitamos escribir una función. En lugar de escribir un bloque def separado para una función que se
usará solo en este lugar, usamos una expresión lambda para crear una nueva función.

Comprensión de listas
Las listas por comprensión se utilizan para derivar una nueva lista a partir de una lista existente. Suponga que tiene una lista de
números y desea obtener una lista correspondiente con todos los números multiplicados por 2 solo cuando el número en sí es
mayor que 2. Las listas por comprensión son ideales para tales situaciones.

Ejemplo (guardar como more_list_comprehension.py ):

listone = [2, 3, 4]
listtwo = [2*I por I en listone Si yo> 2]

9
M

imprimir (lista dos)

Producción:

Cómo funciona
$ python
more_list_comprehension.py [6, 8]
Aquí, derivamos una nueva lista especificando la manipulación a realizar (2 * i) cuando se cumple alguna condición (si i> 2).
Tenga en cuenta que la lista original permanece sin modificaciones.

La ventaja de usar listas por comprensión es que reduce la cantidad de código repetitivo requerido cuando usamos bucles para
procesar cada elemento de una lista y almacenarlo en una nueva lista.

Recibir tuplas y diccionarios en funciones


Existe una forma especial de recibir parámetros para una función como una tupla o un diccionario usando el prefijo * o **
respectivamente. Esto es útil cuando se toma un número variable de argumentos en la función.

Debido a que tenemos un prefijo * en la variable args, todos los argumentos adicionales pasados a la función se almacenan en args
>>> def powersum(poder, * argumentos):
como una tupla. Si un
... '' 'Devuelve la suma de cada argumento elevado a la potencia especificada.' ''
** prefijo en su lugar, los parámetros adicionales se considerarían pares clave / valor de un diccionario.
... total = 0
... por I en argumentos:
... total + = pow(yo, poder)

La...declaración de aserción
... regreso total

>>> powersum2, 3, 4)
La declaración
25 de aserción se usa para afirmar que algo es cierto. Por ejemplo, si está muy seguro de que tendrá al menos un
>>> powersum2,
elemento en una lista10)
que está usando y desea verificarlo, y generar un error si no es cierto, entonces la declaración de aserción
100
es ideal en esta situación. Cuando falla la declaración de aserción, se genera un AssertionError. El método pop () elimina y
devuelve el último elemento de la lista.

La afirmación
>>> mylistdebe usarse con prudencia. La mayoría de las veces, es mejor detectar excepciones, ya sea manejar el problema o
= ['Articulo']
>>> afirmar len(mi lista)> = 1
mostrar un mensaje de error al usuario y luego salir.
>>> mylist.pop
() 'Articulo'
>>> afirmar len(mi lista)> = 1
Rastreo (llamadas recientes más
última):
Archivo "<stdin>", línea 1, en <módulo>
AssertionError

9
M

Decoradores
Los decoradores son un atajo para aplicar funciones de envoltura. Esto es útil para "ajustar" la funcionalidad con el mismo código
una y otra vez. Por ejemplo, creé un decorador de reintentos para mí mismo que puedo aplicar a cualquier función y si se lanza
alguna excepción durante una ejecución, se vuelve a intentar, hasta un máximo de 5 veces y con un retraso entre cada reintento.
Esto es especialmente útil para situaciones en las que intenta realizar una llamada de red a una computadora remota:

Producción:
de hora importar dormir
de functools importar
envuelve importar
$ python more_decorator.py
registro
Escriba en una base de datos o realice una llamada de red, etc.
logging.basicConfig ()
Esto se volverá a intentar automáticamente si se lanza
log = logging.getLogger ("rever")
una excepción. ERROR: reintento: intento 1/5 fallido:
(('Algún valor incorrecto',), {}) Rastreo (última
llamada más reciente):
def rever(F):
Archivo "more_decorator.py", línea 14, en
@ envolturas
wrapper_function return f (* args, ** kwargs)
(f)
El archivo "more_decorator.py", línea 39, en
def wrapper_function(* argumentos, ** kwargs):
save_to_database eleva ValueError (arg)
MAX_ATTEMPTS = 5
ValueError: Algún mal valor
por intento en distancia(1, MAX_ATTEMPTS
Escriba en una base de datos o realice una llamada de red, etc.
+ 1): intentar:
regreso f (* argumentos, **
kwargs) excepto Excepción:
log.exception ("Intento% s /% s fallido:% s",
intento,
MAX_ATTEMPTS,
(args, kwargs))
dormir (10 * intento)
log.critical"Todos los% s intentos fallaron:% s",
MAX_ATTEMPTS,
(argumentos,
kwargs)) regreso wrapper_function

contador = 0

@rever
def save_to_database(arg):
impresión("Escribir en una base de datos o realizar una llamada de
red, etc.") impresión("Esto se volverá a intentar automáticamente
si se lanza una excepción".) global encimera
contador + = 1
# Esto arrojará una excepción en la primera llamada
# Y funcionará bien en la segunda llamada (es decir,
un reintento) Si contador < 2:
aumentar ValueError (arg)

Si nombre == ' principal ':

9
M

Esto se volverá a intentar automáticamente si se lanza una excepción.

Cómo funciona

Ver:

Video: Decoradores de Python simplificados


http://www.ibm.com/developerworks/linux/library/l-cpdecor.html
http://toumorokoshi.github.io/dry-principles-through-python-decorators.html

Diferencias entre Python 2 y Python 3


Ver:

Biblioteca "Six"
Portando a Python 3 Redux por Armin
Experiencia Python 3 por PyDanny
Guía oficial de Django para la migración a Python 3
Discusión sobre ¿Cuáles son las ventajas de Python
3.x?

Resumen
Hemos cubierto algunas características más de Python en este capítulo y, sin embargo, no hemos cubierto todas las características
de Python. Sin embargo, en esta etapa, hemos cubierto la mayor parte de lo que usará en la práctica. Esto es suficiente para que
pueda comenzar con cualquier programa que vaya a crear.

A continuación, analizaremos cómo explorar más Python.

1
Qué

Qué sigue
Si ha leído este libro detenidamente hasta ahora y ha practicado la escritura de muchos programas, entonces debe haberse
familiarizado con Python. Probablemente haya creado algunos programas de Python para probar cosas y también para ejercitar
sus habilidades de Python. Si aún no lo ha hecho, debería hacerlo. La pregunta ahora es '¿Qué sigue?'.

Le sugiero que aborde este problema:

Cree su propio programa de libreta de direcciones de línea de comandos con el que puede explorar, agregar, modificar,
eliminar o buscar sus contactos, como amigos, familiares y colegas, y su información, como la dirección de correo
electrónico y / o el número de teléfono. Los detalles deben almacenarse para su posterior recuperación.

Esto es bastante fácil si lo piensas en términos de todas las cosas con las que nos hemos encontrado hasta ahora. Si aún desea
1
instrucciones sobre cómo proceder, aquí tiene una pista .

Una vez que pueda hacer esto, puede afirmar que es un programador de Python. Ahora, inmediatamenteEnvíame un correo
electrónico agradeciéndome por este gran libro ;-). Este paso es opcional pero recomendado. Además, considerecomprar una copia
impresa para apoyar el desarrollo continuo de este libro.

Si ese programa le resultó fácil, aquí tiene otro:

Implementar el reemplazar comando. Este comando reemplazará una cadena por otra en la lista de archivos proporcionados.

El comando reemplazar puede ser tan simple o sofisticado como desee, desde una simple sustitución de cadenas hasta buscar
patrones (expresiones regulares).

Próximos proyectos
Si encuentra que los programas anteriores son fáciles de crear, mire esta lista completa de proyectos e intente escribir sus propios
programas: https://github.com/thekarangoel/Projects#numbers (la misma lista también está en Lista de mega proyectos de Martyr2).

Ver también:

Ejercicios para programadores: 57 desafíos para desarrollar sus habilidades de


codificación Proyectos intermedios de Python.

Código de ejemplo
La mejor manera de aprender un lenguaje de programación es escribir mucho código y leer mucho código:

Libro de cocina de Python es una colección extremadamente valiosa de recetas o consejos sobre cómo resolver ciertos
tipos de problemas usando Python. Esta es una lectura obligada para todos los usuarios de Python.
Módulo de Python de la semana es otra excelente guía de lectura obligada para Biblioteca estándar.

Consejo
¡La guía del autoestopista de
Python! Los elementos del estilo
Python Panorama general de Python
Libro electrónico "Writing Idiomatic Python" (pagado)

1
Qué

Videos
Desarrollo web Full Stack con Flask
PyVideo

Preguntas y respuestas
Preguntas frecuentes oficiales de
Python: lo que se debe y no se debe
hacer en Python
Lista de Norvig de preguntas infrecuentes de la
entrevista Python Q & A
Preguntas de StackOverflow etiquetadas con Python

Tutoriales
Características ocultas de Python
¿Cuál es el único fragmento de código / truco de Python / etc.que desearía saber cuando aprendió
Python? Lista completa de tutoriales de Python de Awaretek

Discusión
Si tiene un problema de Python y no sabe a quién preguntar, entonces el lista de python-tutor es el mejor lugar para hacer su
pregunta.

Asegúrese de hacer su tarea tratando de resolver el problema usted mismo primero y haz preguntas inteligentes.

Noticias
Si desea saber qué es lo último en el mundo de Python, siga las Python Planet oficial.

Instalar bibliotecas
Hay una gran cantidad de bibliotecas de código abierto en el Índice de paquetes de Python que puede utilizar en sus

propios programas. Para instalar y usar estas bibliotecas, puede usarpepita.

Crear un sitio web


Aprender Matraz para crear su propio sitio web. Algunos recursos para comenzar:

Inicio rápido oficial de


Flask Mega-Tutorial de
Flask Ejemplos de
proyectos de Flask

Software gráfico

1
Qué

Suponga que desea crear sus propios programas gráficos utilizando Python. Esto se puede hacer usando una biblioteca GUI (interfaz
gráfica de usuario) con sus enlaces de Python. Los enlaces son lo que le permite escribir programas en Python y usar las bibliotecas
que están escritas en C o C ++ u otros lenguajes.

Hay muchas opciones para GUI usando Python:

Kivy

http://kivy.org
PyGTK

Este es el enlace de Python para el kit de herramientas GTK +, que es la base sobre la que se construye GNOME. GTK +
tiene muchospeculiaridades en el uso, pero una vez que se sienta cómodo, puede crear aplicaciones GUI rápidamente. La
interfaz gráfica Glade defirmante es indispensable. La documentación aún no ha mejorado. GTK + funciona bien en
GNU / Linux pero su puerto para Windowsestá incompleto. Puede crear software tanto gratuito como propietario
utilizando GTK +. Para empezar, lea elTutorial de PyGTK.
PyQt

Este es el enlace de Python para el kit de herramientas Qt, que es la base sobre la que se construye KDE. Qt es
extremadamente fácil de usar y muy poderoso, especialmente debido al Qt Designer y la increíble documentación de Qt.
PyQt es free si desea crear software de código abierto (GPL'ed) y necesita comprarlo si desea crear software propietario
de código cerrado. A partir de Qt 4.5, también puede usarlo para crear software que no sea GPL. Para comenzar, lea
acerca dePySide.
wxPython

Estos son los enlaces de Python para el kit de herramientas wxWidgets. wxPython tiene una curva de aprendizaje
aasociado con eso. Sin embargo, es muy portátil y se ejecuta en GNU / Linux, Windows, Mac e incluso en plataformas
integradas. Allíhay muchos IDE adisponible para wxPython, que incluye diseñadores de GUI, así como SPE (Editor de
Python de Stani) y el wxGlade Constructor de GUI. Puede crear software gratuito y propietario utilizando wxPython.
Para empezar, lea eltutorial de wxPython.

Resumen de herramientas GUI


Para obtener más opciones, consulte la Página wiki de GuiProgramming en el sitio web oficial de Python.

Desafortunadamente, no existe una herramienta GUI estándar para Python. Le sugiero que elija una de las herramientas anteriores
según su situación. El primer factor es si está dispuesto a pagar por utilizar alguna de las herramientas GUI. El segundo factor es
si desea que el programa se ejecute solo en Windows o en Mac y GNU / Linux o todos ellos. El tercer factor, si GNU / Linux es
una plataforma elegida, es si es un usuario de KDE o GNOME en GNU / Linux.

Para obtener un análisis más detallado y completo, consulte la página 26 del 'Los documentos de Python, volumen 3, número 1'
(PDF).

Varias implementaciones
Por lo general, un lenguaje de programación consta de dos partes: el lenguaje y el software. Un idioma es cómo escribes algo.
El software es lo que realmente ejecuta nuestros programas.

Hemos estado utilizando el software CPython para ejecutar nuestros programas. Se conoce como CPython porque está escrito en
lenguaje C y es el intérprete clásico de Python.

También hay otro software que puede ejecutar sus programas Python:

Jython

Un Python implementación que se ejecuta en la plataforma Java. Esto significa que puede usar bibliotecas y clases de Java
desde el lenguaje Python y viceversa.
IronPython

1
Qué
Una implementación de Python que se ejecuta en la plataforma .NET. Esto significa que puede usar bibliotecas y
clases .NET de

1
Qué

dentro del lenguaje Python y viceversa.


PyPy

¡Una implementación de Python escrita en Python! Este es un proyecto de investigación para agilizar y facilitar la mejora
del intérprete ya que el intérpreteen sí mismo es escrito en un lenguaje dinámico (a diferencia del lenguaje estáticoges tales
como C, Java o C # en las tres implementaciones anteriores)

También hay otros como CLPython - una implementación de Python escrita en Common Lisp y Brython que es una
implementación sobre un intérprete de JavaScript que podría significar que puede usar Python (en lugar de JavaScript) para
escribir los programas de su navegador web ("Ajax").

Cada una de estas implementaciones tiene sus áreas especializadas donde son útiles.

Programación funcional (para lectores avanzados)


Quién y dónden comienzas a escribir programas más grandes, debes defiaprender más sobre un enfoque funcional de la
programación en comparación con el enfoque de programación basado en clases que aprendimos en tél capítulo de programación
orientada a objetos:

Howto de programación funcional por AM Kuchling


Capítulo de programación funcional en el libro 'Dive Into
Python' Presentación de Programación funcional con Python
Biblioteca Funcy
biblioteca PyToolz

Resumen
Hemos llegado al final de este libro pero, como dicen, ¡este es el principio del fin !. Ahora eres un ávido usuario de Python y sin
duda estás listo para resolver muchos problemas usando Python. Puede comenzar a automatizar su computadora para hacer todo
tipo de cosas previamente inimaginables o escribir sus propios juegos y mucho más. ¡Así que empieza!

1
. Crea una clase para representar la información de la persona. Utilice un diccionario para almacenar objetos de persona
con su nombre como clave. Utilice el módulo pickle para almacenar los objetos de forma persistente en su disco duro.
Utilice los métodos integrados del diccionario para agregar, eliminar y modificar las personas.↩

1
Apéndice:

Apéndice: FLOSS
NOTA: Tenga en cuenta que esta sección se escribió en 2003, por lo que algo de esto le parecerá extraño :-)

"Software libre / libre y de código abierto", en resumen, SEDA FLOJA se basa en el concepto de comunidad, que a su vez se
basa en el concepto de compartir y, en particular, en el intercambio de conocimientos. Los FLOSS son gratuitos para su uso,
modificación y redistribución.

Si ya ha leído este libro, entonces ya está familiarizado con FLOSS ya que ha estado usando Python todo el tiempo y Python es
un software de código abierto.

Aquí hay algunos ejemplos de FLOSS para dar una idea del tipo de cosas que puede crear el compartir y construir una comunidad:

Linux: Este es un kernel de SO FLOSS utilizado en el sistema operativo GNU / Linux. Linux, el kernel, fue iniciado por Linus
Torvalds cuando era estudiante. Android está basado en Linux. Cualquier sitio web que use en estos días se ejecutará principalmente
en Linux.

Ubuntu: Esta es una distribución impulsada por la comunidad, patrocinada por Canonical y es la distribución GNU / Linux más
popular en la actualidad. Le permite instalar una gran cantidad de FLOSS disponibles y todo esto de una manera fácil de usar y
de instalar. Lo mejor de todo es que puede reiniciar su computadora y ejecutar GNU / Linux desde el CD. Esto le permite probar
completamente el nuevo sistema operativo antes de instalarlo en su computadora. Sin embargo, Ubuntu no es un software
completamente gratuito; contiene controladores, firmware y aplicaciones patentados.

LibreOffice: Esta es una excelente suite ofimática desarrollada y impulsada por la comunidad con un escritor, una presentación,
una hoja de cálculo y componentes de dibujo, entre otras cosas. Incluso puede abrir y editar archivos de MS Word y MS
PowerPoint con facilidad. Se ejecuta en casi todas las plataformas y es un software totalmente gratuito, libre y de código
abierto.

Mozilla Firefox: Este es el mejor navegador web. Es increíblemente rápido y ha ganado elogios de la crítica por sus características
sensatas e impresionantes. El concepto de extensiones permite utilizar cualquier tipo de complemento.

Mononucleosis infecciosa: Esta es una implementación de código abierto de la plataforma Microsoft .NET. Permite la creación y
ejecución de aplicaciones .NET en GNU / Linux, Windows, FreeBSD, Mac OS y también en muchas otras plataformas.

Servidor web Apache: Este es el popular servidor web de código abierto. De hecho, ¡es el servidor web más popular del
planeta! Ejecuta casi más de la mitad de los sitios web que existen. Sí, es cierto: Apache maneja más sitios web que toda la
competencia (incluido Microsoft IIS) combinados.

Reproductor de VLC: Este es un reproductor de video que puede reproducir cualquier cosa, desde DivX a MP3 a Ogg a VCD y
DVD a ... ¿quién dice que el código abierto no es divertido? ;-)

Esta lista solo tiene la intención de darle una breve idea: hay muchos más FLOSS excelentes, como el lenguaje Perl, el lenguaje
PHP, el sistema de gestión de contenido Drupal para sitios web, el servidor de base de datos PostgreSQL, el juego de carreras
TORCS, KDevelop IDE, Xine ... el reproductor de películas, el editor VIM, el editor Quanta +, el reproductor de audio Banshee, el
programa de edición de imágenes GIMP, ... Esta lista podría continuar para siempre.

Para obtener las últimas noticias sobre el mundo de los FLOSS, visite los siguientes sitios web:

¡DIOS MÍO!
Ubuntu! Web
Upd8
DistroWatch
Planeta Debian

Visite los siguientes sitios web para obtener más información sobre FLOSS:

Explorar GitHub
Triaje de código

1
Apéndice:
FuenteForge Carne
fresca

1
Apéndice:

¡Así que, adelante, explora el vasto, libre y abierto mundo de FLOSS!

1
Apéndice:

Apéndice: Colofón
Casi todo el software que he utilizado en la creación de este libro es SEDA FLOJA.

Nacimiento del libro


En el primer borrador de este libro, usé Red Hat 9.0 Linux como base de mi configuración y en el sexto borrador, usé Fedora
Core 3 Linux como base de mi configuración.

Inicialmente, estaba usando KWord para escribir el libro (como se explica en el leccion de historia).

Adolescencia
Más tarde, cambié a DocBook XML usando Kate, pero lo encontré demasiado tedioso. Entonces, cambié a OpenOffice, que era
excelente con el nivel de control que proporcionaba para el formateo y la generación de PDF, pero producía un HTML muy
descuidado a partir del documento.

Finalmente, descubrí XEmacs y reescribí el libro desde cero en DocBook XML (nuevamente) después de que decidí que este
formato era la solución a largo plazo.

En el sexto borrador, decidí usar Quanta + para hacer toda la edición. Se estaban utilizando las hojas de estilo XSL estándar que
venían con Fedora Core 3 Linux. Sin embargo, había escrito un documento CSS para dar color y estilo a las páginas HTML.
También había escrito un analizador léxico rudimentario, en Python por supuesto, que proporciona automáticamente resaltado de
sintaxis a todos los listados de programas.

Para el séptimo borrador, estaba usando MediaWiki como base de mi configuración. Solía editar todo en línea y los lectores pueden
leer / editar / discutir directamente dentro del sitio web wiki, pero terminé pasando más tiempo luchando contra el spam que
escribiendo.

Para el octavo borrador, usé Empuje, Pandocy Mac OS X.

Para el noveno borrador, cambié a Formato AsciiDoc y usado Emacs 24.3, tema de mañana, Fuente Fira Mono y modo adoc
escribir.

Ahora
2016: Me cansé de varios problemas menores de renderizado en AsciiDoctor, como que ++ en C / C ++ desaparecería y era
difícil hacer un seguimiento de cómo escapar de cosas tan pequeñas. Además, me había vuelto reacio a editar el texto debido al
complejo formato Asciidoc.

Para el décimo borrador, cambié a escribir en Markdown + GitBook formato, usando el Editor de Spacemacs.

Noviembre de 2020: desde que Gitbook abandonó su software de código abierto, migró a Honkit, una bifurcación mantenida
por la comunidad del legado de Gitbook.

Sobre el Autor
Ver https://swaroopch.com/about

1
Apéndice: Historial de

Apéndice: Lección de historia


Comencé con Python cuando necesitaba escribir un instalador para el software que había escrito llamado 'Diamond' para poder
facilitar la instalación. Tuve que elegir entre enlaces de Python y Perl para la biblioteca Qt. Investigué un poco en la web y
encontréun artículo de Eric S. Raymond, un hacker famoso y respetado, donde habló sobre cómo Python se había convertido en su
lenguaje de programación favorito. También descubrí que los enlaces de PyQt eran más maduros en comparación con Perl-Qt.
Entonces, decidí que Python era el lenguaje para mí.

Luego, comencé a buscar un buen libro sobre Python. ¡No pude encontrar ninguno! Encontré algunos libros de O'Reilly, pero eran
demasiado caros o parecían más un manual de referencia que una guía. Entonces, me conformé con la documentación que venía
con Python. Sin embargo, fue demasiado breve y pequeño. Dio una buena idea sobre Python, pero no estaba completo. Me las
arreglé porque tenía experiencia previa en programación, pero no era adecuado para principiantes.

Aproximadamente seis meses después de mi primer contacto con Python, instalé el (entonces) último Red Hat 9.0 Linux y estaba
jugando con KWord. Me emocioné y de repente se me ocurrió la idea de escribir algunas cosas en Python. Empecé a escribir
unas cuantas páginas, pero rápidamente se convirtieron en 30. Luego, me tomé en serio la idea de hacerla más útil en forma de
libro. Después de muchas reescrituras, ha llegado a una etapa en la que se ha convertido en una guía útil para aprender el
lenguaje Python. Considero que este libro es mi contribución y tributo a la comunidad de código abierto.

Este libro comenzó como mis notas personales sobre Python y todavía lo considero de la misma manera, aunque me he esforzado
mucho para hacerlo más agradable para los demás :)

En el verdadero espíritu del código abierto, he recibido muchas sugerencias constructivas, críticas y realimentación de lectores
entusiastas, lo que me ha ayudado a mejorar mucho este libro.

Estado del libro


El libro necesita la ayuda de sus lectores, como ustedes, para señalar cualquier parte del libro que no sea buena, comprensible o
simplemente incorrecta. Por favorescribir al autor principal o el respectivo traductores con sus comentarios y sugerencias.

Apéndice: Historial de revisiones


Sin cambio de versión

06 noviembre 2020
Migrado de GitBook abandonado a Honkit mantenido por la comunidad, una bifurcación del legado de GitBook
4.0

19 de ene. De 2016
Volvió a Python 3
Cambió de nuevo a Markdown, usando GitBook y Spacemacs
3,0

31 de marzo de 2014
Reescrito para Python 2 usando AsciiDoc y modo adoc.
2.1

03 agosto 2013
Reescrito usando Markdown y Modo Markdown de Jason Blevins
2.0

1
Apéndice: Historial de

20 de octubre de 2012
Reescrito en Formato Pandoc, gracias a mi esposa que hizo la mayor parte de la conversión del formato Mediawiki
Simplificando el texto, eliminando secciones no esenciales como no locales y metaclases
1,90

04 de septiembre de 2008 y
todavía en curso ¡Resurgimiento
después de un intervalo de 3,5
años! Reescritura para Python
3.0
Reescribir usando http://www.mediawiki.org[MediaWiki] (de nuevo)
1,20

13 de enero de 2005
Complete la reescritura usando Quanta + en Fedora Core 3 con muchas correcciones y actualizaciones. Muchos
ejemplos nuevos. Reescribí la configuración de mi DocBook desde cero.
1,15

28 de marzo de 2004
Revisiones menores
1.12

16 de marzo de 2004
Adiciones y correcciones
1,10

09 marzo 2004
Más correcciones de errores tipográficos, gracias a muchos lectores entusiastas y serviciales.
1,00

08 marzo 2004
Después de una tremenda retroalimentación y sugerencias de los lectores, hice importantes revisiones al contenido
junto con correcciones de errores tipográficos.
0,99

22 de febrero de 2004
Se agregó un nuevo capítulo sobre módulos. Se agregaron detalles sobre el número variable de argumentos en funciones.
0,98

16 de febrero de 2004
Escribió una secuencia de comandos de Python y una hoja de estilo CSS para mejorar la salida XHTML, incluido un
analizador léxico básico pero funcional para el resaltado automático de sintaxis similar a VIM de las listas de programas.
0,97

13 de febrero de 2004
Otro borrador completamente reescrito, en DocBook XML (nuevamente). El libro ha mejorado mucho, es más
coherente y legible.
0,93

25 de enero de 2004
Se agregó la conversación IDLE y más cosas específicas de Windows
0,92

05 de enero de 2004
Cambios en algunos ejemplos.
0,91

30 de diciembre de 2003

1
Apéndice: Historial de
Errores tipográficos corregidos. Improvisó muchos temas.

1
Apéndice: Historial de

0,90

18 de diciembre de 2003
Añadidos 2 capítulos más. Oficina abierta formato con revisiones.
0,60

21 de noviembre de 2003
Completamente reescrito y ampliado.
0,20

20 de noviembre de 2003
Se corrigieron algunos errores tipográficos y errores.
0,15

20 de noviembre de 2003
Convertido a DocBook XML con XEmacs.
0,10

14 de noviembre de 2003
Borrador inicial usando KPalabra.

1
Apéndice:

Traducciones
¡Hay muchas traducciones del libro disponibles en diferentes idiomas humanos, gracias a muchos voluntarios incansables!

Si desea ayudar con estas traducciones, consulte la lista de voluntarios e idiomas a continuación y decida si desea comenzar una
nueva traducción o ayudar en proyectos de traducción existentes.

Si planea comenzar una nueva traducción, lea el Traducción de cómo.

Arábica
A continuación se muestra el enlace para la versión árabe. Gracias a Ashraf Ali Khalaf por traducir el libro, puede leer el libro
completo en línea enhttp://www.khaledhosny.org/byte-of-python/index.html o puedes descargarlo desde sourceforge.net para más
información ver http://itwadi.com/byteofpython_arabi.

Azerbaiyano
Jahangir Shabiyev ( c.shabiev@gmail.com ) se ha ofrecido como voluntario para traducir el libro al azerí. La traducción está en
curso enhttps://www.gitbook.com/book/jahangir-sh/piton-sancmasi

Portugués Brasileño
Hay dos traducciones en varios niveles de finalización y accesibilidad. La traducción anterior ahora falta / se pierde, y la
traducción más nueva está incompleta.

Samuel Dias Neto ( samuel.arataca@gmail.com ) hizo la primera traducción al portugués brasileño (traducción anterior) de este
libro cuando Python estaba en la versión 2.3.5. Esto ya no es de acceso público.

Rodrigo Amaral ( rodrigoamaral@gmail.com ) se ha ofrecido como voluntario para traducir el libro al portugués brasileño,
(traducción más reciente) que aún está por completar.

catalán
Moises Gomez ( moisesgomezgiron@gmail.com ) se ha ofrecido como voluntario para traducir el libro al catalán. La traducción está
en curso.

Moisès Gómez - Soy desarrollador y también profesor de programación (normalmente para personas sin experiencia
previa).

Hace algún tiempo necesitaba aprender a programar en Python, y el trabajo de Swaroop fue realmente útil. Lo
suficientemente claro, conciso y completo. Justo lo que necesitaba.

Después de esta experiencia, pensé que otras personas de mi país también podrían beneficiarse de ella. Pero el idioma
inglés puede ser una barrera.

Entonces, ¿por qué no intentar traducirlo? Y lo hice para una versión anterior de BoP.

En mi país hay dos idiomas oficiales. Seleccioné el idioma catalán asumiendo que otros lo traducirían al español más
extendido.

chino
1
Apéndice:

En 2017, que es después de 11 años, Mo Lun ( i@molun.net ) volvió a traducir el libro desde el principio basado en la Versión 4.0.
Y la traducción se almacena en GitHub y Gitbook. Él sigue siguiendo esta edición traducida y listo para arreglarlo si hay algún
error o error en la base de datos traducida.

La edición de traducción de 2017 está disponible en

https://bop.molun.net. Mo Lun dice:

Soy un estudiante de periodismo común de CYU, Beijing. Y, de hecho, soy un novato absoluto en la programación de
Python cuando empiezo a traducir este libro. Inicialmente, fue solo un capricho, pero cuando hice este trabajo, me di
cuenta de que una decisión desencadenada por el interés me había impulsado a llegar tan lejos.

Con la ayuda de las traducciones de mis predecesores y la gran cantidad de información proporcionada por la Internet
desarrollada, y con la ayuda de mis amigos, presenté prudentemente esta edición de traducción. Solo espero que mi trabajo
de traducción ayude a otros recién llegados a aprender Python.

Al mismo tiempo, siempre estoy esperando mi traducción de los comentarios y sugerencias, y listo para cambiar o
mejorar este trabajo superficial.

Traducción al chino anterior


En 2005, Shen Jieyuan tradujo este libro con la versión 1.20 al chino y lo publicó en Internet. Ésta es la primera edición china. En
el sitio oficial de BoP, se llamaba Juan Shen, con adders de correo electrónico.orion_ val@163.com Este La edición se ha
difundido ampliamente en la red y los enlaces proporcionados por el sitio oficial de la BoP ya no están disponibles, por lo que su
fuente original no se puede encontrar. Por lo tanto, aquí no puedo proporcionar una dirección determinada. Pero puede intentar
buscar palabras clave como "Python" para encontrar una copia.

Juan Shen dice:

Soy un posgrado en Wireless Telecommunication Graduate School, Beijing University of Technology, China PR. Mi
interés de investigación actual se centra en la sincronización, la estimación de canales y la detección de múltiples usuarios
del sistema CDMA de múltiples portadoras. Python es mi principal lenguaje de programación para el trabajo diario de
simulación e investigación, con la ayuda de Python Numeric, en realidad. Aprendí Python solo medio año antes, pero
como puede ver, es realmente fácil de entender, fácil de usar y productivo. Al igual que lo que se asegura en el libro de
Swaroop, 'Es mi lenguaje de programación favorito ahora'.

'A Byte of Python' es mi tutorial para aprender Python. Es claro y efectivo para llevarlo a un mundo de Python en el menor
tiempo posible. No es demasiado largo, pero cubre de manera eficiente casi todas las cosas importantes en Python. Creo
que 'A Byte of Python' debería ser muy recomendable para los principiantes como su primer tutorial de Python. Solo
dedico mi traducción a los millones potenciales de usuarios de Python en China.

Chino tradicional
Fred Lin ( gasolin@gmail.com ) se ha ofrecido como voluntario para traducir el libro al

chino tradicional. Está disponible enhttp://code.google.com/p/zhpy/wiki/ByteOfZhpy.

Una característica interesante de esta traducción es que también contiene las fuentes de Python chino ejecutables junto con las
fuentes de Python originales.

Fred Lin: trabajo como ingeniero de firmware de red en Delta Network y también soy colaborador del marco web
TurboGears.

Como evangelista de Python (:-p), necesito material para promover el lenguaje Python. Descubrí que 'A Byte of Python'
llegó al punto ideal tanto para los programadores novatos como para los experimentados. 'A Byte of Python' elabora los
elementos esenciales de Python con un tamaño asequible.

La traducción se basó originalmente en la versión china simplificada, y pronto se hicieron muchas reescrituras para

1
Apéndice:
adaptarse a la versión actual de la wiki y la calidad de lectura.

1
Apéndice:

La versión tradicional china reciente también incluía fuentes ejecutables de python chino, que se logran con mi nuevo
proyecto 'zhpy' (python en chino) (lanzamiento desde el 07 de agosto).

zhpy (pronunciar (ZH ?, o zippy) construye una capa sobre python para traducir o interactuar con python en chino (tradicional o
simplificado). Este proyecto está dirigido principalmente a la educación.

francés
Gregory ( coulix@ozforces.com.au ) se ha ofrecido como voluntario para traducir el libro al francés.

Gérard Labadie ( gerard.labadie@gmail.com ) ha terminado de traducir el libro al francés.

Esta traducción fue luego trasladada al formato de rebajas, actualizada para que coincida con la última versión del libro y
publicada en GitBook por Romain Gilliotte ( rgilliotte@gmail.com ).

Se puede encontrar en https://rgilliotte.gitbook.io/byte-of-python/

alemán
Lutz Horn (lutz.h orn@gmx.de ), Bernd Hengelein ( bernd.hengelein@gmail.com ) y Christoph Zwerschke ( cito@online.de ) se han
ofrecido como voluntarios para traducir el libro al alemán.

La traducción se puede encontrar en

http://cito.github.io/byte_of_python/ Lutz Horn dice:

Tengo 32 años y soy licenciado en Matemáticas por la Universidad de Heidelberg, Alemania. Actualmente trabajo como
ingeniero de software en un proyecto financiado con fondos públicos para construir un portal web para todo lo relacionado
con la informática en Alemania. El idioma principal que uso como profesional es Java, pero trato de hacer todo lo posible
con Python detrás de escena. Especialmente el análisis y la conversión de texto son muy fáciles con Python. No estoy muy
familiarizado con los kits de herramientas de GUI, ya que la mayor parte de mi programación se trata de aplicaciones web,
donde la interfaz de usuario se construye utilizando marcos de Java como Struts. Actualmente trato de hacer más uso de las
características de programación funcional de Python y de los generadores. Después de echar un vistazo a Ruby, quedé muy
impresionado con el uso de bloques en este lenguaje. Generalmente me gusta la naturaleza dinámica de lenguajes como
Python y Ruby, ya que me permite hacer cosas que no son posibles en lenguajes más estáticos como Java. He buscado algún
tipo de introducción a la programación, adecuada para enseñar a un completo no programador. Encontré el libro "Cómo
pensar como un informático: aprender con Python" y "Sumérgete en Python". La primera es buena para principiantes, pero
anhela traducirla. El segundo no es apto para principiantes. Creo que 'A Byte of Python' se ubica muy bien entre estos, ya
que no es demasiado largo, está escrito al grano y, al mismo tiempo, es lo suficientemente detallado como para enseñarle a
un novato. Además de esto, me gusta la estructura simple de DocBook, que hace que traducir el texto de una generación a la
salida en varios formatos sea un encanto. La primera es buena para principiantes, pero anhela traducirla. El segundo no es
apto para principiantes. Creo que 'A Byte of Python' se ubica muy bien entre estos, ya que no es demasiado largo, está escrito
al grano y, al mismo tiempo, es lo suficientemente detallado como para enseñarle a un novato. Además de esto, me gusta la
estructura simple de DocBook, que hace que traducir el texto de una generación a la salida en varios formatos sea un
encanto. La primera es buena para principiantes, pero anhela traducirla. El segundo no es apto para principiantes. Creo que
'A Byte of Python' se ubica muy bien entre estos, ya que no es demasiado largo, está escrito al grano y, al mismo tiempo, es
lo suficientemente detallado como para enseñarle a un novato. Además de esto, me gusta la estructura simple de DocBook,
que hace que traducir el texto de una generación a la salida en varios formatos sea un encanto.

Bernd Hengelein dice:

Lutz y yo haremos la traducción al alemán juntos. Acabamos de comenzar con la introducción y el prefacio, pero lo
mantendremos informado sobre el progreso que logremos. Ok, ahora algunas cosas personales sobre mí. Tengo 34 años y
juego con las computadoras desde la década de 1980, cuando el "Commodore C64" dominaba las guarderías. Después de
estudiar informática, comencé a trabajar como ingeniero de software. Actualmente trabajo en el campo de la imagenología

1
Apéndice:
médica para una importante empresa alemana. Aunque C ++ es el lenguaje principal que (tengo que) usar para mi trabajo
diario, estoy constantemente buscando cosas nuevas que aprender. El año pasado me enamoré de Python, que es un
lenguaje maravilloso, tanto por sus posibilidades como por su belleza. Leí en algún lugar de la red acerca de un tipo que
dijo que le gusta Python, porque el código se ve muy hermoso. En mi opinión, tiene toda la razón. En el momento en que
decidí aprender Python, noté que hay muy poca documentación buena disponible en alemán. Cuando encontré su libro, la
idea espontánea de una traducción al alemán cruzó por mi mente. Afortunadamente, Lutz tuvo la misma idea y ahora
podemos dividir el trabajo. ¡Espero una buena cooperación!

1
Apéndice:

griego
El Ubuntu C griegoomunidad transdecía el libro en griego, para usar en nuestras lecciones de Python asincrónicas en línea que
tienen lugar en nuestros foros. Contacto@savvasradevic para más información.

indonesio
Daniel ( daniel.mirror@gmail.com ) está traduciendo el libro al indonesio

enhttp://python.or.id/moin.cgi/ByteofPython.Wisnu Priyambodo ( cibermen@gmail.com ) también se ha ofrecido

como voluntario para traducir el libro al indonesio.

Además, Bagus Aji Santoso ( baguzzzaji@gmail.com ) se ha ofrecido como voluntario.

Italiano (primero)
Enrico Morelli ( mr.mlucci@gmail.com ) y Massimo Lucci ( morelli@cerm.unifi.it ) se han ofrecido como voluntarios para
traducir el libro al italiano.

La traducción italiana está presente en http://www.gentoo.it/Programmazione/byteofpython.

Massimo Lucci y Enrico Morelli - estamos trabajando en la Universidad de Florencia (Italia) - Departamento de Química.
Yo (Massimo) como ingeniero de servicio y administrador de sistemas para espectrómetros de resonancia magnética
nuclear; Enrico como ingeniero de servicio y administrador de sistemas para nuestros sistemas CED y en paralelo / en
clúster. Estamos programando en Python desde hace unos siete años, teníamos experiencia trabajando con plataformas
Linux desde hace diez años. En Italia somos responsables y administradores dewww.gentoo.it sitio web para la distribución
de Gentoo / Linux y www.nmr.it (ahora en construcción) para aplicaciones de Resonancia Magnética Nuclear y
Organización y Gestión de Congresos. ¡Eso es todo! Estamos impresionados por el lenguaje inteligente utilizado en su libro
y creemos que esto es esencial para acercar Python a nuevos usuarios (estamos pensando en cientos de estudiantes e
investigadores trabajando en nuestros laboratorios).

Italiano (segundo)
Una traducción al italiano ha sido creada por Calvina Bice y colegas en http://besthcgdropswebsite.com/translate/a-byte-of-
pitón/.

japonés
Shunro Dozono ( dozono@gmail.com ) está traduciendo el libro al japonés.

coreano

Epsimatt (2019)
Epsimatt ha comenzado una nueva traducción al coreano:

Leer en línea en https: //epsimatt.gitbook.io/byte-of-python/


Siga el progreso en https://github.com/epsimatt/byte-of-python/issues/16

Mayor

1
Apéndice:
Jeongbin Park ( pjb7687@gmail.com ) ha traducido el libro al coreano -https://github.com/pjb7687/byte_of_python

1
Apéndice:

Soy Jeongbin Park, y actualmente trabajo como investigador de Biofísica y Bioinformática en Corea.

Hace un año, estaba buscando un buen tutorial / guía para Python para presentárselo a mis colegas, porque el uso de Python
en tales campos de investigación se está volviendo inevitable debido a que la base de usuarios crece cada vez más.

Pero en ese momento, solo unos pocos libros de Python están disponibles en coreano, así que decidí traducir su libro
electrónico porque parece una de las mejores guías que he leído.

Actualmente, el libro está casi completamente traducido al coreano, excepto parte del texto del capítulo de introducción y
los apéndices.

¡Gracias de nuevo por escribir una guía tan buena!

mongol
Ariunsanaa Tunjin ( luftballons2010@gmail.com ) se ha ofrecido como voluntario para traducir el libro al mongol.

Actualización el 22 de noviembre de 2009 : Ariunsanaa está a punto de completar la traducción.

Noruego (bokmål)
Eirik Vågeskar es un estudiante de secundaria en Sandvika videregående skole en Noruega, un blogger y actualmente traduce el libro
al noruego (bokmål).

Eirik Vågeskar: Siempre quise programar, pero como hablo un idioma pequeño, el proceso de aprendizaje fue mucho más
difícil. La mayoría de los tutoriales y libros están escritos en un inglés muy técnico, por lo que la mayoría de los graduados
de secundaria ni siquiera tendrán el vocabulario para comprender de qué se trata el tutorial. Cuando descubrí este libro,
todos mis problemas se resolvieron. "A Byte of Python" utilizó un lenguaje simple no técnico para explicar un lenguaje de
programación que es igual de simple, y estas dos cosas hacen que aprender Python sea divertido. Después de leer la mitad
del libro, decidí que valía la pena traducirlo. Espero que la traducción ayude a las personas que se han encontrado en la
misma situación que yo (especialmente a los jóvenes), y tal vez ayude a difundir el interés por el idioma entre las personas
con menos conocimientos técnicos.

polaco
Dominik Kozaczko ( dominik@kozaczko.info ) se ha ofrecido como voluntario para traducir el libro al polaco. La traducción
está en curso y su página principal está disponible aquí:Ukąś Pythona.

Actualizar : La traducción está completa y lista a partir del 2 de octubre de 2009. ¡Gracias a Dominik, sus dos estudiantes y su
amigo por su tiempo y esfuerzo!

Dominik Kozaczko - Soy profesor de Informática y Tecnología de la Información.

portugués
Artur Weber ( arturweberguimaraes@gmail.com ) ha completado una traducción de este libro al portugués (al 21 de febrero de 2018)
enhttps: //www.homeyou.com/~edu/introducao.

Artur Weber: Mis alumnos estudian en la Facultad Politécnica de la Universidad Ecológica de la ciudad de Curitiba
(Brasil) y algunos de ellos están interesados en diferentes trabajos.

Mientras escriben trabajos académicos y de cursos, siempre buscan artículos y páginas interesantes. También hago todo lo
posible para encontrar materiales interesantes que puedan ser la fuente de sus trabajos universitarios.

1
Apéndice:

Encontré los materiales de su sitio útiles para algunos de mis estudiantes que están escribiendo artículos basados en la
programación en Python. En realidad, es por eso que tomé la decisión de realizar una traducción al portugués para que mis
estudiantes que no saben inglés lean artículos interesantes en su lengua materna (en portugués).

rumano
Paul-Sebastian Manole ( breaknthorn@gmail.com ) se ha ofrecido como voluntario para traducir este libro al rumano.

Paul-Sebastian Manole - Soy estudiante de segundo año de Ciencias de la Computación en la Universidad Spiru Haret,
aquí en Rumania. Soy más un programador autodidacta y decidí aprender un nuevo idioma, Python. La web me dijo que
no había mejor manera de hacerlo que leer "Un byte de Python". Así de popular es este libro (felicitaciones al autor por
escribir un libro tan fácil de leer). Comencé a gustarme Python, así que decidí ayudar a traducir la última versión del libro
de Swaroop al rumano. Aunque yo podría ser el que tenga la primera iniciativa, solo soy un voluntario, así que si puedes
ayudar, únete a mí.

ruso
Vladimir Smolyar ( v_2e@ukr.net ) ha completado una traducción al ruso enhttp://wombat.org.ua/AByteOfPython/.

Ucraniano
Averkiev Andrey ( averkiyev@ukr.net ) se ha ofrecido como voluntario para traducir el libro al ruso, y quizás al ucraniano (si el
tiempo lo permite).

serbio
"BugSpice" ( amortizerka@gmail.com ) ha completado una traducción al

Serbio:Este enlace de descarga ya no es accesible.

Más detalles en http://forum.ubuntu-rs.org/Thread-zagrljaj-pitona.

eslovaco
Albertio Ward ( albertioward@gmail.com ) ha traducido el libro al eslovaco enhttp://www.fatcow.com/edu/python-swaroopch-sl/
:

Somos una organización sin fines de lucro llamada "Traducción para la educación". Representamos a un grupo de
personas, principalmente estudiantes y profesores, de la Universidad Eslava. Aquí hay estudiantes de diferentes
departamentos: lingüística, química, biología, etc. Intentamos encontrar publicaciones interesantes en Internet que puedan
ser relevantes para nosotros y nuestros compañeros de la universidad. A veces encontramos artículos por nosotros mismos;
otras veces nuestros profesores nos ayudan a elegir el material a traducir. Después de obtener el permiso de los autores,
traducimos los artículos y los publicamos en nuestro blog, que está disponible y accesible para nuestros colegas y amigos.
Estas publicaciones traducidas a menudo ayudan a los estudiantes en su rutina diaria de estudio.

Español
Alfonso de la Guarda Reyes ( alfonsodg@ictechperu.net ), Gustavo Echeverría ( gustavo.echeverria@gmail.com ), David
Crespo Arroyo ( davidcrespoarroyo@hotmail.com ) y Cristian Bermudez Serna ( crisbermud@hotmail.com ) se han ofrecido
como voluntarios para traducir el libro al español.

1
Apéndice:
Gustavo Echeverria dice:

1
Apéndice:

Trabajo como ingeniero de software en Argentina. Utilizo principalmente tecnologías C # y .Net en el trabajo, pero
estrictamente Python o Ruby en mis proyectos personales. Conocí Python hace muchos años y me quedé atascado de
inmediato. No mucho después de conocer Python descubrí este libro y me ayudó a aprender el idioma. Luego me ofrecí
para traducir el libro al español. Ahora, después de recibir algunas solicitudes, comencé a traducir "Un byte de Python"
con la ayuda de Maximiliano Soler.

Cristian Bermudez Serna dice:

Soy estudiante de Ingeniería de Telecomunicaciones en la Universidad de Antioquia (Colombia). Hace meses, comencé a
aprender Python y encontré este maravilloso libro, así que me ofrecí como voluntario para obtener la traducción al español.

sueco
Mikael Jacobsson ( leochingkwake@gmail.com ) se ha ofrecido como voluntario para traducir el libro al sueco.

turco
Türker SEZER ( tsezer@btturk.net ) y Bugra Cakir ( bugracakir@gmail.com ) se han ofrecido como voluntarios para traducir el libro
al turco. "¿Dónde está la versión turca? Bitse de okusak".

1
Apéndice: Procedimientos

Instrucciones de traducción
1. La fuente completa del libro está disponible en https://github.com/swaroopch/byte-of-python.
2. Por favor bifurcar el repositorio.
3. Luego, busque el repositorio en su computadora. Necesitas saber cómo usarGit Para hacer eso.
4. Leer el Documentación de Honkit, esp. laSección de rebajas.
5. Empiece a editar el .Maryland archivos para traducir a su idioma local.
6. Ver INSTALL.md sobre cómo generar el sitio web, PDF, EPUB.

1
Realim

Realimentación
El libro necesita la ayuda de sus lectores, como ustedes, para señalar cualquier parte del libro que no sea buena, comprensible o
simplemente incorrecta. Por favorescribir al autor principal o el respectivo traductores con sus comentarios y sugerencias.

También podría gustarte