Pin
Send
Share
Send


  • Traducciones, 6 de septiembre de 2018 a las 19:22
  • Nikita Priyatselyuk

Python es uno de los lenguajes de programación más populares y populares. Hay varias razones para esto:

  • Es facil de aprender.
  • Es muy versátil
  • Tiene muchos módulos y bibliotecas.

En el proceso de trabajar con Python, todos encuentran algunos módulos y trucos útiles. En esta colección aprenderás algunos trucos útiles.

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.

Escuela XYZ, Moscú, hasta 250 000 ₽

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.

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:

Geopy

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.

Howdoi

¿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

¿Debo continuar traduciendo lecciones de Python?

En general, como resultó recientemente, en YouTube ya hay videos expresados ​​de Bucky Roberts en la programación de Python3, aquí puede verlos en este enlace:

Anule la suscripción en el comentario si debo expresarlo más, incluso teniendo en cuenta que este material ya ha sido traducido. Gracias por su atención

Conceptos básicos Parte 1. Para bebés.

Se supone que la publicación http://pikabu.ru/story/hello_world_4265035 ya se ha leído, o tiene alguna distribución de Linux.

Se supone que la audiencia estará interesada, y si ese es el caso, escribiré algunas publicaciones más sobre python para familiarizarme con la sintaxis, las estructuras de datos estándar, algunas bibliotecas estándar, para continuar con el desarrollo en Django.

Se supone que la audiencia no consiste en amebas vegetales, sino personas desarrolladas que están listas para usar su caja de calaveras no solo para comer.

Para empezar, atraer. Puede escribir mucho sobre lo genial que es Python, lo que se usa para bigdata, datasaens, desarrollo web y todo lo demás. Pero estas son todas palabras secas. Por lo tanto, daré un par de ejemplos de dónde se usa Python como idioma principal.

Instagram: el alojamiento favorito de todos para fotos de comida y putos trenes tontos. Sí, está escrito en python. Además, Django se toma para el marco, al que rastrearemos si hay personas que quieren gatear además de mí. Además, tomaron el servidor HTTP Gunicorn, al que también rastreamos. Como base de datos, usan PostgreSQL, mi RDBMS favorito y es por eso que nosotros también podemos rastrearlo.

Reddit es un servicio de risa divertido, creo que todos lo han escuchado de todos modos. También está escrito en python, pero en el marco Pyramid, no en Django. Se utilizan dos bases de datos como base de datos: Cassandra y PostgreSQL. Memcached y Facebook mcrouter se usan como caché. Como agente de mensajes, se utiliza RabbitMQ.El código fuente está disponible públicamente aquí https://github.com/reddit/reddit

exchange.livejournal.com - Intercambio de bloggers de LiveJournal, que se ha abierto recientemente. ¿Por qué está ella aquí? Porque participé en su desarrollo. También está escrito en Django con la base de datos PostgreSQL.

En este señuelo termina y comienza mi parte no amada: bucles, ramas y variables.

Todas las piezas de código serán capturas de pantalla del Cuaderno Jupyter, en primer lugar, porque es conveniente para mí escribir en él, y en segundo lugar, porque no hay nada para copiar el código de otra persona.

Python es un lenguaje con una fuerte tipificación dinámica. ¿Qué significa esto?

- Si desea agregar el número 5 con la cadena '7' - será regañado. Esto se llama mecanografía fuerte. No hay conversiones al tipo "más general".

- Si se almacenó un número en la variable x, esto no significa que no se le puede asignar una cadena. Esto es tipeo dinámico. El tipo de la variable, por supuesto, no necesita especificarse en ningún lado.

Una buena característica es la asignación paralela. El intercambio de valor también es compatible.

También hay una asignación múltiple que yo fuertemente No recomiendo usarlo sin pensar (esto se aplica a los tipos de datos no planos, de los que hablaremos más adelante):

Con variables, como, por ahora.

A diferencia de la sintaxis tipo C, no tenemos corchetes para resaltar bloques ni corchetes para resaltar una expresión condicional (de hecho, nada impide envolver la condición entre paréntesis). Los bloques se resaltan SOLAMENTE con sangrías. No hay interruptores, solo si, elif y demás. Creo que el siguiente ejemplo me explicará todo:

Y ahora una pequeña sorpresa. A pesar de que el lenguaje tiene una tipificación estricta, se admiten comparaciones entre algunos tipos de datos desiguales (int, float, Decimal). Por ejemplo, 5 == 5.0 devolverá True, aunque 5 es un número entero y 5.0 es una coma. Pero usarlo se considera mala forma.

Si hasta este día no conocía la palabra "iterador" y solo escribió ciclos por índices, como for (int i = 0, i

Para los bucles de índice regulares, hay un generador de rango. Sobre generadores demasiado tarde.

Las funciones en python se declaran de dos maneras:

Sin embargo, recomiendo utilizar el segundo método de AJUSTE ESTRICTO para definir las funciones ordinarias. Las funciones de Lambda (o funciones anónimas) son necesarias solo para pasarles un argumento a las funciones de orden superior.

Aquí, probablemente, surgieron dos preguntas de inmediato:

¿Cómo se puede pasar un argumento a otra función?

¿Qué es una función de orden superior?

Porque Python está orientado a objetos, por lo tanto, todo lo que contiene es un objeto. Y la función también. Un argumento para una función puede ser cualquier objeto, incluido y función:

Hay muchas cosas interesantes en este ejemplo:

1) Después de definir la función (def), puede ingresar la llamada docstring, que describe lo que hace la función. Al mismo tiempo, esta cadena de acoplamiento se almacena en el atributo __doc__ del objeto de función (que solo una vez más indica que la función es un objeto)

2) El atributo __name__ contiene el nombre del objeto (función o clase)

3) h en este caso es una función de orden superior. Una función de orden superior es una función que acepta o devuelve otra función. Esto será útil para decoradores, sobre lo cual también más adelante.

Se pueden asignar funciones a otras variables:

Pero el nombre (__name__) seguirá siendo el mismo, porque de hecho, f y same_func solo se refieren a la función.

Incluso, al parecer, ya he vagado lejos. En la siguiente parte, si veo el interés de la audiencia, hablaré sobre las estructuras de datos estándar (listas, tuplas, diccionarios, conjuntos) y qué son y para qué se utilizan.

P.S. La publicación se escribió sin preparación, directamente al editor de publicaciones de picabu, escriba sobre todas las deficiencias en los comentarios, mezcle con zapatillas y tomates.

Para principiantes para aprender programación (Python)

Cabe señalar que Python es la mejor opción para un principiante que quiere comenzar a aprender programación. Sin embargo, este tema no es para una publicación. Y el estudio de la programación no debe basarse en un solo idioma, sino incluir varios componentes, pero esta publicación es para aquellos que saben lo que Python quiere aprender, pero no saben qué tipo de literatura elegir.

1.Michael Dawson - Programación en python

Vale la pena comenzar con este libro. Sin profundizar en el idioma, se consideran sus fundamentos.Todo el material está respaldado por muchos ejemplos, principalmente relacionados con temas de juegos. El capítulo está estructurado de esta manera: al principio, se da un programa que puede escribir de manera similar después de leer el capítulo, pero a medida que estudia, se encuentra con una serie de programas más simples que conducen a una comprensión del principal. Esto literalmente inunda el libro con ejemplos y proporciona la práctica necesaria para principiantes. Bueno, por supuesto, empuja a crear sus propios programas.

Un libro excelente, pero demasiado detallado para un principiante, vale la pena leerlo junto con la práctica. Algo así como: quería escribir un programa, pero carece de un conocimiento más profundo para hacerlo más conveniente / más corto / más hermoso, etc.

3.Mark Summerfield - Programación Python 3

Existe la misma dinámica que en el primer libro, no hay información innecesaria, pero es más complicada, no todo está tan masticado como el de Dawson. Vale la pena señalar que después de leer a Dawson, el desarrollo de este libro no es particularmente difícil.

4.Mark Lutz - Programación Python

El libro le enseña a aplicar los conocimientos adquiridos en "Learning Python 4th Edition", pero también está sobrecargado de información superflua para principiantes, que será mucho más fácil de percibir después de Dawson y Summerfield. Este libro es un final en el estudio inicial del idioma. Una vez dominado, puede pasar a un trabajo más profundo.

Espero que alguien ayude a esta selección. Disfruta leyendo y diviértete aprendiendo.

Yandex.Translator para Linux en la interfaz gráfica de Python

Hace mucho tiempo, se necesitaba un traductor multilingüe en línea con un navegador cerrado.

No, no desdeño usar el diccionario en casos "especialmente difíciles", pero a veces tengo que leer un texto bastante grande, y no todas las palabras sé cómo se pierde el contexto.

La cosa de Traducir-shell es bastante conveniente, especialmente si escribe, por ejemplo, en Vi / vim. Cambie a la siguiente consola y traduzca.

Las teclas son simples y fáciles de recordar.

Pero esto, como siempre, no fue suficiente. Yo quería gráficos.

Trabajar en SublimeText y Zeal es algo más conveniente que una consola simple.

Hmm ... Pensé, pensé, y decidí fijar el traductor a una tecla de acceso rápido.

La elección recayó en gxmessage. Zenity no me convenía, no recuerdo por qué.

El código fue escrito:

Me convino por un tiempo. Para "controlar + 1" del inglés, "controlar + 2" al inglés. Bueno

Pero entonces el traductor comenzó a fallar.

No sé qué pasó con los desarrolladores, pero realmente me molestó.

Decidí que es hora, no he escrito en Python durante mucho tiempo.

Una breve búsqueda en Google me llevó a Yandex.API, Python y GTK + 3 en forma de un módulo gi.

¿Por qué gi, porque normalmente escribías en PyQt5? Funciona mucho más rápido en mi auto. La máquina no es nueva, la memoria tampoco (según los estándares modernos) no está tan caliente.

Como resultado, tengo un traductor automático en una tecla de acceso rápido.

Gracias a todos por su atención.

Hola mundo

