LA FUNCIÓN TYPE()

PLAYA DE ALMÁCIGA. MACIZO DE ANAGA. NORTE DE TENERIFE.
     Vamos a comenzar con nuestra primera función, Y vamos a hacerlo probablemente por la más simple de todas, de facto, una metafunción: la función type().
Fijémonos en cómo la hemos representado: con un paréntesis a la derecha del nombre. En Python, como en otros muchos lenguajes de programación, todas la funciones muestran siempre esta estructura básica: su nombre, en nuestro caso, type, y un paréntesis, (), en cuyo interior vamos a colocar el dato o los datos que la función necesita para devolver un resultado. A este dato o conjunto de datos se le denomina en Python ARGUMENTO DE LA FUNCIÓN. Lo veremos en ocasiones en su forma contraída como ARG, de "argument", en inglés.
¿Y qué es una "función", por cierto? Pues un constructo semántico-sintáctico propio del lenguaje por el cuál Python "sabe" que tiene que hacer algo y proporcionar un resultado. Dicho de manera más simple y con menos boberías: una "función" es aquéllo que ponemos en nuestros programas para que éste haga cosas y "funcione". Mejor así, ¿verdad?
De lo que acabamos de exponer deducimos que cuando "llamamos" o "invocamos" a la función type() que, como su nombre sugiere, y no hay que romperse mucho la cabeza para caer en la cuenta, se nos muestra el TIPO del dato que le "pasamos como argumento", recordemos, entre los paréntesis.
Veamos un ejemplo:





La función type() nos dice que el dato numérico '4' que le pasamos como argumento es un dato de tipo INT, un 'integer', un número entero.
Aportamos nuevos ejemplos:





En el primer caso, la función type() nos dice que el número negativo'-17' es un número entero, del tipo INT. para el segundo nos dice que es un dato del tipo FLOAT, esto es, un número decimal. Para el último hemos introducido un texto. Observemos que en el código de colores predeterminado en el IDLE de Python, las funciones aparecen en malva, los datos numéricos en negro y los textos en verde, lo que nos ayuda a distinguirlos mejor sobre el SHELL de un simple vistazo.
Hablaremos de los textos casi de inmediato. Pero por ahora sólo nos interesa saber que la función type() nos dice que el argumento "HOLA"  es una STR, la contracción de STRING. En Python una STRING es una "cadena" o "cuerda" (comúnmente, en castellano, se emplea la traducción "cadena" antes que "cuerda") de caracteres literarios, literales o de texto. Así pues, podemos comprobar cómo la función type() es capaz de identificarla naturaleza, la "clase" (CLASS) de cualquier objeto que le pasemos como argumento.
Veamos estos ejemplos introduciendo, en esta ocasión, como argumentos las CLASS que nos ha devuelto la función hasta el momento.




  

    
Notemos que en los tres casos, la función  nos devuelve el mismo resultado: < CLASS 'TYPE'>. Esto significa que  que INTFLOAT y STR son tipos de datos, es decir, '4' es de tipo INT, como '-0.542' es de tipo FLOAT, "¿Qué tal estás hoy?" es de tipo STR, como recurriendo de nuevo a la analogía, esta vez, con nuestra gramática castellana, "Ana" es de tipo NOMBRE, "verde" es de tipo ADJETIVO. "cantar" es de tipo VERBO o "ayer" es de tipo ADVERBIO.  ¿Verdad que parece sencillo? Pues continuamos...                                                                              

Vayamos por el siguiente ejemplo:




¡Nada! ¡Nada! Respiremos con calma. Este nombre tan largo y tan raro que nos acaba de devolver la función cuando le hemos pasado como argumento el nombre de una función (fijémonos en su color malva delator y que no hemos añadido los parétesis pertinentes), nos indica que puede tener dos clases: bien puede ser una BUILTIN FUNCTION, esto es, una FUNCIÓN PRECONSTRUIDA de Python, y ya veremos en su momento qué es eso, o un METHOD, un MÉTODO, que también veremos en su momento lo que es. De momento, con respecto a este último término, tan sólo diremos que viene a ser algo así como"las cosas que podemos hacer con un objeto", ya sea una string, una lista, una tupla, un diccionario, etcétera. Si el objeto fuera un palo, por ejemplo, ¿qué cosas podríamos hacer con un palo? Pues golpear una piedra, apuntalar una mesa a la que le falta una pata, hacer un agujero en el suelo, agitar las ramas de un olivo para que caigan aceitunas, etc... Pues eso: golpear una piedra, apuntalar una mesa, hacer un agujero y agitar una rama, en Python, son MÉTODOS.
Ya los estudiaremos con la profundidad necesaria para comprenderlos y saberlos utilizar.


     Ahora, lo que importa, es que nos hayamos familiarizado, no sólo con los tipos de números, recordemos una vez más: INT (INTEGER, "ENTERO"), tanto positivo (4) como negativo (-4) y FLOAT ("DECIMAL"), tanto positivo (9.08) como negativo (-9.08); sino también con nuestra primera función type() que, recordemos igualmente, nos devuelve el tipado del objeto que le pasamos como argumento, incrustándolo entre los paréntesis.
