Después de descubrir en qué entorno puede crear y ejecutar programas en Python, puede comenzar a aprender los conceptos básicos de este lenguaje. Lo más interesante es que los primeros programas simples pueden escribirse sin conocimiento de construcciones complejas y cuerpo del programa (como en Pascal). En esta lección nos familiarizaremos con las operaciones de entrada-salida en Python, así como con la salida rápida de operaciones aritméticas en la pantalla de la computadora.
Para saber qué sucede como resultado de las acciones que realiza en el programa, debe mostrar esto de alguna manera. La forma más simple y básica de generar datos desde el programa es el resultado antiguo y bueno del resultado en la pantalla, directamente desde la línea de comandos de Shell del entorno de desarrollo IDLE.
Para mostrar valores en la pantalla, Python tiene una función print (). Dentro de los paréntesis, separados por comas, escriba lo que desea generar.
Formateo de salida conveniente
Por el momento, hemos descubierto dos formas de generar valores: expresiones de operador (declaraciones de expresión) y la función print (). (La tercera forma es utilizar el método write () de los objetos de archivo; puede referirse al archivo de salida estándar como sys.stdout. Para obtener más información sobre este elemento, consulte la Referencia de la biblioteca).
A menudo existe el deseo de tener más control sobre el formato de la salida que la impresión habitual de valores separados por espacios. Hay dos formas de formatear su salida. La primera forma es hacer todo el trabajo en las líneas usted mismo: usando cortes de línea y concatenación, puede crear cualquier plantilla que desee. El módulo de cadena estándar contiene muchas operaciones útiles para alinear cadenas a un ancho de columna específico (las revisaremos brevemente pronto). La segunda forma es usar el método str.format ().
El módulo de cadena contiene la clase Plantilla, que proporciona otra forma de sustituir valores en cadenas.
Queda una pregunta, por supuesto: ¿cómo convertir valores en cadenas? Afortunadamente, en Python hay dos formas de convertir cualquier valor en una cadena: estas son las funciones repr () y str ().
El propósito de la función str () es devolver valores en una forma bastante legible, a diferencia de repr (), cuyo propósito es generar formularios que puedan ser leídos por el intérprete (o causar SyntaxError si no hay una sintaxis equivalente). Para aquellos objetos que no tienen una forma legible por humanos, la función str () devolverá el mismo valor que repr (). Muchos valores, como números o estructuras, como listas y diccionarios, tienen la misma forma para ambas funciones. Las cadenas y los números de coma flotante, en particular, tienen dos formas diferentes.
Aquí hay dos formas de mostrar una tabla de cuadrados y cubos:
(Tenga en cuenta que en el primer ejemplo, la función print () agrega espacios individuales entre columnas: siempre inserta espacios entre sus parámetros)
Este ejemplo demuestra la operación del método de objeto de cadena rjust (), que alinea la cadena a la derecha en el campo de ancho pasado, retrocediendo con espacios a la izquierda. Métodos similares están disponibles para ljust () y center (). Estos métodos no imprimen nada, solo devuelven una nueva línea. Si la línea de entrada es demasiado larga, entonces no la truncan, que generalmente es el menor de los males. (Para truncar, puede agregar una operación de división, por ejemplo: x.ljust (n) [: n].)
Hay otro método: zfill (), que llena con ceros el espacio a la izquierda de la recta numérica. Reconoce los signos más y menos:
La forma principal de usar el método str.format () es la siguiente:
Paréntesis con caracteres dentro (se llaman campos de formato (campos de formato)) se reemplazan con objetos pasados al método de formato. El número entre paréntesis indica la posición del objeto en la lista de parámetros pasados al método de formato.
Si el método de formato utiliza parámetros con nombre, puede hacer referencia a sus valores utilizando el nombre del argumento correspondiente.
Los parámetros posicionales y con nombre se pueden combinar arbitrariamente:
Un especificador de formato ":" opcional puede seguir un nombre de campo. Úselo para controlar el formato de un valor. El siguiente ejemplo deja a Pi solo tres dígitos después del separador decimal.
Después del especificador ":", puede especificar un número: el ancho mínimo del campo, expresado en número de caracteres. Es conveniente usarlo para crear hermosas tablas:
Si su cadena de formato es muy larga y no desea dividirla en subcadenas, sería bueno que se refiriera a las variables destinadas a formatear, no por posición, sino por nombre. Esto se puede hacer simplemente pasando el diccionario y usando corchetes ‘[]"Para acceder a las claves.
Lo mismo se puede hacer pasando un diccionario de parámetros con nombre usando la notación "**":
En particular, esta técnica es conveniente de usar en combinación con la función incorporada vars (), que devuelve un diccionario con variables locales.
Una descripción detallada de las cadenas de formato utilizando el método str.format () se describe en la sección Sintaxis de sintaxis de cadenas de formato.
Salida de pantalla
Supongamos que tenemos una variable con algún valor y queremos mostrarla en la pantalla. Por esto en Pitón hay una función print (). Dentro de los paréntesis ponemos el nombre de nuestra variable o algunos caracteres. Si simplemente ingresa un dígito como variable numérica, el intérprete jurará.
Cada vez que se activa una función print () cierta información se mostrará en la pantalla, en este caso la misma. Despues print () Impreso todo lo que se le dijo, sangrará la siguiente línea. Para evitar que esto suceda, debe agregar algo ...
Entre comillas, puede, en principio, escribir lo que su corazón desee.
Formatear cadenas al viejo estilo
Puede usar la operación% para formatear cadenas. Interpreta el operando izquierdo como una cadena de formato de estilo sprintf que debe aplicarse al operando derecho y devuelve la cadena resultante de esta conversión. Por ejemplo:
Debido a que el método str.format () es bastante nuevo, la mayoría del código fuente de Python todavía usa la operación%. Sin embargo, con el tiempo, el formato de línea se eliminará del idioma, por lo que str.format () debe usarse en la mayoría de los casos.
Se puede encontrar más información en la sección Formateo de operaciones de formateo de cadenas en el estilo antiguo.
Entrada del usuario
Recuerde, todo lo que el usuario ingresó es una variable de caracteres, incluso si ingresó solo un número.
Si necesitamos que el usuario ingrese un número para alguna acción adicional con él como número (para operaciones matemáticas, por ejemplo), entonces debemos hacer el siguiente truco: convertir el resultado de la cadena en numérico.
Primero, el usuario ingresa datos, luego ingresa y presiona Entrar, la información de cadena ingresada por él se convierte a un formato de número. La función nos ayuda en esto. int (). Convierte cualquier dato a un formato entero numérico. Pero, si decide convertir algunos caracteres a un formato numérico, el intérprete le dará un error.
¡Las letras no son números!
De una manera tan simple, nos familiarizamos con "Entrada y salida en lenguaje Pitón«
Escribir y leer archivos
La función open () devuelve un objeto de archivo y en la mayoría de los casos se usa con dos argumentos: open (nombre_archivo, modo) .
El primer parámetro es una cadena que contiene el nombre del archivo. La segunda es otra línea que contiene varios caracteres que describen cómo usar el archivo. Valor del parámetro modo puede ser el símbolo 'r' si el archivo está abierto solo para lectura, 'w' está abierto solo para escritura (se borrará un archivo existente con el mismo nombre) y 'a' es el archivo abierto para agregar: cualquier dato escrito en el archivo automáticamente se agregan al final. 'r +' abre el archivo para leer y escribir. Parámetro modo opcional: si se omite, se supone que es igual a 'r'.
En el caso habitual, los archivos se abren en modo de texto (modo de texto): esto significa que está leyendo desde un archivo y escribiendo en cadenas de archivo con una codificación determinada (de forma predeterminada, se utiliza Utf-8) Si agrega символ b ’al modo de archivo, el archivo se abre en modo binario (modo binario): ahora los datos se leen y escriben como objetos binarios. Este modo debe usarse para todos los archivos que no contienen texto.
Cuando se utiliza el modo de texto, todas las terminaciones de línea, por defecto, específicas de la plataforma ( n en Unix, r n en Windows) se truncan al carácter n cuando se leen desde un archivo, y se vuelven a convertir de n a una vista específica para plataformas al escribir en un archivo. Estos cambios tras bambalinas en los datos de los archivos funcionan correctamente en el caso de los archivos de texto, pero dañarán los datos binarios en archivos como JPEG o EXE. Tenga cuidado de usar el modo binario al leer y escribir dichos archivos.
Métodos de objetos de archivo
Los siguientes ejemplos asumen que un objeto de archivo llamado f se crea de antemano.
Para leer el contenido de un archivo, llame a f.read (tamaño): la función lee una cierta cantidad de datos y la devuelve como una cadena o un objeto de byte. tamaño - parámetro numérico opcional. Si tamaño omitido o negativo, se leerá y devolverá todo el contenido del archivo, si el archivo es dos veces más grande que la RAM de su computadora, entonces la solución a este problema permanece en su conciencia. De lo contrario, se leerá y devolverá un máximo. tamaño byte Si se alcanza el final del archivo, f.read () devolverá una cadena vacía ().
f.readline () lee una línea del archivo, el carácter de nueva línea ( n) permanece al final de la línea leída y está ausente al leer la última línea del archivo solo si el archivo no termina con una línea vacía. Debido a esto, el valor de retorno se vuelve inequívoco: si f.readline () devuelve una línea vacía, se alcanza el final del archivo, al mismo tiempo, la línea vacía representada por ' n' contiene solo un carácter de nueva línea.
f.readlines () devuelve una lista que contiene todas las líneas de datos encontradas en el archivo. Si se pasa el parámetro opcional hint_size, la función lee el número especificado de bytes del archivo, más un cierto número de bytes además, suficiente para completar la línea, y forma una lista de líneas a partir del resultado. La función se usa a menudo para una lectura línea por línea más eficiente (el archivo no se carga completamente en la memoria) de archivos grandes. Solo se devolverán las filas completas (completadas).
Una lectura alternativa línea por línea es recorrer un objeto de archivo. Es rápido, eficiente en memoria y tiene como resultado un código simple:
Un método alternativo es más simple, pero no proporciona un control sutil sobre lo que está sucediendo. Dado que ambos métodos funcionan con el almacenamiento en línea de diferentes maneras, no deben mezclarse.
f.write (cuerda) escribe los contenidos cuerdas a un archivo y devuelve el número de bytes escritos.
Para escribir algo diferente de una cadena a un archivo, primero debe convertir algo a una cadena:
f.tell () devuelve un número entero que representa la posición actual en el archivo f, medido en bytes desde el comienzo del archivo. Para cambiar la posición de un objeto de archivo, use f.seek (desplazamiento, de donde) La posición se calcula agregando el desplazamiento al punto de referencia, el punto de referencia se selecciona del parámetro de donde . Valor del parámetro 0 de donde mide el desplazamiento desde el comienzo del archivo, un valor de 1 aplica la posición actual en el archivo y un valor de 2 usa el final del archivo como punto de referencia. Parámetro de donde puede omitirse y establecerse en 0 de forma predeterminada, utilizando el comienzo del archivo como punto de referencia.
Cuando se trabaja con archivos de texto (abiertos sin el carácter b en la línea de modo), la búsqueda se permite solo desde el comienzo del archivo (excepto para desplazarse hasta el final del archivo usando la búsqueda (0, 2)).
Cuando haya terminado todas las acciones en el archivo, llame a f.close () para cerrarlo y liberar todos los recursos del sistema utilizados para abrir este archivo. Todos los intentos de usar el objeto de archivo después de llamar a f.close () arrojarán una excepción.
Se considera una buena práctica utilizar la palabra clave with cuando se trabaja con objetos de archivo. La ventaja de este método es que el archivo siempre se cierra correctamente después de ejecutar el bloque, o si se produjo una excepción durante la ejecución. Además, el código resultante es mucho más corto que la forma equivalente con bloques intente - finalmente :
Los objetos de archivo tienen algunos métodos adicionales, como isatty () y truncate (), que no se usan con frecuencia; consulte la Referencia de la biblioteca para obtener una descripción más completa de los objetos de archivo.
Módulo Pickle
Las cadenas se pueden escribir y leer fácilmente desde un archivo. En el caso de los números, debe usar un poco más de esfuerzo: el método read () devuelve solo las líneas que tiene que pasar a una función como int (), que toma una cadena de la forma '123' y devuelve su valor numérico: 123. Sin embargo, si tiene la intención de preservar tipos de datos más complejos, como listas, diccionarios o instancias de clase, las cosas se vuelven un poco confusas.
En lugar de obligar al programador a escribir y depurar constantemente código para tipos de datos complejos, Python proporciona un módulo estándar llamado pickle. Este es un gran módulo que puede tomar cualquier objeto Python (¡incluso algunas formas de código Python!) Y convertirlo en una representación de cadena: este proceso se llama conservación (decapado) Restaurar un objeto desde su representación de cadena se llama desconservación (descoser): una línea que describe el objeto puede guardarse en un archivo, agregarse a algunos datos o enviarse a través de una conexión de red a una computadora remota.
Si tiene algún objeto x y un objeto de archivo f abierto para escribir en modo binario (modo binario, con el parámetro 'wb'), la forma más sencilla preservar un objeto requiere una sola línea de código:
Para volver a preservar el objeto, siempre que f sea el objeto del archivo abierto para lectura (también en modo binario, con el parámetro 'rb'):
(Hay opciones para realizar estas operaciones que se aplican cuando desconservación múltiples objetos o cuando necesita grabar enlatado datos a un archivo, consulte la documentación del módulo de pickle en la Referencia de la biblioteca).
pickle es una forma estándar de crear objetos Python que pueden ser reutilizados por otros programas o versiones futuras del mismo programa, para ellos existe un término técnico: objeto estable (objeto persistente) Debido a que pickle se usa con frecuencia, muchos autores de extensiones de Python se aseguran de que los nuevos tipos de datos, como las matrices, puedan ser correctamente enlatado y mothballed.
Editor, autor: Fred L. Drake Jr. (Fred L. Drake, Jr.) y otros
colecciones
Python tiene tipos de datos integrados geniales, pero a veces no se comportan exactamente como les gustaría.
Afortunadamente, la biblioteca incorporada de Python tiene un módulo de colecciones con tipos de datos adicionales convenientes:
¿Alguna vez se preguntó cómo mirar dentro de un objeto en Python y mirar sus atributos? Por supuesto, pensaron.
1 de agosto a las 10:00, en línea, gratis
Use la línea de comando:
Esto puede ser útil durante una sesión interactiva en Python, así como para el estudio dinámico de objetos y módulos con los que trabajas.
$ pip instalar emoji
Y no finjas que no quieres probar:
de __future__ import
Una de las consecuencias de la popularidad de Python es que constantemente se desarrollan y lanzan nuevas versiones. Nuevas versiones: nuevas funciones, pero no para ti si las usas desactualizadas.
Sin embargo, no todo es tan malo. El módulo __future__ permite importar la funcionalidad de futuras versiones de Python. Es como viajar en el tiempo o magia:
Puede ser difícil para los programadores navegar en geografía. Sin embargo, el módulo geopy simplifica las cosas:
$ pip install geopy
Funciona abstrayendo las API de diferentes servicios de geocodificación. Este módulo permite conocer la dirección completa del lugar, su longitud, latitud e incluso altura.
También tiene una útil clase de distancia. Calcula la distancia entre dos lugares en una unidad de medida conveniente.
¿Estás colgado de un problema y no puedes recordar su solución? ¿Necesitas ir a StackOverflow, pero no quieres salir de la terminal?
Entonces no puede prescindir de esta herramienta de línea de comandos:
$ pip install howdoi
Haga cualquier pregunta e intentará encontrar la respuesta:
Pero tenga cuidado: extrae el código de las respuestas principales en StackOverflow y no siempre proporciona información útil:
$ howdoi salir vim
El módulo de inspección es útil para comprender lo que sucede detrás de escena en Python. ¡Incluso puedes invocar sus métodos tú mismo!
Lo siguiente utiliza el método inspect.getsource () para generar su propio código fuente. El método inspect.getmodule () también se usa para generar el módulo en el que está definido.
El último comando muestra el número de línea en el que se encuentra:
Por supuesto, además de estos usos triviales, este módulo puede ser útil para comprender lo que hace su código. También puede usarlo para escribir código autodocumentado.
La biblioteca Jedi está diseñada para completar y analizar códigos. Acelera el proceso de escribir código y lo hace más productivo.
Si no está desarrollando su IDE, entonces probablemente le interesará más usar Jedi como una extensión del editor. Afortunadamente, ya hay muchas opciones.
Возможно, вы уже встречались с Jedi — IPython использует эту библиотеку для автодополнения.
Когда изучаешь любой язык, на пути встречается множество краеугольных камней. В случае с Python понимание таинственного синтаксиса **kwargs можно считать одним из них.
Две звёздочки впереди объекта словаря дают возможность передавать в функцию содержимое этого словаря как именованные аргументы.
Ключи словаря — это имена аргументов, а значения передаются в функцию. Вам даже не обязательно называть его kwargs :
Это полезно в тех случаях, когда ваши функции должны обрабатывать именованные аргументы, не определённые заранее.
Прим.перев. También puede ser útil al escribir funciones de contenedor que pasan todos los argumentos a otra función.
Lista de generadores
Otra característica genial de Python que hace que las listas sean rápidas de crear. Tales expresiones facilitan la escritura de código limpio que se lee casi como un lenguaje natural:
Python tiene un buen soporte incorporado para la programación funcional. Una de las características más útiles es la función map (), especialmente en combinación con funciones lambda:
Aquí map () aplica una función lambda simple en cada elemento x y devuelve un objeto de mapa que se puede convertir en algún objeto iterable como una lista o tupla.
periódico3k
Si aún no lo ha conocido, prepárese para que el módulo de periódico lo sorprenda.
Permite extraer artículos y metadatos relacionados de muchas fuentes diferentes. Puede extraer imágenes, texto y nombres de autores.
Incluso tiene una funcionalidad NLP incorporada.
Por lo tanto, si iba a utilizar BeautifulSoup u otra biblioteca para el raspado web en su próximo proyecto, es mejor ahorrar tiempo y esfuerzo e instalar el periódico:
$ pip instalar periódico3k
Sobrecarga del operador
Python tiene soporte para la sobrecarga del operador, una de esas cosas de las que están hablando todos los científicos informáticos reales.
De hecho, la idea es simple. ¿Alguna vez se preguntó por qué Python le permite usar el operador + tanto para agregar números como para concatenar cadenas? Detrás de esto está solo la sobrecarga del operador.
Puede definir objetos que usen caracteres de operador estándar de cualquier manera. Esto le permite aplicarlos en el contexto de los objetos con los que trabaja:
La función estándar de Python print () hace el truco. Pero si intenta mostrar algún objeto anidado grande, el resultado no se verá muy bien.
El módulo de la biblioteca estándar de pprint (impresión bonita) viene al rescate aquí. Al usarlo, puede mostrar objetos con una estructura compleja en una forma legible.
Imprescindible para cualquier desarrollador de Python que trabaje con estructuras de datos personalizadas:
Python admite subprocesos múltiples, que el módulo estándar de cola ayuda a usar.
Le permite implementar una estructura de datos como una cola. Las colas le permiten agregar y recuperar elementos de acuerdo con una regla específica.
Las colas FIFO "primero en entrar, primero en salir" le permiten recuperar objetos en el orden en que se agregaron. Desde las colas "último en entrar, primero en salir" ("último en entrar, primero en salir", LIFO), puede recuperar los últimos objetos agregados.
Finalmente, las colas de prioridad le permiten recuperar objetos de acuerdo con su orden de clasificación.
Aquí puede ver un ejemplo del uso de colas en la programación de Python multiproceso.
Al definir una clase u objeto, es útil agregar una forma "oficial" de representar el objeto como una cadena. Por ejemplo:
Esto simplifica enormemente la depuración. Aquí está todo lo que necesitas hacer:
Aprox. El método __repr __ () le permite definir una representación de cadena destinada al programador y conveniente de usar durante la depuración, y el método __str __ () le permite definir una representación de cadena fácil de usar que se puede mostrar en la interfaz del programa.
Python es un gran lenguaje de script. Pero a veces las bibliotecas estándar de subprocesos y sistemas operativos solo causan dolores de cabeza.
La biblioteca sh puede ser una buena alternativa.
Le permite llamar a cualquier programa como una función regular, lo cual es útil para automatizar varias tareas exclusivamente usando Python:
Aprox. La biblioteca sh solo admite plataformas Linux y macOS; para trabajar en Windows debe buscar otra herramienta.
Anotaciones de tipo
Python es un lenguaje de tipo dinámico. No necesita especificar el tipo de datos al definir variables, funciones, clases, etc.
Esto acelera el proceso de desarrollo. Sin embargo, poco es tan molesto como un error de tiempo de ejecución causado por una simple falta de coincidencia de tipos.
Desde Python 3.5, puede agregar anotaciones de tipo al definir una función:
Incluso puede definir alias de tipo:
Aunque su uso es opcional, con la ayuda de anotaciones de tipo, el código puede hacerse más comprensible.
También le permiten utilizar herramientas de verificación de tipos para detectar errores de TypeError.
El módulo estándar uuid es una forma rápida y fácil de generar un UUID (identificador universalmente único).
Por lo tanto, creamos un número aleatorio de 128 bits que seguramente será único.
Hay más de 2¹²² posibles UUID. Esto es más de 5 undecillion o 5,000,000,000,000,000,000,000,000,000,000,000,000.
La probabilidad de encontrar duplicados en un conjunto dado es extremadamente pequeña. Incluso con un billón de UUID, la probabilidad de que haya un duplicado entre ellos es mucho menor que uno en mil millones.
No está mal para dos líneas de código.
Entornos virtuales
A menudo, los programadores de Python trabajan en varios proyectos a la vez. Desafortunadamente, a veces dos proyectos dependen de diferentes versiones de la misma dependencia. ¿Cuál instalar?
Afortunadamente, Python tiene soporte para entornos virtuales que aprovechan lo mejor de ambos mundos. En el símbolo del sistema, ingrese:
Ahora puede tener diferentes versiones independientes de Python en la misma máquina.
Wikipedia tiene una API genial que le permite acceder a una fuente inigualable de información completamente gratuita.
El módulo wikipedia hace que el acceso a esta API sea demasiado conveniente:
Al igual que un sitio real, el módulo proporciona soporte para muchos idiomas, resolviendo la ambigüedad de las páginas, obteniendo una página aleatoria e incluso el método donar ().
El humor es una característica clave de Python. Al final, el idioma lleva el nombre del espectáculo de comedia británica Flying Circus de Monty Python. En muchos lugares de documentación oficial puede encontrar referencias a los episodios más famosos del programa.
Por supuesto, el sentido del humor no termina con la documentación. Intenta ingresar la siguiente línea:
Quédate tú mismo, Python. Quédate tú mismo.
YAML significa "YAML no es un lenguaje de marcado" ("YAML no es un lenguaje de marcado"). Es un lenguaje de formato de datos que es un superconjunto de JSON.
A diferencia de JSON, YAML puede almacenar objetos más complejos y hacer referencia a sus propios elementos. También puede escribir comentarios allí, lo que hace que YAML sea adecuado para los archivos de configuración.
El módulo PyYAML le permite usar YAML en Python. Puedes instalarlo así:
$ pip install pyyaml
Y luego importar:
PyYAML le permite almacenar cualquier objeto Python e instancias de cualquier clase personalizada.
Finalmente, otra cosa genial. ¿Alguna vez tuvo la necesidad de crear un diccionario a partir de dos listas?
La función zip () incorporada toma varios objetos iterables y devuelve una secuencia de tuplas. Cada tupla agrupa los elementos de los objetos por su índice.
Puede realizar el inverso de zip () usando zip (*).
¿Y qué técnicas o bibliotecas útiles conoces? Comparte en los comentarios.
- 0, 0.0 ↩
- 0, 1.0 ↩
- 0, 1.0 ↩
- 0, -2.0 ↩
Cómo Yandex usa sus datos y el aprendizaje automático para personalizar los servicios: lea y vea YaC 2019.