Escribí aquí sobre una biblioteca poderosa, simple e interesante que utilizo casi todos los días, pero de repente me di cuenta de que es mejor hacer la primera publicación solo para buscar datos, para aquellos que son completamente nuevos. :)

Por lo tanto, hoy hablaremos un poco sobre qué es Python y trataremos de obtenerlo en nuestra computadora.

Si ya programa en Python, entonces esta publicación claramente no es adecuada para usted. :) Es posible que no lo leas en absoluto, ¡sino que escribes el tuyo aquí sobre algo interesante de tu experiencia! Con preferencia y poetas, como se esperaba. ,)

Entonces, como nos dice una fuente confiable (Wikipedia), python (pronuncio Python, algunas personas de habla rusa dicen que Python) es un lenguaje de programación de propósito general destinado a mejorar la productividad del desarrollador y la legibilidad del código. En otras palabras, puede escribir rápidamente código en él y comprender lo que escribió un vecino.

A pesar de la aparente simplicidad de la definición, tiene un enorme potencial gracias al soporte de varios paradigmas de programación a la vez, una gran cantidad de funciones listas para usar (en la biblioteca estándar) y, por supuesto, extensibilidad, gracias a una gran cantidad de bibliotecas no estándar fácilmente instaladas.

¿Lo aplican en la práctica?

Por supuesto! ¡Python es un lenguaje muy común! Con él, puede crear sitios, procesar datos, trabajar con aprendizaje automático y muchas cosas más interesantes. Es utilizado por muchas grandes empresas (por ejemplo, Google, que está lejos de llegar).Con él, puede crear guiones simples para la vida cotidiana y participar seriamente en el desarrollo científico y comercial.

¿Interesado en? ¡Entonces tratemos de escribir y ejecutar algo en Python! :)

¡Es importante entender que hay formas oscuras de hacer esto! Puede escribir su programa incluso en un entorno de desarrollo potente con resaltado de sintaxis y otras ventajas, incluso en un cuaderno normal, incluso en general en Internet (y ejecutarlo en el mismo lugar). Creo que esta será una publicación separada. Por ahora, solo mostraré cómo puede ejecutar comandos en el intérprete de Python.

Y enseguida algunas palabras sobre esto último, porque si lo lees, tal vez no sepas qué es.

Python es un lenguaje interpretado. En resumen, esto significa que sus instrucciones se ejecutan (interpretan) una tras otra secuencialmente, sin compilar todo de una vez, como, por ejemplo, en el lenguaje C. El intérprete es solo un programa especial que se ocupa de la interpretación.

Para usar el lenguaje python, debe descargar e instalar su implementación desde el sitio oficial https://www.python.org/downloads/.

Daré un ejemplo sobre la tercera serie del lenguaje Python (3.5.1), por lo que recomiendo descargarlo. Para Windows, esto se puede hacer directamente en este enlace. Al instalar, no olvide marcar la casillaAgregar a RUTA, simplificará tu vida en el futuro.

Descargar e instalar? Genial Ejecutemos el intérprete. Abra la línea de comando (presione Inicio cmd) e ingrese allí:

El intérprete está corriendo! Sí, es así de simple! Si todo se hace correctamente, habrá algo como:

¡Ahora ejecuta el primer comando! Ingrese:

Sí, ella acaba de imprimir, ¡lo que está entre paréntesis, entre comillas en la pantalla! Esto ejecutó la función estándar del lenguaje python: print (). Como puede ver, aquí, a diferencia de C, por ejemplo, no necesita adjuntarle nada, no necesita separarlo de ninguna manera (en este caso particular), no necesita poner nada después.

En términos generales, el intérprete imprimirá la cadena entre comillas y sin ningún tipo de print () en este modo, como un número (solo los números deben escribirse sin comillas), así como incluso operaciones aritméticas en números y variables, pero no le recomendaría que se acostumbrara a él, porque si ejecuta el programa desde un archivo, entonces una omisión similar print () no causará nada más que un error.

Por cierto, sobre operaciones aritméticas. Puedes cometerlos directamente en función sin una punzada de conciencia print (). Pruebe, por ejemplo, en orden:

imprimir (100 + 1)
imprimir (42/7)
imprimir (111111111 * 111111111)

Eso es todo por ahora! Gracias por su atencion! Es muy difícil escribir la primera publicación en toda la comunidad: el nivel de lectores no está del todo claro. Por lo tanto, decidí dedicarlo a principiantes absolutos. Espero no perderte. :)

Gracias por su atencion!

¿Python es interpretado o compilado?

Esta es una fuente común de malentendidos entre los novatos de Python.

Lo primero que hay que entender: "Python" es la interfaz. Hay una especificación que describe qué debe hacer Python y cómo debe comportarse (lo cual es cierto para cualquier interfaz). Y hay varias implementaciones (que también es cierto para cualquier interfaz).

El segundo: "interpretado" y "compilado" son las propiedades de implementación, pero no de la interfaz.

Entonces la pregunta en sí no es del todo correcta.

En el caso de la implementación más común (CPython: escrito en C, a menudo simplemente llamado "Python", y, por supuesto, el que usa si no tiene idea de lo que estoy hablando) la respuesta es: interpretada, con cierta compilación. CPython compila * el código fuente de Python en un bytecode, y luego interpreta ese bytecode, comenzando en el proceso.

* Nota: esto no es exactamente "compilación" en el sentido tradicional. Por lo general, creemos que "compilación" es una conversión de un lenguaje de alto nivel a código de máquina. Sin embargo, de alguna manera esto es "compilación".

Estudiemos mejor esta respuesta, ya que nos ayudará a comprender algunos de los conceptos que nos esperan en este artículo.

Bytecode o código de máquina

Es muy importante comprender la diferencia entre el código de bytes y el código de máquina (o nativo). Quizás la forma más fácil de entenderlo es como un ejemplo:

- C se compila en el código de máquina, que posteriormente es lanzado directamente por el procesador. Cada instrucción obliga al procesador a realizar diferentes acciones.
- Java se compila en bytecode, que posteriormente se ejecuta en Java Virtual Machine (JVM), una computadora abstracta que ejecuta programas. Cada instrucción es procesada por una JVM que interactúa con una computadora.

Gran simplificación: El código de máquina es mucho más rápido, pero el código de bytes es mejor portátil y seguro.

El código de la máquina puede variar según la máquina, mientras que el código de bytes es el mismo en todas las máquinas. Podemos decir que el código de máquina está optimizado para su configuración.

Volviendo a CPython, la cadena de operaciones es la siguiente:

1. CPython compila su código fuente de Python en bytecode.
2. Este código de bytes se ejecuta en la máquina virtual CPython.

Los principiantes a menudo asumen que Python se compila debido a la presencia de archivos .pyc. Esto es en parte cierto: los archivos .pyc se compilan en bytecode, que posteriormente se interpreta. Entonces, si ejecutó su código en Python y tiene un archivo .pyc, la segunda vez funcionará más rápido, ya que no será necesario volver a compilarlo en bytecode.

Máquinas virtuales alternativas: Jython, IronPython y otras.

Como dije anteriormente, Python tiene varias implementaciones. Nuevamente, como se mencionó anteriormente, CPython es el más popular. Esta versión de Python está escrita en C y se considera una implementación "predeterminada".

¿Pero qué hay de las alternativas? Una de las más destacadas es Jython, una implementación de Python en Java que utiliza la JVM. Mientras CPython genera bytecode para ejecutarse en CPython VM, Jython genera bytecode de Java para ejecutarse en JVM (esto es lo mismo que cuando compila el programa Java).

"¿Por qué podría necesitar utilizar una implementación alternativa?", Pregunta. Bueno, para empezar, diferentes implementaciones se llevan bien con diferentes conjuntos de tecnologías.

CPython facilita la escritura de extensiones C para el código Python porque al final lo inicia el intérprete C. Jython, a su vez, simplifica el trabajo con otros programas de Java: puede importar cualquier clase de Java sin esfuerzo adicional, invocando y usando sus clases de Java desde los programas de Jython. (Nota: si no lo ha pensado seriamente, es bastante loco. Vivimos para ver el momento en que puede mezclar diferentes idiomas y compilarlos en una sola entidad. Como señaló Rostin, los programas que mezclan código Fortran y C aparecieron hace bastante tiempo. así que no es completamente nuevo. Pero sigue siendo genial).

Como ejemplo, aquí está el código Jython correcto:

Java HotSpot (TM) VM de servidor de 64 bits (Apple Inc.) en java1.6.0_51
>>> desde java.util import HashSet
>>> s = HashSet (5)
>>> s.add ("Foo")
>>> s.add ("Bar")
>>> s
Foo bar

IronPython es otra implementación popular de Python escrita completamente en C # para .NET. En particular, se ejecuta en la máquina virtual .NET, si puede llamarlo así, en Common Language Runtime (CLR), de Microsoft, comparable a la JVM.

Se podría decir que Jython: Java :: IronPython: C #. Funcionan en las máquinas virtuales correspondientes, es posible importar clases C # en el código IronPython y clases Java en el código Jython, y así sucesivamente.

Es bastante posible sobrevivir sin tocar nada excepto CPython. Pero, al pasar a otras implementaciones, obtienes una ventaja, principalmente debido a la pila de tecnología utilizada. ¿Usa muchos lenguajes basados ​​en JVM? Jython puede ser adecuado para ti. ¿Está todo en .NET? Puede valer la pena probar IronPython (y tal vez ya lo hiciste).

Por cierto, aunque esto no se convierta en una razón para cambiar a otra implementación, vale la pena mencionar que estas implementaciones en realidad difieren en su comportamiento. Esto se aplica no solo a la interpretación del código Python. Sin embargo, estas diferencias generalmente no son significativas, desaparecen y aparecen con el tiempo debido al desarrollo activo. IronPython, por ejemplo, usa cadenas Unicode de forma predeterminada, pero CPython usa ASCII en las versiones 2.x (arroja un error UnicodeEncodeError para caracteres que no son ASCII), mientras que aún admite caracteres Unicode predeterminados en las versiones 3.x.

