{"id":15824,"date":"2023-10-03T11:08:41","date_gmt":"2023-10-03T17:08:41","guid":{"rendered":"https:\/\/sada.services\/?p=15824"},"modified":"2023-10-03T13:27:14","modified_gmt":"2023-10-03T19:27:14","slug":"el-gran-libro-de-pyhton","status":"publish","type":"post","link":"https:\/\/sada.services\/?p=15824","title":{"rendered":"El gran libro de pyhton"},"content":{"rendered":"\n<h1 class=\"wp-block-heading\" id=\"h-implementaciones-de-python\">Implementaciones de Python<\/h1>\n\n\n\n<p>El lenguaje Python, como se puede intuir, es el equivalente a una lengua, como puede ser el italiano o el ingl\u00e9s, compuesto por tanto de un conjunto de palabras, reglas de sintaxis y sem\u00e1ntica. El c\u00f3digo resultante de la combinaci\u00f3n de estos elementos se dice que est\u00e1 escrito en lenguaje Python. Este c\u00f3digo, por s\u00ed mismo, no tiene ninguna utilidad. Solo resulta \u00fatil en el momento en que se tiene una herramienta que lo analiza, lo entiende y lo ejecuta. Y esta herramienta es el int\u00e9rprete Python<\/p>\n\n\n\n<p>El int\u00e9rprete Python est\u00e1 escrito tambi\u00e9n en un lenguaje de programaci\u00f3n. En realidad, existe m\u00e1s de un int\u00e9rprete Python, cada uno de los cuales se implementa de forma distinta respecto a los otros: CPython: el int\u00e9rprete cl\u00e1sico, implementado en C (www.python.org); PyPy: int\u00e9rprete en RPython (Restricted Python) y compilador Just-in-Time (www.pypy.org); IronPython: implementado sobre la plataforma .NET (www.ironpython.net); Jython: implementado sobre la plataforma Java (www.jython.org); Stackless Python: rama de CPython que soporta microthreads (www.stackless.com). La implementaci\u00f3n cl\u00e1sica, aquella que encontramos ya instalada en las distribuciones Linux y en los ordenadores Mac, y presente en el sitio web oficial, es la CPython<\/p>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"h-modos-de-ejecucion-del-codigo-python\">Modos de ejecuci\u00f3n del c\u00f3digo Python<\/h1>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Probar versi\u00f3n de python<\/li>\n\n\n\n<li>Which programa (nos dice d\u00f3nde se encuentra el programa)<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>which pyhton<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>El int\u00e9rprete Python en los sistemas Unix-like se encuentra habitualmente en \/usr\/bin\/ python o \/usr\/local\/bin\/python:<\/li>\n\n\n\n<li>Si no lo instalamos<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo add-apt-repository ppa:deadsnakes\/ppa\n\nsudo apt install python3.11 -y\n\npython3.11 --version<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Iniciar el interprete<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Podemos arrancar el int\u00e9rprete mediante el comando python del terminal:<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>python3<\/code><\/pre>\n\n\n\n<p>Como podremos ver, el int\u00e9rprete se comporta igual que una shell Unix: cuando es llamado con la entrada est\u00e1ndar conectado a un terminal, lee y ejecuta los comandos de manera interactiva, y<br>cuando es llamado pasando el nombre de un archivo como argumento, o se redirecciona la entrada est\u00e1ndar de un archivo, lee y ejecuta los comandos incluidos en el archivo<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img fetchpriority=\"high\" decoding=\"async\" width=\"650\" height=\"112\" src=\"https:\/\/sada.services\/wp-content\/uploads\/2023\/10\/Seleccion_742.png\" alt=\"\" class=\"wp-image-15825\" srcset=\"https:\/\/sada.services\/wp-content\/uploads\/2023\/10\/Seleccion_742.png 650w, https:\/\/sada.services\/wp-content\/uploads\/2023\/10\/Seleccion_742-300x52.png 300w\" sizes=\"(max-width: 650px) 100vw, 650px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Modo interactivo<\/h2>\n\n\n\n<p>Cuando los comandos se leen desde un terminal, se dice que el int\u00e9rprete se ejecuta en modo interactivo. Para utilizar este modo se ejecuta python desde la l\u00ednea de comandos sin argumentos:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>python3<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"650\" height=\"112\" src=\"https:\/\/sada.services\/wp-content\/uploads\/2023\/10\/Seleccion_742-1.png\" alt=\"\" class=\"wp-image-15828\" srcset=\"https:\/\/sada.services\/wp-content\/uploads\/2023\/10\/Seleccion_742-1.png 650w, https:\/\/sada.services\/wp-content\/uploads\/2023\/10\/Seleccion_742-1-300x52.png 300w\" sizes=\"(max-width: 650px) 100vw, 650px\" \/><\/figure>\n\n\n\n<p>El int\u00e9rprete muestra un mensaje de bienvenida, que empieza con el n\u00famero de la versi\u00f3n de Python que se est\u00e1 ejecutando, seguido del prompt principal, normalmente marcado con tres signos mayor que. Cuando una instrucci\u00f3n o un bloque de instrucciones<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Python 3.10.12 (main, Jun 11 2023, 05:26:28) &#91;GCC 11.4.0] on linux\nType \"help\", \"copyright\", \"credits\" or \"license\" for more information.\n>>> for i in range(10):\n...     print(i,end='')<\/code><\/pre>\n\n\n\n<p>Desde el prompt principal y desde el secundario, es posible cancelar la entrada y volver al prompt principal tecleando el car\u00e1cter de interrupci\u00f3n, normalmente Control-C o DEL<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Python 3.10.12 (main, Jun 11 2023, 05:26:28) &#91;GCC 11.4.0] on linux\nType \"help\", \"copyright\", \"credits\" or \"license\" for more information.\n>>> for i in range(10):\n...     print(i,end='')\n... \nKeyboardInterrupt\n>>> <\/code><\/pre>\n\n\n\n<p>Podemos salir del modo interactivo (con el estado de salida 0) mediante el comando quit() en el prompt principal, o bien tecleando un car\u00e1cter de EOF (Control-D en los sistemas Unix- like, Control-Z en Windows).<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"671\" height=\"229\" src=\"https:\/\/sada.services\/wp-content\/uploads\/2023\/10\/Seleccion_743.png\" alt=\"\" class=\"wp-image-15829\" srcset=\"https:\/\/sada.services\/wp-content\/uploads\/2023\/10\/Seleccion_743.png 671w, https:\/\/sada.services\/wp-content\/uploads\/2023\/10\/Seleccion_743-300x102.png 300w\" sizes=\"(max-width: 671px) 100vw, 671px\" \/><\/figure>\n\n\n\n<p>En los sistemas Unix-like, la librer\u00eda GNU readline permite tener el historial y la implementaci\u00f3n del tabulador tambi\u00e9n en el modo interactivo integrado. Para la implementaci\u00f3n del tabulador, debemos importar los m\u00f3dulos rlcompleter y readline y llamar a readline.parse_and_bind(&#8216;tab: complete&#8217;):<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"513\" height=\"91\" src=\"https:\/\/sada.services\/wp-content\/uploads\/2023\/10\/Seleccion_744.png\" alt=\"\" class=\"wp-image-15831\" srcset=\"https:\/\/sada.services\/wp-content\/uploads\/2023\/10\/Seleccion_744.png 513w, https:\/\/sada.services\/wp-content\/uploads\/2023\/10\/Seleccion_744-300x53.png 300w\" sizes=\"(max-width: 513px) 100vw, 513px\" \/><\/figure>\n\n\n\n<p>Aqu\u00ed (con un doble TAB) tenemos la implementaci\u00f3n del tabulador:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/sada.services\/wp-content\/uploads\/2023\/10\/Seleccion_745.png\" alt=\"\" class=\"wp-image-15832\" style=\"width:756px;height:110px\" width=\"756\" height=\"110\" srcset=\"https:\/\/sada.services\/wp-content\/uploads\/2023\/10\/Seleccion_745.png 784w, https:\/\/sada.services\/wp-content\/uploads\/2023\/10\/Seleccion_745-300x44.png 300w, https:\/\/sada.services\/wp-content\/uploads\/2023\/10\/Seleccion_745-768x112.png 768w\" sizes=\"(max-width: 756px) 100vw, 756px\" \/><\/figure>\n\n\n\n<p>Indudablemente, ejecutar estas tres instrucciones cada vez que se trabaja con el modo interactivo es un fastidio. Por ello, es conveniente automatizar el procedimiento creando un archivo con las tres instrucciones y asign\u00e1ndolo a la variable de entorno PYTHONSTARTUP. De esta manera, siempre que<br>trabajemos con el modo interactivo, Python ejecutar\u00e1 en primer lugar las instrucciones contenidas en el archivo.<br>Veamos c\u00f3mo realizar lo que acabamos de describir en un sistema Unix-like con shell bash. Creamos en nuestra home un archivo de inicio, llamado, por ejemplo, .pyrc, con las tres instrucciones Python:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>nano \/home\/tavo\/.pyrc<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Agregamos<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>import rlcompleter\nimport readline\nreadline.parse_and_bind('tab: complete')<\/code><\/pre>\n\n\n\n<p>A\u00f1adimos la siguiente l\u00ednea en el archivo .bashrc de la home (si este archivo no existe, lo creamos):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>nano \/home\/tavo\/.bashrc<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Y agregamos al final de documento<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>export PYTHONSTARTUP=$HOME\/.pyrc<\/code><\/pre>\n\n\n\n<p>REVISAR: el comando source ~\/.pyrc en el terminal que ya est\u00e1 abierto) y arrancar el int\u00e9rprete interactivo<\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Estructura<\/h2>\n\n\n\n<p>Los archivos que contienen c\u00f3digo Python se denominan m\u00f3dulos Python, los<br>m\u00f3dulos realizan distintas tareas. Por ejemplo, un m\u00f3dulo puede ser utilizado como contenedor l\u00f3gico en el cual se definen clases y funciones, o bien como script, para ser ejecutado con el fin de obtener un resultado o de realizar ciertas acciones<\/p>\n\n\n\n<p>Un programa Python est\u00e1 compuesto por uno o m\u00e1s m\u00f3dulos, y por tanto su arquitectura puede ubicar desde un simple script hasta un complejo programa estructurado en cientos de m\u00f3dulos<\/p>\n\n\n\n<p>Los m\u00f3dulos Python tienen normalmente el sufijo .py, y tanto en Windows como en los sistemas Unix-like pueden ejecutarse con el prompt de los comandos, pasando el nombre del archivo como argumento.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ Creamos una carpeta en el escritorio\nmkdir \/home\/tavo\/Escritorio\/Python\n\n\/\/ Creamos el archivo\nnano \/home\/tavo\/Escritorio\/Python\/ejemplo1.py\n\n\/\/ Agregamos\nprint('sada.services') \n\n\/\/ Mandamos a ejecutar\npython3 \/home\/tavo\/Escritorio\/Python\/ejemplo1.py\n\n\/\/Resultado\nsada.services<\/code><\/pre>\n\n\n\n<p>Puesto que en Windows los archivos .py se asocian directamente mediante un doble clic sobre ellos. En cambio, en los sistemas Unix-like, como en los script de shell, los m\u00f3dulos pueden ser directamente ejecutados escribiendo el shebang en la primer l\u00ednea del archivo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ Abrimos el archivo\nnano \/home\/tavo\/Escritorio\/Python\/ejemplo1.py\n\n\/\/podemos saber donde esta python3\nwhich python3\n\n\/\/ Lo moficamos para que sea as\u00ed\n#!\/usr\/bin\/python3\nprint('sada.services')\n\n\/\/ Le damos permisos de ejecuci\u00f3n\nchmod 777 \/home\/tavo\/Escritorio\/Python\/ejemplo1.py\n\n\/\/ ingresamos a la ubicaci\u00f3n del archivo\ncd \/home\/tavo\/Escritorio\/Python\/\n\n\/\/ y ejecutamos\n.\/ejemplo1.py\n\n\/\/ Resultado\nsada.services\n\n\/\/ o lo podemos ejecutar as\u00ed\n\/home\/tavo\/Escritorio\/Python\/ejemplo1.py\n<\/code><\/pre>\n\n\n\n<p>En este punto, el archivo puede ser ejecutado directamente desde la l\u00ednea de comandos. Dado que como primera l\u00ednea del archivo se encuentra el shebang #! \/usr\/bin\/env python, el archivo se ejecutar\u00e1 con Python<\/p>\n\n\n\n<p>Por defecto, en Python 3 el int\u00e9rprete utiliza la codificaci\u00f3n UTF-8 para descodificar el contenido de los m\u00f3dulos. Pero, si queremos escribir el c\u00f3digo utilizando una codificaci\u00f3n diferente, tambi\u00e9n podemos hacerlo, siempre y cuando el int\u00e9rprete sea informado de ello. Podemos especificar la codificaci\u00f3n utilizada insertando en el m\u00f3dulo un comentario especial debajo del shebang, que contenga coding:nome o coding=nome<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"311\" height=\"129\" src=\"https:\/\/sada.services\/wp-content\/uploads\/2023\/10\/Seleccion_748.png\" alt=\"\" class=\"wp-image-15839\" srcset=\"https:\/\/sada.services\/wp-content\/uploads\/2023\/10\/Seleccion_748.png 311w, https:\/\/sada.services\/wp-content\/uploads\/2023\/10\/Seleccion_748-300x124.png 300w\" sizes=\"(max-width: 311px) 100vw, 311px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"939\" height=\"543\" src=\"https:\/\/sada.services\/wp-content\/uploads\/2023\/10\/Seleccion_749.png\" alt=\"\" class=\"wp-image-15840\" srcset=\"https:\/\/sada.services\/wp-content\/uploads\/2023\/10\/Seleccion_749.png 939w, https:\/\/sada.services\/wp-content\/uploads\/2023\/10\/Seleccion_749-300x173.png 300w, https:\/\/sada.services\/wp-content\/uploads\/2023\/10\/Seleccion_749-768x444.png 768w\" sizes=\"(max-width: 939px) 100vw, 939px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Ejecuci\u00f3n de cadenas pasadas desde la l\u00ednea de comandos<\/h2>\n\n\n\n<p>Cuando el int\u00e9rprete es llamado mediante la opci\u00f3n -c, este acepta como argumento una cadena que contiene instrucciones Python y las ejecuta<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ Comando\npython3 -c \"import sys; print(sys.platform)\"\n\n\/\/ Resultado\nlinux<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Introducci\u00f3n al lenguaje<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Indentaci\u00f3n del c\u00f3digo<\/h3>\n\n\n\n<p>En Python un bloque de c\u00f3digo anidado no est\u00e1 delimitado por palabras clave o por llaves sino por el signo de dos puntos y la indentaci\u00f3n (sangr\u00eda) misma del c\u00f3digo<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"939\" height=\"369\" src=\"https:\/\/sada.services\/wp-content\/uploads\/2023\/10\/Seleccion_750.png\" alt=\"\" class=\"wp-image-15842\" srcset=\"https:\/\/sada.services\/wp-content\/uploads\/2023\/10\/Seleccion_750.png 939w, https:\/\/sada.services\/wp-content\/uploads\/2023\/10\/Seleccion_750-300x118.png 300w, https:\/\/sada.services\/wp-content\/uploads\/2023\/10\/Seleccion_750-768x302.png 768w\" sizes=\"(max-width: 939px) 100vw, 939px\" \/><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>Implementaciones de Python El lenguaje Python, como se puede intuir, es el equivalente a una lengua, como puede ser el italiano o el ingl\u00e9s, compuesto por tanto de un conjunto de palabras, reglas de sintaxis y sem\u00e1ntica. El c\u00f3digo resultante de la combinaci\u00f3n de estos elementos se dice que est\u00e1 escrito en lenguaje Python. Este [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[544],"tags":[573],"class_list":["post-15824","post","type-post","status-publish","format-standard","hentry","category-python","tag-pyhton"],"blocksy_meta":[],"_links":{"self":[{"href":"https:\/\/sada.services\/index.php?rest_route=\/wp\/v2\/posts\/15824","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sada.services\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sada.services\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sada.services\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/sada.services\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=15824"}],"version-history":[{"count":9,"href":"https:\/\/sada.services\/index.php?rest_route=\/wp\/v2\/posts\/15824\/revisions"}],"predecessor-version":[{"id":15843,"href":"https:\/\/sada.services\/index.php?rest_route=\/wp\/v2\/posts\/15824\/revisions\/15843"}],"wp:attachment":[{"href":"https:\/\/sada.services\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=15824"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sada.services\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=15824"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sada.services\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=15824"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}