Recordemos también que el IDLE de Python utiliza un código de colores para enseñarnos a reconocer las diferentes estructuras de lenguaje que utiliza. Hemos visto que emplea el negro para los números y el azul para los resultados. De refilón (insistimos en que lo vamos a tratar en breve) ya sabemos que las STRING  se mostrarán en verde. Y ahora sabemos que las funciones se tintarán en magenta


 
Pongamos ahora nuestra atención en el CUADRO DE INFORMACIÓN que se nos abre de forma automática  en el momento de escribir el paréntesis de apertura. ¿Y por qué sucede esto? Porque Python quiere ser nuestro amigo. Dicho de otro modo, nos ofrece una interfaz, una GUI amigable. No perdamos de vista que con respecto al IDLE, éste no sólo cumple una función de soporte para el desarrollo de programas sino que nunca pierde de vista su funcionalidad pedagógica. Aprovechémoslo en nuestro propio beneficio.
El CUADRO DE INFORMACIÓN se abrirá por defecto cada vez que escribamos el paréntesis de apertura de cualquier función. Y su razón de ser en la de orientarnos sobre lo que la función es capaz de hacer, sus caraterísticas principales y los objetos que soporta como argumentos (parámetros), el orden de ubicación entre los paréntesis, etc.
Veámoslo para la función type():




La primera línea nos señala qué parámetro podemos pasar como argumentos de la función. En la segunda, fijémonos en la flecha pues ésta apunta a las devoluciones, nos informa sobre lo que nos va a mostrar en el caso de que le pasemos un objeto como argumento, en este caso y como ya hemos visto en los ejemplos, el tipo del objeto. Y la tercera nos informa sobre lo que nos va a devolver cuando le pasamos un 'name', 'bases' o 'dict', en este caso, un tipo nuevo.
Concluimos señalando que la función type() es una (meta)función que resulta útil para realizar pruebas o testeos por parte del programador ("¿De qué clase o tipo será la devolución de este script?") y ulteriores depuraciones del código. No es necesario recurrir a ella cuando ya codificamos de una manera definitiva, por así decirlo, "en serio", en tanto que Python nos proporciona una alternativa mejor que ya estudiaremos en su momento.
Por cierto, DEPURAR (debugging, en inglés) un código o programa determina el proceso a través del cual es posible localizar, identificar y subsecuentemente, corregir faltas u omisiones y/o errores de programación en función del lenguaje en el que estamos codificando.

VERODES BAJO LA FRONDA

EL TIPADO DINÁMICO


     Vamos a aprovechar la oportunidad para  conocer un poquito mejor una de las particularidades más notables de Python; EL TIPADO DINÁMICO. En otros lenguajes en programación, como C++ y sus derivados o JAVA, por ejemplo, deberíamos definir cada variable (este concepto lo trabajamos en el capítulo siguiente) denominando su tipo (type) concreto, es decir, si es de tipo 'literal' (string); de tipo 'numérico' (int o float); de tipo 'lista' (list); etc.
En Python, sin embargo, y para gran alivio nuestro, no es necesario hacerlo: no se indica tipo alguno en el momento de declarar una variable, dado que éste (string, int, float, list, dict, ...) le será asignado automáticamente a la variable en el tiempo de ejecución. Esto es lo que llamamos TIPADO DINÁMICO.
A continuación, comprueba si existe la variable a la que, en teoría, debería asignarse dicho valor: si no existe, crea una referencia que enlaza la nueva variable en el objeto; si existe, se cambia la referencia hacia el objeto creado.
Conviene subrayar que tanto las variables como los objetos se almacenan en diferentes zonas de la memoria.
Las variables se guardan o almacenan con una especie de "tabla" donde se indica a qué objeto referencia cada uno de ellos.