Compilación sobre la marcha (compilación Just-in-Time): PyPy y el futuro

Entonces, tenemos una implementación de Python escrita en C, una más en Java y la tercera en C #. El siguiente paso lógico: implementación de Python, escrito en ... Python. (Un lector capacitado notará que esta declaración es un poco engañosa).

Por eso puede ser confuso. Para comenzar, analicemos la compilación sobre la marcha (justo a tiempo o JIT).

Jit Por que y como

Permítame recordarle que el código de máquina nativo es mucho más rápido que el código de bytes. Bueno, ¿y si pudieras compilar parte del bytecode y ejecutarlo como código nativo? Tendría que "pagar" algún precio (en otras palabras: tiempo) para compilar el código de bytes, pero si el resultado funciona más rápido, ¡es genial! Esto motiva la compilación JIT, una técnica híbrida que combina las ventajas de los intérpretes y compiladores. En pocas palabras: JIT está tratando de usar la compilación para acelerar el sistema de interpretación.

Por ejemplo, aquí hay un enfoque JIT común:

  1. Defina un código de bytes que se ejecute con frecuencia.
  2. Compílelo en código máquina nativo.
  3. Caché el resultado.
  4. Siempre que necesite ejecutar el mismo código de bytes, use un código de máquina ya compilado y coseche los beneficios (en particular, el aumento de la velocidad).

Ese es el objetivo de PyPy: usar JIT en Python (en el apéndice puedes encontrar intentos anteriores). Por supuesto, hay otros objetivos: PyPy está dirigido a plataformas cruzadas, trabajando con una pequeña cantidad de memoria y soporte sin pila (abandonando la pila de llamadas en lenguaje C en favor de su propia pila). Pero JIT es la principal ventaja. Según las pruebas de tiempo, el factor de aceleración promedio es 6.27. Se pueden obtener datos más detallados del esquema de PyPy Speed ​​Center:

PyPy es difícil de entender

PyPy tiene un gran potencial y, por el momento, es muy compatible con CPython (para que pueda ejecutar Flask, Django, etc.).

Pero con PyPy hay mucha confusión. (apreciamos, por ejemplo, esta propuesta sin sentido para crear PyPyPy ...). En mi opinión, la razón principal por la que PyPy es al mismo tiempo:

1. Intérprete de Python escrito en RPython (no Python (te engañé antes de eso)). RPython es un subconjunto de Python con escritura estática. En Python, realizar conversaciones exhaustivas sobre los tipos es "generalmente imposible", ¿por qué es tan difícil? considere lo siguiente:

x = random.choice (1, "foo")

Este es el código de Python correcto (gracias a Ademan). ¿De qué tipo es x? ¿Cómo podemos discutir los tipos de variables cuando los tipos ni siquiera son forzados?). En RPython, sacrificamos algo de flexibilidad, pero a cambio tenemos la oportunidad de administrar la memoria cada vez más, lo que ayuda con la optimización.

2. Un compilador que compila código RPython en varios formatos y es compatible con JIT. La plataforma predeterminada es C, es decir, el compilador RPython-in-C, pero también puede seleccionar JVM y otros como la plataforma de destino.

Para facilitar la descripción, los llamaré PyPy (1) y PyPy (2).

¿Por qué necesitas estas dos cosas y por qué, en un solo juego? Piénselo de esta manera: PyPy (1) es un intérprete escrito en RPython. Es decir, toma el código de usuario en Python y lo compila en bytecode. Pero para que el propio intérprete (escrito en RPython) funcione, debe ser interpretado por otra implementación de Piton, ¿verdad?

Entonces, simplemente puede usar CPython para iniciar el intérprete. Pero no será demasiado rápido.

En su lugar, usamos PyPy (2) (llamado RPython Toolchain) para compilar el intérprete de PyPy en código para que otra plataforma (como C, JVM o CLI) se ejecute en la máquina de destino, con la adición de JIT. Esto es mágico: ¡PyPy agrega JIT dinámicamente al intérprete, generando su propio compilador! (Nuevamente, esto es una locura: compilamos el intérprete agregando otro compilador independiente y separado).

Al final, el resultado será un ejecutable independiente que interpreta el código fuente de Python y utiliza la optimización JIT. Lo que necesitas! Es difícil de entender, pero quizás este esquema ayudará:

Una vez más, la verdadera belleza de PyPy es que podemos escribir un montón de diferentes intérpretes de Python en RPython sin preocuparnos por JIT (aparte de un par de detalles). Después de eso, PyPy implementa JIT para nosotros usando RPython Toolchain / PyPy (2).

De hecho, si profundiza en la abstracción, en teoría puede escribir un intérprete para cualquier idioma, dirigirlo a PyPy y obtener un JIT para ese idioma. Esto es posible porque PyPy se enfoca en optimizar el propio intérprete, en lugar de los detalles del lenguaje que interpreta.

Como una digresión, me gustaría señalar que JIT en sí es absolutamente increíble. Utiliza una técnica llamada "rastreo", que funciona de la siguiente manera:

  1. Ejecute el intérprete e interprete todo (sin agregar un JIT).
  2. Realizar perfiles fáciles de código interpretado.
  3. Identificar operaciones que ya se han realizado anteriormente.
  4. Compile estas piezas de código en código máquina.

Puede obtener más información de esta publicación fácilmente disponible y muy interesante.

Para resumir: utilizamos el compilador PyPy RPython-in-C (u otra forma de plataforma de destino) para compilar el intérprete PyPu implementado en RPython.

Conclusión

¿Por qué es todo esto tan sorprendente? ¿Por qué vale la pena perseguir esta idea loca? En mi opinión, Alex Gaynor explicó esto muy bien en su blog: "Para PyPy, el futuro se debe a que es más rápido, más flexible y es la mejor plataforma para el desarrollo de Python".

  • Es rápido, porque compila el código fuente en código nativo (usando JIT).
  • Es flexible, porque agrega JIT al intérprete sin mucho esfuerzo.
  • Es flexible (nuevamente), porque puede escribir intérpretes en RPython, lo que posteriormente simplifica la extensión en comparación con el mismo C (en realidad, simplifica tanto que incluso hay una instrucción para escribir sus propios intérpretes).

Adición: otros nombres que quizás hayas escuchado

Python 3000 (Py3k): nombre alternativo para Python 3.0, la versión principal de Python con compatibilidad con versiones anteriores, introducido en 2008. El equipo de Py3k predijo que la nueva versión tardaría unos cinco años en arraigarse por completo. Y mientras que la mayoría (atención: declaración descabellada) de los desarrolladores de Python continúan usando Python 2.x, la gente está pensando cada vez más en Py3k.

Cython: Un superconjunto de Python que incluye la capacidad de llamar a funciones C.

  • Objetivo: escribir extensiones en C para programas de Python.
  • También le permite agregar tipeo estático al código de Python existente, que luego de volver a compilar puede ayudar a lograr un rendimiento similar a C
  • Recuerda a PyPy, pero no es lo mismo. En el caso de Cython, obliga a escribir el código de usuario antes de entregarlo al compilador. En PyPy escribes Python bueno y viejo, y el compilador es responsable de cualquier optimización.

Numba: un "compilador especializado justo a tiempo" que agrega JIT al código anotado de Python. En pocas palabras, le das pistas, y él acelera algunas partes de tu código. Numba es parte del paquete de distribución de Anaconda de paquetes de análisis y gestión de datos.

IPython: muy diferente de todo lo que discutimos. Entorno informático para Python. Interactivo, con soporte para paquetes de GUI, navegadores, etc.

Psyco: módulo de expansión Python, uno de los primeros intentos de Python en el campo JIT. Durante mucho tiempo se ha marcado como "sin soporte y muerto". El desarrollador jefe de Psyco, Armin Rigo, está trabajando actualmente en PyPy.

Enlaces de idiomas

  • RubyPython: un puente entre las máquinas virtuales de Ruby y Python. Le permite incrustar código Python en el código Ruby. Usted indica dónde comienza y termina Python, y RubyPython proporciona transferencia de datos entre máquinas virtuales.
  • PyObjc: una conexión de lenguaje entre Python y Objective-C que se comporta como un puente entre ellos. En la práctica, esto significa que puede usar las bibliotecas Objective-C (incluido todo lo que necesita para crear una aplicación para OS X) en el código Python y los módulos Python en el código Objective-C. Esto es conveniente porque CPython está escrito en C, que es un subconjunto de Objective-C.
  • PyQt: mientras PyObjc le permite asociar Python con los componentes de la GUI de OS X, PyQt hace lo mismo para el marco Qt. Esto hace posible crear interfaces gráficas completas, acceder a bases de datos SQL, etc. Otra herramienta destinada a portar la simplicidad de Python a otros marcos.

Marcos Javascript

  • pajs (pijamas): un marco para crear aplicaciones web y de escritorio en Python. Incluye un compilador Python-in-JavaScript, un conjunto de widgets y algunas otras herramientas.
  • Brython: una máquina virtual Python escrita en Javascript. Le permite ejecutar código Py3k en un navegador web.

5 historias divertidas y épicas de recogidas sobre la víspera de Año Nuevo

¿Recuerdas lo que te pasó en la víspera de Año Nuevo? Digamos cómo hicieron cola en la noche del 30 al 31 de diciembre para mandarinas o quemaron el plato principal. Pikabushniki compartió con nosotros casos dulces, extraños y divertidos. En esta publicación publicamos las cinco mejores historias y damos regalos.

Si no ha visto una publicación en la que anunciamos un concurso de historias, se lo diremos. Lo lanzamos junto con Yandex. Shev y los autores de las cinco historias más interesantes, según el jurado, prometieron dar sets para la cena de Año Nuevo. Recientemente, el servicio lanzó cinco menús de vacaciones: con pollo. carne de res, cerdo, pato y pescado. Recogieron el plato caliente principal, ensaladas y bocadillos no estándar. Que te estamos diciendo Ya probamos aquí.

