• Curso De Python3 Desde 0 (1ra Parte)

 #394285  por KHC
 01 Nov 2012, 04:17
Vamos a iniciar en este curso de python 3.
Cambien quiero agradecer a todo aquel que me conceda el honor de dejarme guiarlo por estos senderos y dejarles claro
que si utilizan este texto o lo comparte no olviden citarme y la fuente de donde se a sacado.

+ Introducción a Python 3
-------------------------------

Python es un lenguaje de programacion orientado a objetos, mas denominado como scripting.
Se cuenta ya con mucho soporte para este lenguaje, al igual que referencias, ejemplo y textos.
Se utiliza en muchas tecnologías como móviles, servidores, s.o., web's, entre otros ademas de que es utilizado
por grandes empresas como Red Hat, Google y la Nasa.

Es un lenguaje interpretado, no necesita ser compilado directamente (veremos esto mas adelante).
Su sintaxis es elegante, sencilla y simple.
Es multiplataforma por el echo de ser interpretado y no compilado. (Linux/Unix/Mac Os/Windows/etcétera).
Entre otras que iremos viendo a lo largo del curso.

+ Definición de Python
----------------------------

Es un lenguaje de programación de alto nivel, interpretado y multipropósito. (Definición de Arturo Fernández)
Como mencione antes, este lenguaje ya es muy utilizado hoy en día para desarrollo de software/ aplicaciones móviles/ juegos / etcétera.

+ Principales Características
----------------------------------

Es multiplataforma, es decir que nuestro código puedo programarse en un Windows 7 con Intel x64 y correr por igual en un Solaris Sparc,
puesto que no se necesita compilar en cada sistema, en vez de esto los desarrolladores de este lenguaje nos brindan los binarios del
interprete para distintas plataformas. Sin mencionar que la mayoría de distribuciones Linux / Unix / Mac utilizan python de cajón.
Realmente podemos desarrollar lo que nos plazca con python. Tambien es un lenguaje de tipado dinamico.

El tipado dinamico basicamente es que en lugar de declarar cada variable y el tipo como en Java o C; Python se encarga
de todo esto automaticamente durant su asignacion, esta misma puede cambiar durante su ciclo de vida sin necesidad de
especificar ej: (String foo = "java";, Float foo = "9.81";, Boolean foo = Tue;, etcétera)

También Python nos deja utilizar diversos paradigmas de la programacion como lo son:
  • POO (Programación Orientada a Objetos)
  • Programación Funcional
  • Programación Imperativa
  • Mecanismo de Introspección
  • Herencia Simple y Múltiple
También nos permite ejecutar código de Python para otro tipo de sistema como los es CPython (C), Jython (Java), IronPython(.NET), etc.

Algunas buenas razones para elegir python:
  • 1.- Open Source
    2.- Productivo
    3.- Potente
    4.- Flexible
+ Historia
-------------

Nace a principios de los 90's por el Holandés Guido Van Rossum, cuando trabajaba para la WCI en Ámsterdam; como jefe de proyecto de
un sistema operativo llamado Amoeba. Utilizaban un lenguaje de programación llamado ABC y por las limitaciones que este lenguaje pone
a lo que pide el proyecto Guido decide crear Python.
La primera versión e Python nace en 1991 y tres años después sale la versión 1.0 liberada bajo la licencia de Open Source propia.
Pero no es hasta el 2000 cuando deciden cambiar por un GPL (GNU General Public License) denominada Python Software Fundation License,
que a diferencia de la GPL común, esta no es copyleft.
Esta dice que es posible modificar el código fuente y desarrollar código derivado sin necesidad de hacerlo open source.

Ya por ultimo, el nombre de Python surge ya que Guido se inspiro en la serie de tv Monty Python's Flying Circus.
Cualquiera que quiera participar en el proyecto de python, documentando, desarrollando, etc, puede hacerlo sin mayor problema y cuenta el
apoyo de la Python Software Fundation.

+ Bytecode
--------------

Como ya mencione, Python es un lenguaje interpretado y no hay necesidad de compilar, pero esto no quiere decir que esto no suceda.
Realmente lo que pasa es que Python es lo suficientemente inteligente para para generar el o los binarios del source que interpreta.
Por distinto motivos:
  • 1.- Es inteligente y de esto se encarga el interprete desde el cual se invoca al script, de aquí nace la "multiplataforma" de Python
    2.- Por convicción, ya que ahorra el tiempo al desarrollador/es o programador/es
    3.- Por obvias razones: No generan los mismo bytescodes en cada programa.
    4.- Eficacia, una vez echo Python no vuelve a tocar el source y evitar estar leyendo datos y cosas asi (procesamiento)
Bueno el interprete de Python se encarga de general un/unos archivo/s binario/s (.pyc) del código fuente (.py)
El .pyc es el binario generado por el interprete y el código contenido es el famoso Bytecode de Python.
Este proceso es automático no tenemos que hacer nada al invocar un script se genera automáticamente.

Y bueno como generalmente las distros Linux/Unix/Mac OS traen el interprete por necesidades del sistema, solo queda aclarar que en Windows no es así
y tambien dispones de herramientas para convertir el .py en ejecutable por si no se dispone del interprete de Python instalado; me refiero a Py2Exe.

+ Tipado Dinámico
-----------------------