Los objetos o datos (en la tabla superior, datos numéricos de tipo INT) son trocitos de memoria que albergan el valor que representan (1, 2, 3 y 4): Finalmente, las referencias son como flechas, como punteros, que enlazan objetos con variables (A, B, C y D). De este modo, una variable (A) referencia a un objeto (INT) que contiene un valor específico (1) en un momento del tiempo.
Por esta razón, los tipos (int, float, str, list,...) están asociados a objetos y no a variables: los objetos conocen de qué tipo son(el objeto 1 "sabe" que es de tipo INT) pero no así las variables(el objeto 1 no "sabe" que está asociado a la variable A hasta el momento mágico en que pulsamos la tecla ENTER). Por eso Python consigue implementar el tipado dinámico.
El intérprete de Python, y ya veremos qué debemos entender por "intérprete", utiliza un "contador" de las referencias que se van asignando entre variables y objetos. Cuan do esta referencias van modificándose y quedan obsoletas, inservibles, aparece el RECOLECTOR DE BASURA (sí, tal y como suena), que se encarga de ir colocando cartelitos de "disponible", metafóricamente hablando, en el espacio de memoria que ocupaba un objeto que ha dejado de ser referenciado.

   


      ¿Y qué conseguimos con el dichoso TIPADO DINÁMICO? Ya os lo digo yo: que en un mismo bloque de código podamos asignar diferentes tipos de datos a una misma variable, donde el intérprete, en tiempo de ejecución, irá creando los objetos y referencias que fueran necesarios. 
  

HONGO DE LEÑA EN LA LAURISILVA HÚMEDA