Siempre hay más participantes que ganadores. Para que nadie se quede con las manos vacías: le damos un código promocional para un descuento de 800 rublos. Para pedir una cena con descuento, al hacer un pedido, ingrese el código promocional Picabu. La promoción es válida por un monto desde 4000 rublos hasta el 28 de diciembre.

¡Ahora es el momento de las historias de ganadores!

1. “Champán muy expresado”

“Los amigos decidieron celebrar el Año Nuevo en casa. Invitaron a un grupo de amigos, la mesa estaba repleta de ensaladas, encurtidos, sándwiches con caviar y otras golosinas. Y ahora quedan un par de minutos antes de que suenen las campanas, todos se levantan, el dueño abre champaña bajo los aullidos generales de anticipación. Y luego el corcho salta de la botella y vuela hacia un candelabro de cristal que cuelga directamente sobre la mesa. Sonidos fuertes, traqueteo de fragmentos cayendo en platos. Así que tuve que tirar toda la comida y rápidamente bombardear algo de una manera nueva. La anfitriona recordará ese Año Nuevo durante mucho tiempo. Deseo que todos se mantengan optimistas en cualquier situación :) "

2. "Asistente de mamá"

“Solo tengo una historia divertida sobre la cena de Año Nuevo, ya que el 31 de diciembre, mi madre cocinó todos los cultivos de raíces, se escapó por negocios y me ordenó que limpiara todo con poca profundidad. Pero yo soy el asistente de mi madre. Lo limpié todo, luego también lo corté en un cubo y lo mezclé. ¿Cómo supe a temprana edad que se trataba de preparaciones para olivier, un abrigo de vinagreta? Esa víspera de Año Nuevo, comimos un gran plato de ensalada de papas, zanahorias, cebollas, remolachas, guisantes, chucrut, mayonesa. Bueno, en general, todo lo que estaba preparado para ensaladas. El arenque no pareció verse afectado. No recuerdo, fue mucho tiempo :) Fue muy vergonzoso. Era necesario dejar instrucciones, como en esta entrega: cortar, interferir, no tocar, si los brazos no son de los hombros. Sin embargo, si las manos no están fuera de los hombros, ninguna instrucción ayudará ... "

“Esto no es una preparación, sino una historia divertida bajo el reloj de la campanilla. Celebré el Año Nuevo con mis padres, decidimos cambiar las tradiciones y comprar champán rojo, no blanco. Y a mitad del discurso del presidente, mi padre alcanza la botella para abrirla, arrancó el papel de aluminio, pero no puede abrir el corcho. Tratando frenéticamente de abrir, porque pronto el reloj sonó, papá no pudo haber encontrado nada mejor que sacudirla y empujar el corcho con su dedo en un hábil pero poderoso movimiento. En ese momento, comenzó una bacanal. Al igual que en la película "Radiance", donde la sangre se derramó del elevador con una fuente, nuestro champán se vertió en todas las direcciones, llenando la mesa de Año Nuevo con salpicaduras de sangre, nosotros en la mesa y todo a su alrededor. El corcho, rebotando en el techo, cargó a la madre directamente en la cara. Nos congelamos mientras Putin, detrás de la pantalla del televisor, cubierto de manchas de sangre, terminaba su discurso y retrocedía. Papá de alguna manera sirvió champán, que permaneció casi en el fondo de la botella y bajo la risa histérica, todo en pintura y champán dulce, celebramos el Año Nuevo. P.S. Todo está bien con mamá, ella se bajó con un ligero susto).

4. "Money Lego Pie for Good Luck"

“Entonces, esta historia sucedió literalmente un par de horas antes del Año Nuevo. Se trasladó una mesa de la cocina a la gran sala, se colocaron los platos en platos y estaban a punto de servirse. La mayoría de la familia ya se ha reunido y está esperando un festín. En la cocina, mamá y suegra terminan los platos, los niños corren de habitación en habitación.Y luego nuestro hijo de cuatro años notó que la abuela estaba poniendo una moneda en el pastel y, por supuesto, entró en pánico. Pero inmediatamente se calmó cuando le dijeron que era una tradición: el que encuentre esta moneda estará acompañado de suerte todo el año. Finalmente, todos se sentaron a la mesa, gradualmente terminaron con olivier, arenque bajo un abrigo de piel, asado, y llegó el momento del pastel. ¡Directamente del horno, rosado, fragante, humeante! El esposo corta cada pedazo de cada uno y todos comienzan a romper el pastel con un cuchillo con la esperanza de encontrar una moneda. Para mi sorpresa, no encuentro uno, ¡sino cuatro! Una captura similar para todos los participantes en la fiesta. El culpable de tal abundancia se hizo evidente cuando su esposo se encontró con un hombre de Lego. Al final resultó que, el hijo quería que el año fuera exitoso para todos y por lo tanto tomó un poco de la mesita de noche, generosamente lo vertió en el pastel, mientras que los adultos se dieron la vuelta. Aparentemente, con la esperanza de que el próximo año sea igual de rico en legos, también puso una figura del diseñador allí. Por supuesto, el pastel salió con tanto dinero que no pudimos comerlo, ¡pero este año realmente resultó ser feliz y lleno de buenos recuerdos! "

5. "Año nuevo al estilo de las tortugas ninjas mutantes adolescentes"

“No puedo decir que la historia sea divertida o triste, pero evoca mis mejores recuerdos. Tenía seis años, y había visto suficientes tortugas ninjas mutantes adolescentes, las jugué, pero lo que había allí, yo mismo era una tortuga ninja mutante adolescente (en mis pensamientos). Que les gusta Así es, ¡pizza! Y fue este plato el que le pedí a mi madre para la mesa de Año Nuevo, y como no había suficiente dinero, mi madre comenzó a salir y cocinar pizza. Con arenque y queso procesado "Amistad". Ese día me senté debajo de las guirnaldas, bebí Pepsi y comí pizza con arenque. Estaba feliz ".

¡Felicitaciones a los autores! Estamos tristes de no poder dar sets a todos, a todos. Pero envía los rayos de amor (y el código promocional Picabu) Deje que el Año Nuevo sea aún más cálido y más cómodo. ¡Todas las mandarinas!

Origen de la vista y descripción

Foto: Malla Python

La pitón reticulada fue descrita por primera vez en 1801 por el naturalista alemán I. Gottlob. El nombre de la especie "reticulatus" se traduce del latín como "malla" y es una referencia a un esquema de color complejo. El nombre general Python fue propuesto por el naturalista francés F.Dowden en 1803.

Un estudio genético del ADN realizado en 2004 descubrió que la pitón reticulada está más cerca de la pitón acuática y no de la pitón tigre, como se pensaba anteriormente. En 2008, Leslie Rawlings y sus colegas volvieron a analizar los datos morfológicos y, combinándolos con materiales genéticos, descubrieron que el género neto es una rama de la línea de pitón acuática.

Video: Python reticulado

Basado en estudios de genética molecular, net python ha sido oficialmente incluido en la lista desde 2014 bajo el nombre científico de Malayopython reticulans.

Dentro de esta especie, se pueden distinguir tres subespecies:

  • malayopython reticulans reticulans, que es un taxón nominotípico,
  • malayopython reticulans saputrai, que es nativa de partes de la isla indonesia de Sulawesi y Selayar,
  • malayopython reticulans jampeanus se encuentra solo en la isla de Jampea.

La existencia de subespecies puede explicarse por el hecho de que la pitón reticulada se distribuye en áreas bastante grandes y se encuentra en islas separadas. Estas poblaciones de serpientes están aisladas y no hay mezcla genética con otras. Una posible cuarta subespecie, que se encuentra en la isla de Sangihe, se encuentra actualmente bajo investigación.

Python es un lenguaje comercialmente exitoso

Es bueno saber que Python se usa no solo en los círculos académicos y aficionados, sino también en los negocios. Las empresas le confían dinero. Muchas compañías usan Python: Google, Paypal, Instagram, NASA.

Python crea trabajos. Hay muchas vacantes, incluso en Rusia. Python es un lenguaje industrial. Está a la par con Pluses y Java en demanda. Un desarrollador de Python tiene la oportunidad de entrar en un verdadero desarrollo de productos. Esto no es un sustituto del consumo local como 1C.

Python es un lenguaje muy fácil

Sin embargo, Python es extremadamente fácil de aprender. Aprende lo básico en una semana. Otra semana tomará paquetes y entorno de capacitación. Como resultado, en menos de un mes puede lograr un lugar en el proyecto.

Python tiene pocos temas complicados. Entonces llamo a las divisiones de la lengua, cuyo estudio vivimos por separado. En Lisp, un punto complicado son las macros. Hay más en la roca: rasgos, implicaciones, objetos compuestos. En Python, dos: decoradores y metaclases. En el trabajo diario, no se necesitan metaclases, por lo que solo queda una dificultad. Habiendo tratado con decoradores, no encontrará otros obstáculos en el idioma.

Python acercó la programación a las personas

Nunca he visto a nadie mencionar este artículo. Python se ha convertido en un lenguaje con el que cualquier ingeniero, científico o técnico sin habilidades de programación puede resolver problemas a nivel industrial. Python es una herramienta para resolver problemas.

Han aparecido proyectos y libros especiales, por ejemplo, Python For Engineers, A Primer on Scientific Programming with Python y otros. En el trabajo, vi guiones de Python escritos por personas que tenían todo su conocimiento de programación reducido a un currículo escolar. Pero los guiones funcionaron, automatizaron el trabajo, lo que significa que ahorraron tiempo y dinero.

Con Python, conducir un automóvil se ha vuelto más fácil. Para cada tarea hay una copia pegar desde el desbordamiento de pila. No importa lo que busque en Google: rompa la línea, construya un gráfico, multiplique la matriz; en los primeros tres enlaces de la emisión habrá una solución.

Por supuesto, este estilo se perdona solo para los no programadores, cuando es importante obtener un resultado, en lugar de un código compatible confiable.

Python es una forma fácil de ingresar al desarrollo industrial.