Bueno ya casi acabamos con los conceptos de Python, Historia y esas cosas y justo antes de empezar a ver tipos de datos tenemos que tener claro
lo que es el Tipado Dinámico, ya que lo usaremos al programar en Python.

En Python al declarar una variable no se puede definir el tipo de dato del que se trata como en Java o en C++, ya que en Python el tipo sera asignado
a la variable en tiempo de ejecución y esto es básicamente el Tipado Dinámico.
Esto se puede explicar mas a fondo, si miramos el funcionamiento interno que el interprete realiza con la memoria.
Cuando se asigna una valor a una variable, el interprete en tiempo de ejecución realiza varias operaciones:
  • 1.- Se crea un objeto en memoria que representa el valor asignado
    2.- Se comprueba si existe la variable, si no existe se crea una referencia que enlaza a la nueva variable con el objeto.
    3.-Si ya existe, se cambia la referencia hacia el objeto.
    4.- Y tanto Variables como Objetos se almacenan en distinto espacios de memoria.
Python genera una tabla de sistema donde se guarda cada una de estas y a que objeto hace referencia.
También es recordar que: Los OBJETOS son espacios de memoria con suficiente espacio para almacenar el valor que representan.
Y que las REFERENCIAS, son punteros que linkean (enlazan) Objetos con Variables.

Entonces quedando esto claro, puedo citar que en Python los Tipos están asociados con Objetos y no a variables. Los Objetos saben de que Tipo son, pero
no las variables. Y así es como Python implementa el Tipado Dinámico.

Interesante no? Bueno Python tiene un contador de referencias entre Objetos y Variables (Algoritmo). Si una de estas cambia y ya no es necesaria
entra el recolector de basura de Python y se libera el espacio de la memoria.
Sabiendo esto puedo dar un ejemplo para aclarar las dudas que surgieron, a pesar de que esta muy digerible el texto pues es una de las ideas por las
que escribo habiendo tantos textos y tuts de Python.

Podemos asignar distintos tipos de datos a una misma Variable, ya que sabes que el interprete de Python en tiempo de ejecución, se encarga de
crear los Objetos y Referencias que sean necesarios.
Ahora a la Variable "x", le asignaremos un tipo de dato numérico entero "7" y a otra variable "y" le asignaremos el valor de "x":
>>> x = 7
>>> y = x
Bueno, un mapita de lo que tendríamos en memoria seria así:



Despues vamos a cambiar el valor de la Variable "x", de ser tipo numero, pasara a ser de tipo String:
>>> x = "guido"
Y bien nuestro mapita de la memoria quedaría así:
x --> guido

y --> 7
Simple no?
Pero Python, tambien tiene otro tipo de datos y los trata de distinta forma como el caso de las Listas.
A la variable "list1" le asignamos las lista [1,2,3] y a "list2" le asignamos el valor de "list1"
>>> list1 = [1,2,3]
>>> list2 = list1
Si cambiamos el primer elemento de "list1" técnicamente, "list2" debería contener [1,2,3] no? Veamos:
>>> list1[0] = 4
>>> print(list2)
[4,2,3]
>>>print(list1)
[4,2,3]
Vemos que ambas tienen los mismo valores y esto se explica simplemente por que no estamos modificando el Objeto, sino un componente de este.
Python solo realiza el cambio en ejecución, sin necesidad de crear nuevos Objetos o nuevas Referencias entre Variables. Se reduce espacio y tiempo
en procesamiento y + velocidad. =)

Y como intro veremos la primera Función -- y espero no se les olvida JAMÁS--; se trata de type().
Simple, se le pasa un argumento que en este caso es cualquier tipo de dato o variable y nos regresa el tipo.
Por ejemplo:
>>> type(list1)
<class 'list'>
Pero si en cambio le pasamos el primero elemento de la lista "list1[0]":
>>> type(list1[0])
<class 'int'>
Esto se debe a que el primero elemento de la lista es un numero entero "4".

Creo que con esto es suficiente para la primera parte de este cursito de Python 3.
Cabe mencionar que usen la consola interactiva de Python o usen un IDLE/IDE, traten de manejar la consola interactiva SIEMPRE
pues esta te ayuda mucho a ser autodidacta y con un lenguaje como Python es muy fácil jugar con algunas funciones y estar probando
y viendo que tipo de resultados nos regresa etc...
Espero sea de su agrado mi forma de redacción del texto y el contenido del mismo. Cabe mencionar que me estoy basando también en algunos
textos de Internet para reafirmar algunas cosas y también en la misma documentación de Python disponible en su pagina oficial.
De parte de GreyDotSec un saludo a todos. ATTE: Julianstafari

[ Debe registrarse para ver este enlace ]
@GreyDotSec
@julianstafari
 #395553  por kraco
 14 Nov 2012, 21:43
gracias esta muy bueno el curso... esperando con ganas la segunda parte
 #395589  por C4nh0t0
 15 Nov 2012, 04:10
No tengo palabras para agradecer. Estoy empezando a estudiar programación Python y esta guía me ayudará mucho.
GRACIAS
 #395622  por ShineW
 15 Nov 2012, 19:19
Muchas gracias por el aporte. Quedo a la espera con inpaciencia de la segunda entrega de este curso.

Un saludo y mucho animo, que el año academico es muy largo.... :).
Shine