27 comentarios:

  1. Gracias por la ayuda!! puse el comentario en Anónimo ya que aún no se si esta pagina es segura.

    ResponderEliminar
    Respuestas
    1. Gracias a ti. Espero poder ayudarte con este manual en lo que pueda. Saludos.

      Eliminar
  2. Muy buena explicación combinando lenguaje técnico y popular. También, sería de gran ayuda que expusieras las fuentes bibliográficas que utilizas para realizar los artículos. Un saludo.

    ResponderEliminar
  3. Muchas gracias por tu comentario. En cuanto a las fuentes, básicamente, son, por un lado, el material que propongo bajo el encabezado de Herramientas y Utilidades, que podrás consultar (y te animo encarecidamente a que lo hagas) si haces clic sobre la imagen 'Avanzando con Python, en el extremos superior del lateral derecho; por otra parte, mi propia experiencia 'peleándome' con Python y, por supuesto, la documentación oficial (python.org). Espero haberte servido de ayuda. Saludos.

    ResponderEliminar
  4. Gracias a ti. Hermoso país hermano. Saludos.

    ResponderEliminar
  5. Muy interesante y didáctico, Gracias por el material

    ResponderEliminar
    Respuestas
    1. Muchísimas gracias. Esperamos seguir aportando. Un saludo.

      Eliminar
  6. Muchas Gracias Por este Blog , Muy explicativos espero lograr avanzar en lo que respecta a los temas a que hace referencia con Python.

    ResponderEliminar
    Respuestas
    1. De nuevo, Ramohe, muchas gracias. Seguro que lo logras con un poquito de tu parte. Ánimo y adelante. Saludos.

      Eliminar
  7. Muchísimas gracias. Muy amable. Saludos.

    ResponderEliminar
  8. Muchas gracias, por tu excelente explicacion. Saludos desde Colombia

    ResponderEliminar
  9. Gracias a ti por tus palabras. Precisamente tu hermoso país está entre los cinco que más visitan nuestro blog. Un placer. Saludos.

    ResponderEliminar
  10. Bro sinceramente me dejaste sin palabras. Eres una de las pocas personas que explican en si como es python. Que dios siempre te bendiga por compartir ese conocimiento. Saludos desde Perú

    ResponderEliminar
    Respuestas
    1. Muchísimas gracias por su comentario. Igualmente, que Dios lo bendiga también. Saludos para Ud. y para quienes lean este blog desde su hermosísimo país.

      Eliminar
  11. Muy bueno l aforma de explicar estoy arrancando con Python y me srive de mucho, gracias.

    ResponderEliminar
  12. Muchas gracias por tu comentario. Un placer. Saludos.

    ResponderEliminar
  13. Estoy recorriendo el blog, y cada vez me entusiasmo mas. Como mi avatar, ya soy bastante viejo (cerca de los 60), y me quedo pendiente aprender algún lenguaje de programación de alto nivel. Soy ing. electrónico, de la época del ASSEMBLER y del FORTRAN. Con tus clases, voy rapidísimo. Hablamos el mismo idioma ( castellano, y técnico).
    Buena idea eso de mechar fotos de tu hermosa isla (aunque no tengan nada que ver con Python). Descansan el proceso de aprender y de paso le haces propaganda a tu isla...
    Me queda una pregunta antes de felicitarte y agradecerte por este impresionante trabajo: En todas las fotos hay una explicación de lo que se ve, pero hay un perrito blanco "flequilludo", que nunca dice como se llama o algún dato de color...
    Del otro lado del Atlántico te saludo y agradezco...

    ResponderEliminar
    Respuestas
    1. Hola, buenos días, joven (que no viejo, que tenemos casi la misma edad) Maestro Yoda, desde cuando escribo, como bien señala usted y como verseaba Braulio, un cantante canario, en su tema dedicado a la isla de Tenerife, ésa que usted, muy amablemente, tilda de hermosa (de nuevo, gracias), "...de este mar (Atlántico, pues de lado a lado nos comunicamos) nuestro cansado, que te besa con pereza...". Me complace enormemente leer su comentario: ha sabido usted captar el trasfondo del blog, donde hemos procurado utilizar un lenguaje llano y accesible, con los tecnicismos justos, y con las fotos como remanso en el flujo de comprensión para pausar el proceso de aprendizaje. Un recurso didáctico que como bien señala usted no tiene nada que ver con Python y que, precisamente por eso, "descargan" las neuronas a modo de rellano en las escaleras. Le contaré un secreto: no es un perrito flaquilludo. En realidad, son dos, macho, Maty, y hembra, Dori, ambos bichones malteses. Tanto uno como el otro aportan el factor emocional: aunque cuentan "cosas" de Python, su función oculta es la de conseguir esa sonrisa, esa pulsión emocional, de modo que tanto los más jóvenes como algunas chicas que quieran acercarse al lenguaje pero que les resulte un poco árido, se animen a darles esa segunda o tercera oportunidad que les impulse a superar el recelo y se animen a avanzar en el blog.
      Por otra parte, solo me queda AGRADECERLE profundamente sus palabras y desear que hasta donde humildemente hemos llegado, el blog consiga su propósito de introducirle en el lenguaje de la mejior manera que sabemos y en modo alguno defraudarle. Todo lo mejor para usted. Saludos.

      Eliminar
  14. Jajaja, Tramposo. Entonces en el avatar pusiste una foto de hace 20 años, por lo menos.... Seguimos entonces adelante con el blog, entre código, paisajes y mascotas que esto se esta poniendo lindo..
    Una cosa que me asombra es que considerándome un contemporáneo, no me tutees. Trabajo con muchos chicos jóvenes (25 a 30) y cuando me tratan de "usted", me recuerdan los años que tengo...
    Te invito amigo Gauber, a que nos tuteemos, y dejar las formalidades de lado. Por lo que veo, no va a ser la primera vez que me comunique para pedirte que me aclares algo....
    Saludo de Argentina!!!

    ResponderEliminar
    Respuestas
    1. Hola de nuevo, Maestro Yoda. La foto del avatar tiene 12 años, más o menos. Ahora es la misma pero con menos pelo y más arrugas. De acuerdo, acepto gustoso tu invitación y nos tuteamos entonces. Desde España a tu bellísimo país, recibe saludos cordiales. Un placer.

      Eliminar
  15. Hola, Excelente blog me a ayudado mucho a entender definiciones que no conocía, ya que actualmente esto entrando a este mundo. Solamente una pregunta. Estaba leyendo el titulo la función TYPE() pero no comprendo muy bien cuando te refieres a un objeto.

    Gracias de antemano

    ResponderEliminar
  16. Hola. Muchas gracias por sus palabras. Una enorme alegría saber que ie estamos ayudando en estos inicios suyos con Python. No le dé mayor importancia: en estos compases iniciales de su aproximación a Python, el concepto de "objeto" es lo de menos. Cuando llegue a los capítulos que siguen a la Programación Orientada a Objetos, aprenderá lo que son y a manejarlos con soltura. Ya verá que sí. Por el momento, a título informativo, un objeto es "algo que emana y depende de algo más grande que él", por ejemplo, en un supermercado, la frutas (y cada una de ellas), las conservas, las balanzas de pesado, las baldosas del suelo, las neveras, las lámparas del techo, los clientes, los dependientes, las islas de congelados, ... cualquier cosa en suma que se nos pueda ocurrir, desde el punto de vista de Pythos, son "objetos", todos ellos distintos, con sus características y cosas que se pueden hacer con ellos, que derivan de una entidad mayor: el mismo supermercado. Pero ya le digo. No se preocupe por ello. Le garantizo que lo aprenderá a su debido tiempo. Muchas gracias por seguirnos. Saludos y feliz aprendizaje.

    ResponderEliminar