Recuerda la tesis de cómo entrar en el mundo del espectáculo a través de la cama. Si está haciendo algo cercano a TI, por ejemplo, administración, redes, soporte, 1C o idiomas antiguos como Delphi, entonces Python es un boleto de la suerte. De los puntos anteriores, descubrimos que este es un lenguaje fácil de nivel industrial. Quizás se convertirá en el carro del tren que sale, al que tendrás tiempo de subirte antes de que quieras cambiar algo y superarlo.

En el párrafo anterior, en realidad conté mi historia. Antes de conocer Python, trabajé en sitios en CMS, Delphi y 1C. Por supuesto, y con esto puedes encontrar un trabajo. Sin embargo, fue a expensas de Python que avancé en mi antiguo trabajo, luego me mudé a otra ciudad por 6,000 km y terminé en Dataart. Más tarde encontró udalenka en Europa.

Python admite todos los paradigmas de programación

Python es sorprendentemente flexible. Su diseño y sintaxis son igualmente compatibles con la mayoría de los paradigmas. OOP estándar, enfoque imperativo, modular de procedimiento, funcional.

Cada paradigma se implementa de manera incompleta. Entonces, en OOP no hay variables privadas e interfaces. El subrayado doble es un truco y se gestiona a la vez. Las interfaces se escriben con mixins, pero es imposible rastrear el seguimiento exacto de la interfaz.

Para un FP completo, no hay suficientes lambdas completas y colecciones inmutables. En los tres primeros, la función de reducción estaba oculta en las entrañas de la biblioteca estándar.

La sobrecarga informática, los decoradores y la sobrecarga del operador abren el espacio para maniobras interesantes. Python imita varios idiomas, por ejemplo:

Fake Lisp es un pseudo-Lisp, un intento divertido de escribir código similar a python con expresiones S.

Hask: Zakos bajo la sintaxis de Haskell. Es muy útil para los bebedores de mascotas ver qué trucos realizó el autor para lograr una similitud tan exacta.

fn.py - nishtyaki funcional de la roca. Del mismo modo, es muy interesante ver qué hay debajo del capó.

Una pregunta razonable, ¿por qué tanta flexibilidad? Mi respuesta es perfeccionar patrones y enfoques, ampliar mis horizontes y adoptar las mejores prácticas de otros lenguajes y plataformas.

Por ejemplo, una función de Cluti portada a Python guardará muchas líneas de código y eliminará errores molestos. O, habiendo encontrado un nuevo patrón, trato de implementarlo en Python para evaluar cuánto se lleva con un gran proyecto.

Termina con los beneficios. Python no es perfecto. Veo las siguientes desventajas:

Defectos menores con sintaxis

Python tiene una sintaxis lacónica sin corchetes innecesarios, punto y coma y otras mallas, la máquina correcta, no una persona. Sin embargo, quedan formas de dispararle a la pierna y verificar la hora en depuración, sin entender lo que estaba sucediendo.

Formación de una tupla. Quizás alguien no sabe que los paréntesis alrededor de la tupla son simbólicos. De hecho, se define por una coma. Hay un problema de tupla con un elemento:

Olvidé la coma: no recibí una tupla, sino un número. Dejó una coma en la cola, no un número, sino una tupla. No da miedo, el código caerá debido a diferentes tipos. El dolor comenzará cuando una tupla de filas. Una cadena y una tupla se prestan a operaciones generales: iteración, acceso por índice, corte. El código funciona sin fallas, pero produce un resultado incorrecto. Por una coma.

El siguiente ejemplo. Dos líneas seguidas sin una coma se fusionan en una sola. Eso significa una tupla

porque no hay coma después de 'error'. Marcar 'error' en los estados devolverá False, lo cual es una violación directa de la lógica empresarial.

El código de Python es muy frágil y debe estar cubierto en gran medida por las pruebas. En el sexto año de trabajar con él, todavía no estoy seguro de si este o aquel fragmento de código funcionará correctamente sin una prueba.

OOP Liderazgo

Aunque Python admite muchos paradigmas, OOP sigue siendo el principal. Un marco o biblioteca típico es una colección de clases que almacenan el estado y se cambian entre sí.

¿Alguna vez has degradado a Django? Yo soy Fue una autorización de backend personalizada. La depuración duró más de una hora y se parecía a una sesión BSDM.

Los objetos Solicitud, Respuesta, Usuario, Sesión organizan un pecado total. Establecer enlaces de amigos varias veces. Suben al caché por alguna razón.

Requisitos de backend de autorización muy extraños. El método .get_user () devuelve el objeto de usuario. Entonces este usuario se pierde en algún lugar, no hay ningún enlace hacia él. El sistema solicita el método .get_user_by_id (). Ya le di al usuario, un club! Por lo tanto, debe volver a subir a la base de datos o la red, o almacenar un diccionario en la clase que no sea seguro para subprocesos.

Por alguna razón, en Klage con sus colecciones inmutables, nunca tuve que subir a una sesión, solicitar o responder de forma retroactiva y editar algo allí. Los cambios en la colección solo se adelantan.

No llamo a programar en un sólido estilo FP. Francamente, todos estos artículos en el espíritu de "Programación en Python en un estilo funcional" parecen patéticos. Las lambdas reducidas y de tres pisos son completamente tiradas por las orejas. Dicho código no coexiste en el marco del proyecto y se eliminará, incluso si de alguna manera se puede arrastrar.

Esto daña la programación funcional. Existe una idea errónea generalizada de que los FA son mapas y lambdas.

En Python, sería bueno agregar algo que alentara el abandono del estado. Por ejemplo, un diccionario inmutable, más funciones para trabajar con colecciones.

Sin embargo, este habría sido un lenguaje completamente diferente.

Baja velocidad

Hace un año, dijo que esto no era un inconveniente en absoluto. La memoria es barata, el alojamiento es económico y otras excusas. Hoy considero que tal respuesta es la de un aficionado.

La velocidad de ejecución es importante. Imagine que todo su software en la computadora está escrito en Python. Habría trabajado 20-30 veces más lento, se habría olvidado de los juegos y el photoshop. Esto no es solo un paso atrás, sino un retroceso por varias generaciones.

Recientemente, necesitaba analizar el registro Nginx, Google emitió la utilidad ngxtop. No miré en qué estaba escrito, lo puse de los paquetes. Ella procesó el registro de gigabytes durante una hora. Resultó ser Python. La utilidad en C analizada en 5 minutos. La elección equivocada fue una pérdida de tiempo.

Python tardó mucho tiempo en desarrollarse. Sí, es más lento, pero lo implementaremos antes que el competidor en Java. Y ahora hay lenguajes que combinan la velocidad del código y la velocidad de desarrollo. Si escribe en X e Y aproximadamente al mismo tiempo, y Y corre 5 veces más rápido, ¿por qué tomar X?

Sobre el hierro adicional. Decir que poner el segundo nodo es un asunto insignificante solo puede hacerlo alguien que escriba el código y no toque la implementación. Varios nodos son un sistema distribuido. Necesitamos un equilibrador, separación de registros, problemas de sincronización, actualizaciones consistentes.

En mi proyecto personal, Python vivió durante mucho tiempo, la carga estaba en constante crecimiento. El servidor se estaba ahogando, no tuve tiempo de aumentar el plan de tarifas. Luego escupió y reescribió sobre Claude. No olvidaré esta sensación cuando el gráfico de la CPU cayó del 80 al 20 por ciento.

Reprochan a GIL con el espíritu "no lo necesitas", "procesos de uso". Así lo dije hasta que supe cómo funciona el multihilo en lenguajes funcionales.

Ejecutamos una aplicación web en Python bajo uWSGI como esta. El proceso maestro comienza. Administra a los trabajadores, los procesos en cada uno de los cuales es una aplicación web. Se lanzan 16 Jungs a la vez, cada uno de los cuales responde cuando el otro está ocupado.

El proceso maestro asegura que todos sean iguales. Mata a aquellos que no responden, demasiado hambrientos de memoria o con exceso de trabajo, resolvió un límite de consulta.

Este método me parece feo. En primer lugar, existe una desconfianza en la tecnología y su comportamiento inestable. Con una operación prolongada, los procesos fluyen, incluso un proceso maestro. Esto significa que el sistema debe reiniciarse.

La paralelización en los procesos priva el acceso a la memoria compartida, lo que obliga a utilizar sustitutos como Memcache o Redis, mientras que la memoria caché más eficiente es la memoria compartida.

Los procesos maestros como uWSGI y Green Unicorn son elementos adicionales en la cadena a lo largo de los cuales pasa la solicitud. E / S superfluas, un punto de tala y caída.

Finalmente, nada se puede paralelizar con GIL, excepto las solicitudes de red. Los lenguajes funcionales no tienen estos defectos. La inmutabilidad de las colecciones en el Armario, el sistema de canales en Gow le permite dirigir múltiples subprocesos sin temor a dispararle la pierna. Esto arroja una capa completa de infraestructura: muletas en forma de colas, trabajadores y guiones de corona. Y sistemas adicionales para soportar todo esto.

Dificultades de difusión

Una aplicación escrita en Python es difícil de distribuir. Un script pequeño requiere un intérprete de una versión determinada, un entorno virtual con un montón de bibliotecas. No hay una respuesta exacta a la pregunta de cómo transferir el entorno a la máquina del usuario.

Hace unos años probé varios empacadores: Py2Exe, PyInstaller, CxFreeze. Solo el último pudo compilar la aplicación para Windu sin errores. Lo hice muy bien: emití un instalador * .msi, registré un servicio del sistema. Pero tomó mucho tiempo construir y leer los muelles. ¿Por qué los desarrolladores de Python no se molestan en incluir un sistema de distribución para el producto final en la caja?

Para escribir un script, ejecute el ensamblado y obtenga el archivo con el archivo ejecutable. ¿Por qué los lenguajes funcionales pueden hacer esto, pero Python no?

Colet da uberjar. Lo recopilo en la Mac, lo subo al alojamiento, donde no hay nada más que Java: funciona sin problemas. Haskell compila a binar. Misiles, Rast - también. ¡Common Lisp, Carl, de treinta años, volca una máquina Lisp en un archivo binario!

De hecho, para ejecutar una aplicación web en Python, debe tener aproximadamente 10,000 * .py archivos. Si no hay uno, el sistema no se iniciará. Es posible aislar esta variedad de Docker, pero aquí estamos retorciendo el alma.

Hojeando la documentación para el tercer Python, encontré un interesante módulo zipapp. En el primer minuto pensé que estaba reprochando mi lengua en vano, que el asunto se había levantado del suelo. Resultó que el módulo no es compatible con entornos virtuales y bibliotecas de bibliotecas. No pude construir una aplicación simple con el controlador Postgres.

¿Qué es python?

No entraré en la historia de la creación y el desarrollo del lenguaje, puede encontrarlo fácilmente en el video que se adjuntará a continuación. Es importante tener en cuenta que Python es un lenguaje de secuencias de comandos. Esto significa que su código se verifica en busca de errores y se ejecuta inmediatamente sin ninguna compilación o procesamiento adicional. Este enfoque también se llama interpretado.

Esto reduce el rendimiento, pero es muy conveniente. Hay un intérprete en el que puede ingresar comandos e inmediatamente ver su resultado. Tal trabajo interactivo ayuda mucho en el aprendizaje.

Trabajar en el intérprete

Ejecutar el intérprete de Python es muy simple en cualquier sistema operativo. Por ejemplo, en Linux, simplemente escriba el comando python en la terminal:

En el indicador de shell que se abre, vemos la versión de Python que está actualmente en uso. Hoy en día, dos versiones de Python 2 y Python 3 están muy extendidas, ambas son populares porque la primera desarrolló muchos programas y bibliotecas, y la segunda tiene más características. Por lo tanto, las distribuciones incluyen ambas versiones. Por defecto, se inicia la segunda versión. Pero si necesita la versión 3, debe hacer lo siguiente:

Es la tercera versión que se considerará en este artículo. Ahora considere las características principales de este lenguaje.

3. Combinando con transformación

Puede combinar una cadena con un número o un booleano. Pero para esto necesitas usar la transformación. Hay una función str () para esto:

str = "Este es un número de prueba" + str (15)
imprimir (str)

4. Búsqueda de subcadenas

Puede encontrar un carácter o una subcadena utilizando el método de búsqueda:

str = "Bienvenido a losst.ru"
print (str.find ("losst.ru"))

Este método muestra la posición de la primera aparición de la subcadena losst.ru si se encuentra, si no se encuentra nada, se devuelve el valor -1. La función comienza la búsqueda con el primer carácter, pero puede comenzar con el enésimo, por ejemplo, 26:

str = "Bienvenido a losst.ru"
print (str.find ("pérdida", 26))

En esta opción, la función devolverá -1, porque no se encontró la cadena.

5. Obtener una subcadena

Tenemos la posición de la subcadena que estamos buscando, y ahora ¿cómo obtener la subcadena en sí y qué hay detrás? Use esta sintaxis para esto. comienzo: fin, solo especifique dos números o solo el primero:

str = "Uno dos tres"
imprimir (str: 2)
imprimir (str2 :)
imprimir (str3: 5)
imprimir (str-1)

La primera línea generará una subcadena del primero al segundo carácter, el segundo, del segundo al final. Tenga en cuenta que la cuenta regresiva comienza desde cero. Para contar a la inversa, use un número negativo.

6. Reemplazo de subcadena

Puede reemplazar parte de una cadena con el método replace:

str = "Este sitio es sobre Linux"
str2 = str.replace ("Linux", "Windows")
imprimir (str2)

Si hay muchos sucesos, solo el primero puede ser reemplazado:

str = "Este es un sitio de Linux y estoy suscrito a este sitio"
str2 = str.replace ("sitio", "página", 1)
imprimir (str2)

7. Borrar cadenas

Puede eliminar espacios adicionales con la función de tira:

str = "Este es un sitio web de Linux"
print (str.strip ())

También puede eliminar espacios adicionales solo en la rstrip derecha o solo en la izquierda - lstrip.

9. Convertir cadenas

Hay varias funciones para convertir cadenas a varios tipos numéricos, estas son int (), float (), long () y otras. La función int () se convierte en un número entero y float () en un número de coma flotante:

str = "10"
str2 = "20"
imprimir (str + str2)
print (int (str) + int (str2))

10. Longitud de línea

Puede usar las funciones min (), max (), len () para calcular el número de caracteres en una cadena:

str = "Bienvenido a Losst"
print (min (str))
print (max (str))
print (len (str))

El primero muestra el tamaño mínimo de caracteres, el segundo muestra el máximo y el tercero muestra la longitud total de la cadena.

11. Iterando sobre una cuerda

Puede acceder a cada carácter de una cadena por separado con un bucle for:

str = "Bienvenido al sitio"
para i en rango (len (str)):
imprimir (stri)

Para limitar el ciclo, utilizamos la función len (). Presta atención a la sangría. La programación en python se basa en esto, no hay corchetes para organizar bloques, solo sangrías.

2. Generación de números aleatorios

Puede obtener números aleatorios usando el módulo aleatorio:

importar al azar
print (random.random ())

Por defecto, se genera un número desde un rango de 0.0 a 1.0. Pero puedes configurar tu rango:

importar al azar
números = 1,2,3,4,5,6,7
print (random.choice (números))

Operaciones de fecha y hora

El lenguaje de programación Python tiene un módulo DateTime que le permite realizar varias operaciones con fecha y hora:

fecha y hora de importación
cur_date = datetime.datetime.now ()
print (cur_date)
print (cur_date.year)
print (cur_date.day)
print (cur_date.weekday ())
print (cur_date.month)
print (cur_date.time ())

El ejemplo muestra cómo extraer el valor deseado del objeto. Puedes obtener la diferencia entre dos objetos:

fecha y hora de importación
time1 = datetime.datetime.now ()
time2 = datetime.datetime.now ()
timediff = time2 - time1
print (timediff.microseconds)

Puede crear objetos de fecha con un valor arbitrario usted mismo:

time1 = datetime.datetime.now ()
time2 = datetime.timedelta (días = 3)
tiempo3 = tiempo1 + tiempo2
print (time3.date ())

1. Formato de fecha y hora

El método de tiempo de espera le permite cambiar el formato de fecha y hora según el estándar seleccionado o el formato especificado. Aquí están los caracteres básicos de formato:

  • % a - día de la semana, nombre abreviado,
  • % A - día de la semana, nombre completo,
  • % w - número del día de la semana, de 0 a 6,
  • % d - día del mes
  • % b - el nombre abreviado del mes,
  • % B - nombre completo del mes,
  • % m - número de mes
  • % Y - número de año
  • % H - hora del día en formato de 24 horas,
  • % l - hora del día en formato de 12 horas,
  • % p - AM o PM
  • % M - un minuto
  • % S - segundo.

fecha y hora de importación
date1 = datetime.datetime.now ()
print (date1.strftime ('% d.% B% Y% I:% M% p '))

2. Crear una fecha a partir de una cadena

Puede usar la función strptime () para crear un objeto de fecha a partir de una cadena:

fecha y hora de importación
date1 = datetime.datetime.strptime ("2016-11-21", "% Y-% m-% d")
date2 = datetime.datetime (año = 2015, mes = 11, día = 21)
imprimir (fecha1),
imprimir (fecha2),

1. Copiar archivos

Para copiar archivos, debe usar las funciones del módulo subutil:

importar shutil
new_path = shutil.copy ('file1.txt', 'file2.txt')

Si el archivo 1 es un enlace simbólico, la operación de copia seguirá creando un archivo separado. Si desea copiar un enlace simbólico, use esta construcción:

new_path = shutil.copy ('file1.txt', 'file2.txt', follow_symlinks = False)

3. Leer y escribir archivos de texto

Puede usar las funciones integradas para abrir archivos, leerlos o escribirles datos:

fd = abierto ('archivo1.txt')
contenido = fd.read ()
imprimir (contenido)

Primero debe abrir el archivo para trabajar con la función abrir. La función de lectura se usa para leer datos de un archivo, el texto leído se guardará en una variable. Puede especificar el número de bytes a leer:

fd = abierto ('archivo1.txt')
contenido = fd.read (20)
imprimir (contenido)

Si el archivo es demasiado grande, puede dividirlo en líneas y ya realizar el procesamiento:

content = fd.readlines ()
imprimir (contenido)

Para escribir datos en un archivo, primero debe abrirlo para escribir. Hay dos modos de operación: sobrescribir y agregar al final del archivo. Modo de grabación:

fd = abierto ('archivo1.txt', 'w')
content = fd.write ('Nuevo contenido')

Y agregando al final del archivo:

fd = abierto ('archivo1.txt', 'a')
content = fd.write ('Nuevo contenido')

5. Obtener tiempo de creación

Puede usar las funciones getmtime (), getatime () y getctime () para obtener la hora del último cambio, último acceso y creación. El resultado se mostrará en formato Unix, por lo que debe convertirse a un formato legible:

importar os
fecha y hora de importación
tim = os.path.getctime ('./ file1.txt')
print (datetime.datetime.fromtimestamp (tim))

6. Lista de archivos

Usando la función listdir (), puede obtener una lista de archivos en una carpeta:

importar os
archivos = os.listdir ('.')
imprimir (archivos)

Para resolver el mismo problema, puede usar el módulo glob:

importación glob
archivos = glob.glob ('*')
imprimir (archivos)

7. Serializar objetos de Python

La serialización le permite guardar el objeto en una cadena, para su posterior restauración. Para hacer esto, use el módulo pickle:

pepinillo de importación
fd = abierto ('myfile.pk', 'wb')
pickle.dump (mydata, fd)

Luego, para restaurar el objeto, use:

pepinillo de importación
fd = abierto ('myfile.pk', 'rb')
mydata = pickle.load (fd)

8. Compresión de archivos

La biblioteca estándar de Python le permite trabajar con varios formatos de archivo, por ejemplo, zip, tar, gzip, bzip2. Para ver el contenido de un archivo, use:

importar archivo zip
my_zip = zipfile.ZipFile ('my_file.zip', mode = 'r')
print (file.namelist ())

Y para crear un archivo zip:

importar archivo zip
file = zipfile.ZipFile ('files.zip', 'w')
file.write ('file1.txt')
file.close ()

También puedes descomprimir el archivo:

importar archivo zip
file = zipfile.ZipFile ('files.zip', 'r')
file.extractall ()
file.close ()

Puede agregar archivos al archivo de esta manera:

importar archivo zip
file = zipfile.ZipFile ('files.zip', 'a')
file.write ('file2.txt')
file.close ()

9. Análisis de archivos CSV y Exel

Usando el módulo pandas, puede ver y analizar el contenido de las tablas CSV y Exel. Primero necesitas instalar el módulo usando pip:

sudo pip instalar pandas

Luego, para analizar, escriba:

pandas de importación
data = pandas.read_csv ('archivo.csv)

Por defecto, pandas usa la primera columna para los encabezados de cada línea. Puede especificar una columna para el índice utilizando el parámetro index_col o especificar False si no es necesario. Para escribir cambios en un archivo, use la función to_csv:

Del mismo modo, puede analizar el archivo Exel:

data = pd.read_excel ('file.xls', sheetname = 'Sheet1')

Si necesita abrir todas las tablas, use:

Entonces puede escribir todos los datos:

Redes en Python

La programación de Python 3 a menudo implica la creación de redes. La biblioteca estándar de Python incluye sockets para acceso de red de bajo nivel. Esto es necesario para admitir muchos protocolos de red.

zócalo de importación
host = '192.168.1.5'
puerto = 4040
my_sock = socket.create_connection ((host, puerto))

Este código se conecta al puerto 4040 en la máquina 192.168.1.5. Cuando el socket está abierto, puede enviar y recibir datos:

Necesitamos escribir el carácter b, antes de la línea, porque necesitamos transferir datos en modo binario. Si el mensaje es demasiado grande, puede iterar:

msg = b'El mensaje más largo va aquí '
mesglen = len (msg)
total = 0
mientras total

Para obtener los datos, también debe abrir el socket, solo se usa el método my_sock_recv:

Aquí le indicamos cuántos datos necesita obtener: 20,000, los datos no se transferirán a la variable hasta que se reciban 20,000 bytes de datos. Si el mensaje es más grande, entonces para recibirlo debe crear un bucle:

buffer = bytearray (b '' * 2000)
my_sock.recv_into (buffer)

Si el búfer está vacío, el mensaje recibido se escribirá allí.

1. Recibir correo de un servidor POP3

Para recibir mensajes, utilizamos el servidor POP:

importar getpass, poplib
pop_serv = poplib.POP3 ('192.168.1.5')
pop_serv.user ("myuser")
pop_serv.pass_ (getpass.getpass ())

El módulo getpass le permite recuperar la contraseña del usuario de manera segura, para que no se muestre en la pantalla. Si el servidor POP usa una conexión segura, debe usar la clase POP3_SSL. Si la conexión es exitosa, puede interactuar con el servidor:

msg_list = pop_serv.list () # para enumerar los mensajes
msg_count = pop_serv.msg_count ()

Para completar el trabajo, use:

2. Recibir correo de un servidor IMAP

Para conectarse y trabajar con el servidor IMAP, se utiliza el módulo imaplib:

importar imaplib, getpass
my_imap = imaplib.IMAP4 ('imap.server.com')
my_imap.login ("myuser", getpass.getpass ())

Si su servidor IMAP usa una conexión segura, debe usar la clase IMAP4_SSL. Para obtener una lista de mensajes, use:

data = my_imap.search (Ninguno, 'TODOS')

Luego puede recorrer la lista seleccionada y leer cada mensaje:

msg = my_imap.fetch (email_id, '(RFC822)')

Pero no olvide cerrar la conexión:

3. Envío de correo

Para enviar correo, se utilizan el protocolo SMTP y el módulo smtplib:

importar smtplib, getpass
my_smtp = smtplib.SMTP (smtp.server.com ')
my_smtp.login ("myuser", getpass.getpass ())

Como antes, use SMTP_SSL para una conexión segura. Cuando se establece la conexión, puede enviar un mensaje:

from_addr = '[email protected]'
to_addr = '[email protected]'
msg = 'De: [email protected] r nPara: [email protected] r n r nHola, este es un mensaje de prueba'
my_smtp.sendmail (from_addr, to_addr, msg)

1. Rastreo web

El módulo urllib le permite consultar páginas web de varias maneras. Para enviar una solicitud regular, se utiliza la clase de solicitud. Por ejemplo, ejecutamos una solicitud de página normal:

import urllib.request
my_web = urllib.request.urlopen ('https://www.google.com')
print (my_web.read ())

2. Usando el método POST

Si necesita enviar un formulario web, debe usar no una solicitud GET, sino una POST:

import urllib.request
mydata = b'Tus datos van aquí '
my_req = urllib.request.Request ('http: // localhost', data = mydata, method = 'POST')
my_form = urllib.request.urlopen (my_req)
print (my_form.status)

3. Crear un servidor web

Con la clase Socket, puede aceptar conexiones entrantes, lo que significa que puede crear un servidor web con características mínimas:

zócalo de importación
host = ''
puerto = 4242
my_server = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
my_server.bind ((host, puerto))
my_server.listen (1)

Cuando se crea el servidor. puedes comenzar a aceptar conexiones:

addr = my_server.accept ()
print ('Conectado desde el host', addr)
datos = conn.recv (1024)

Y no olvides cerrar la conexión:

Multithreading

Como la mayoría de los lenguajes modernos, Python le permite ejecutar varios subprocesos paralelos, lo que puede ser útil si necesita realizar cálculos complejos. La biblioteca estándar tiene un módulo de subprocesos que contiene la clase Therad:

subprocesos de importación
def print_message ():
print ('El mensaje se imprimió desde un hilo diferente')
my_thread = threading.Thread (target = print_message)
my_thread.start ()

Si la función funciona durante demasiado tiempo, puede verificar si todo está en orden utilizando la función is_alive (). Algunas veces sus hilos necesitan acceder a recursos globales. Para esto, se usan cerraduras:

subprocesos de importación
num = 1
my_lock = threading.Lock ()
def my_func ():
num global, my_lock
my_lock.acquire ()
suma = num + 1
imprimir (suma)
my_lock.release ()
my_thread = threading.Thread (target = my_func)
my_thread.start ()

Conclusiones

En este artículo, cubrimos los conceptos básicos de la programación en python. Ahora conoce la mayoría de las funciones de uso común y puede usarlas en sus pequeños programas. Te encantará programar en Python 3, ¡es muy fácil! Si tiene alguna pregunta, ¡pregunte en los comentarios!

Al final del artículo, una gran conferencia sobre Python:

Apariencia y características

Foto: Big Mesh Python

La pitón reticulada es una serpiente gigante que vive en Asia. La longitud corporal promedio y el peso corporal promedio son 4,78 my 170 kg, respectivamente. Algunas personas alcanzan una longitud de 9.0 my un peso de 270 kg. Aunque las pitones reticuladas de más de 6 m de longitud son raras, sin embargo, según el Libro Guinness de los Récords, esta es la única serpiente existente que regularmente supera esta longitud.

La pitón reticulada tiene un color corporal de amarillo claro a marrón con líneas negras que se extienden desde la región ventral de los ojos en diagonal hacia la cabeza. A veces hay otra línea negra en la cabeza de la serpiente, que se extiende desde el extremo del hocico hasta la base del cráneo o la nuca. El patrón de color de la pitón de malla es un patrón geométrico complejo que incluye diferentes colores. La parte posterior generalmente tiene una serie de formas irregulares en forma de diamante, rodeadas de pequeñas marcas con centros claros.

Dato interesante: en la amplia área geográfica de esta especie, a menudo se encuentran grandes diferencias en tamaño, color y marcado.

En el zoológico, el patrón de color puede parecer duro, pero en el entorno sombreado de la selva, entre las hojas caídas y los escombros, permite que la pitón casi desaparezca.Como regla general, esta especie mostró que las hembras crecen mucho más grandes que los machos en tamaño y peso. La hembra promedio puede crecer hasta 6.09 my 90 kg, a diferencia del macho, que tiene un promedio de aproximadamente 4.5 m de longitud y hasta 45 kg.

Ahora ya sabe si la pitón reticulada es o no venenosa. Veamos dónde vive la serpiente gigante.

¿Dónde vive la pitón reticulada?

Foto: Serpiente Pitón Reticulada

Python prefiere un clima tropical y subtropical y le gusta estar cerca del agua. Originalmente vivió en selvas tropicales y pantanos. A medida que la limpieza de estas áreas se hace cada vez más pequeña, la pitón neta comienza a adaptarse a los bosques secundarios y los campos agrícolas y a vivir muy densamente con las personas. Cada vez más, se encuentran grandes serpientes en pueblos pequeños, donde deben ser reubicadas.

Además, la red pitón puede habitar cerca de ríos y puede encontrarse en áreas con arroyos y lagos cercanos. Es un excelente nadador que puede nadar lejos en el mar, por lo que la serpiente colonizó muchas islas pequeñas dentro de su rango. Se dice que en los primeros años del siglo XX, net python era un visitante habitual, incluso en la concurrida Bangkok.

La gama de pitón reticulada se extiende en el sur de Asia:

Además, la especie está muy extendida en las islas Nicobar, así como en: Sumatra, un grupo de islas Mentawai, 272 islas de Natuna, Borneo, Sulawesi, Java, Lombok, Sumbawa, Timor, Maluku, Sumba, Flores, Bohol, Cebu, Leite, Mindanao, Mindoro, Luzón, Palawan, Panay, Polillo, Samar, Tavi-Tavi.

La pitón reticulada domina en las selvas tropicales, pantanos y bosques de praderas, a altitudes de 1200–2500 m. La temperatura requerida para la reproducción y la supervivencia debe estar entre ≈24ºC y ≈34ºC en presencia de una gran cantidad de humedad.

¿Qué come la pitón de malla?

Foto: Python neto amarillo

Como todas las pitones, la red caza desde una emboscada, esperando hasta que la víctima alcance la distancia del ataque, antes de agarrar a la presa con su cuerpo y matar con compresión. Se sabe que se alimenta de mamíferos y diversas especies de aves que viven dentro de su área geográfica.

Su dieta natural incluye:

A menudo caza mascotas: cerdos, cabras, perros y aves de corral. Los lechones y los niños que pesan 10-15 kg están incluidos en la dieta habitual. Sin embargo, hay un caso conocido cuando se tragó la pitón de malla que escribo, cuyo peso superó los 60 kg. Caza murciélagos, los atrapa en vuelo, arreglando su cola en las irregularidades de la cueva. Los individuos pequeños de hasta 3-4 m de largo se alimentan principalmente de roedores, como las ratas, mientras que los individuos más grandes cambian a presas más grandes.

Dato interesante: la pitón reticulada puede tragar presas hasta una cuarta parte de su longitud y peso. Entre las presas documentadas más grandes se encuentra un oso malayo medio hambriento que pesa 23 kg, que fue comido por una serpiente de 6,95 m de tamaño y tardó unas diez semanas en digerir.

Se cree que las pitones reticuladas pueden atacar a los humanos, debido a numerosos ataques contra humanos en la naturaleza y a los propietarios de pitones reticulados. Se conoce al menos un caso cuando Python reticulatus entró en la vivienda de un hombre en un bosque y se llevó a un niño. Para detectar una presa, la pitón reticulada utiliza fosas sensibles (órganos especializados en algunas especies de serpientes) que detectan el calor de los mamíferos. Esto le permite determinar la ubicación de la producción en relación con su temperatura con el medio ambiente. Debido a esta característica, la pitón reticulada detecta presas y depredadores sin verlos.

Características de carácter y estilo de vida.

Foto: Malla Python

A pesar de estar cerca de los humanos, se sabe poco sobre el comportamiento de estos animales. La pitón reticulada lleva un estilo de vida nocturno y pasa la mayor parte del día en el refugio. Las distancias que recorren los animales durante su vida, o si tienen territorios fijos, no se han investigado a fondo. Pitón reticulada es un solitario que entra en contacto solo durante la temporada de apareamiento.

Estas serpientes ocupan áreas con fuentes de agua. En el proceso de movimiento, pueden contraer los músculos y liberarlos simultáneamente, creando un patrón de movimiento de serpiente. Debido al movimiento rectilíneo y al gran tamaño corporal de las pitones reticuladas, el tipo de movimiento de serpiente en el que comprime su cuerpo y luego se despliega en un movimiento lineal se observa con mayor frecuencia porque permite que las personas más grandes se muevan más rápido. Usando la técnica de compresión y enderezamiento, python puede trepar a los árboles.

Dato interesante: Utilizando movimientos corporales similares, las pitones reticuladas, como todas las serpientes, descartan su piel para reparar heridas o simplemente durante las etapas de la vida de desarrollo. La pérdida o descamación de la piel es necesaria para aliviar un cuerpo en constante crecimiento.

La pitón de malla prácticamente no oye ruido y está visualmente limitada debido a los párpados inmóviles. Por lo tanto, se basa en su sentido del olfato y el tacto para encontrar presas y evitar a los depredadores. La serpiente no tiene orejas; en cambio, tiene un órgano especial que le permite sentir las vibraciones en el suelo. Debido a la falta de orejas, las serpientes y otras pitones deben usar movimientos físicos para crear vibraciones a través de las cuales se comunican entre sí.

Estructura social y reproduccion

Foto: Big Mesh Python

La temporada de reproducción de la pitón reticulada dura de febrero a abril. Poco después del invierno, las pitones comienzan a prepararse para la reproducción debido al prometedor calor del verano. En la mayoría de las áreas, la ubicación geográfica afecta el inicio de la temporada. Por lo tanto, las pitones se reproducen dependiendo de los cambios climáticos en una región de hábitat particular.

La zona de reproducción debe ser rica en presas para que la hembra pueda producir descendencia. Las pitones reticuladas necesitan territorios deshabitados para mantener una alta reproducción. La viabilidad del huevo depende de la capacidad de la madre para protegerlos e incubarlos, así como de un alto nivel de humedad. Las pitones adultas generalmente están listas para reproducirse cuando el macho alcanza aproximadamente 2.5 metros de longitud y aproximadamente 3.0 metros de longitud para las hembras. Alcanzan tal longitud dentro de 3-5 años para ambos sexos.

Datos interesantes: si hay mucha comida, la hembra produce descendencia cada año. En áreas donde no hay mucha comida, el tamaño y la frecuencia de los embragues se reducen (una vez cada 2-3 años). En un año de reproducción, una hembra puede producir 8-107 huevos, pero generalmente 25-50 huevos. El peso corporal promedio de los bebés al nacer es de 0.15 g.

A diferencia de la mayoría de las especies, la pitón hembra reticulada permanece doblada sobre los huevos para incubar para proporcionarles calor. A través del proceso de contracción muscular, la hembra calienta los huevos, lo que provoca un aumento en la tasa de incubación y las posibilidades de supervivencia de la descendencia. Después del nacimiento, las pequeñas pitones reticuladas casi no conocen el cuidado de los padres y se ven obligadas a defenderse y buscar comida.

Enemigos naturales de las pitones reticuladas.

Foto: Python neto en la naturaleza

Las pitones reticuladas prácticamente no tienen enemigos naturales debido a su tamaño y poder. Los huevos de serpiente y las pitones recién nacidas son atacados por depredadores como aves (halcones, águilas, garzas) y pequeños mamíferos. La caza de pitones reticulados adultos se limita a cocodrilos y otros depredadores grandes. Las pitones tienen un alto riesgo de ataque solo en el borde de los estanques donde puedes esperar ataques de un cocodrilo. La única defensa contra los depredadores, además del tamaño, es una poderosa compresión del cuerpo por una serpiente, que puede exprimir la vida del enemigo en 3-4 minutos.

El hombre es el principal enemigo de la pitón reticulada. Estos animales son asesinados y desollados para producir artículos de cuero. Se estima que medio millón de animales son asesinados anualmente para este propósito. En Indonesia, también se consumen pitones reticulados. La caza de animales está justificada por el hecho de que los residentes quieren proteger a sus vacas e hijos de las serpientes.

La pitón reticulada es una de las pocas serpientes que se aprovechan de los humanos.Estos ataques no son muy comunes, pero esta especie causó varias bajas, tanto en la naturaleza como en cautiverio.

Se conoce de manera confiable sobre varios casos:

  • en 1932, una pitón que medía 7,6 m comió a un adolescente en Filipinas, que se escapó de su casa y, cuando lo encontraron, encontraron al hijo del dueño de la serpiente,
  • En 1995, una gran pitón neta mató a Ee Hyun Chuan, de 29 años, del estado de Johor, en el sur de Malasia. La serpiente se envolvió alrededor de un cuerpo sin vida con la cabeza clavada en las fauces, cuando el hermano de la víctima se encontró con ella.
  • En 2009, un niño de 3 años de Las Vegas fue envuelto en espiral con una pitón de malla de 5,5 m de largo. La madre salvó al bebé golpeando la pitón con un cuchillo,
  • En 2017, el cuerpo de un agricultor de 25 años de Indonesia fue encontrado dentro del estómago de una pitón neta de 7 metros. La serpiente fue asesinada y el cuerpo removido. Este fue el primer caso completamente confirmado cuando una pitón se alimentó de humanos. El proceso de extracción del cuerpo ha sido documentado usando fotografías y videos,
  • En junio de 2018, un pitón de 7 metros se comió a un indonesio de 54 años. Ella desapareció mientras trabajaba en su jardín, y al día siguiente el equipo de búsqueda encontró una pitón cerca del jardín con un bulto en su cuerpo. El video con la serpiente destripada fue publicado en la red.

Estado de población y especies

Foto: Serpiente Pitón Reticulada

El estado de la población de la pitón reticulada es muy diferente en diferentes lugares del rango geográfico. Hay muchas de estas serpientes en Tailandia, donde se arrastran hacia los hogares de las personas durante la temporada de lluvias. En Filipinas, esta es una especie muy extendida, incluso en áreas residenciales. La subpoblación filipina se considera estable e incluso creciente. Las pitones reticuladas son raras en Myanmar. En Camboya, la población también disminuyó y disminuyó en un 30-50% en diez años. Los representantes del género son muy raros en Vietnam en la naturaleza, pero se encontraron muchos individuos en el sur del país.

Dato interesante: la pitón reticulada no está en peligro, sin embargo, de acuerdo con el Apéndice II de CITES, la venta y venta de su piel está regulada para garantizar la supervivencia. Esta especie no está incluida en la Lista Roja de la UICN.

Se cree que la pitón sigue siendo común en las partes del sur de este país, donde hay un hábitat adecuado, incluidas las áreas protegidas. Probablemente disminuyendo en Laos. La reducción en Indochina fue causada por la conversión de la tierra. La pitón reticulada sigue siendo una especie relativamente común en muchas áreas de Kalimantan. Las subpoblaciones en Malasia e Indonesia son estables, a pesar de la pesca intensiva.

Pitón de malla sigue siendo común en Singapur, a pesar de la urbanización, donde está prohibida la pesca de esta especie. En Sarawak y Sabah, esta especie es común tanto en áreas residenciales como naturales, y no hay evidencia de una disminución de la población. Los problemas causados ​​por la limpieza y la explotación de los hábitats pueden compensarse con un aumento en las plantaciones de palma aceitera, ya que la serpiente pitón serpentea bien en estos hábitats.

Pin
Send
Share
Send