Skip to content

Latest commit

 

History

History
548 lines (467 loc) · 15.4 KB

File metadata and controls

548 lines (467 loc) · 15.4 KB

shieldsIO shieldsIO shieldsIO

WideImg

Master en Programación de Aplicaciones con JavaScript y Node.js

JS, Node.js, Frontend, Express, Patrones, IoT, HTML5_APIs, Asincronía, Websockets, ECMA6, ECMA7

Clase 108

Python

  • Creado por Guido van Rossum a principios de los años 90
  • Extensiones: .py, .pyc, .pyd, .pyo, .pyw
  • Sintaxis simple, clara y sencilla;
  • Lenguaje similar a Perl
  • Nombre está inspirado en el grupo de cómicos ingleses “Monty Python”
  • Lenguaje (semi-)interpretado o de script (neceistamos un interprete)
    • El código fuente se traduce a un pseudo código máquina intermedio llamado bytecode la primera vez que se ejecuta, generando archivos .pyc o .pyo (bytecode optimizado), que son los que se ejecutarán en sucesivas ocasiones.
  • Tipado dinámico
    • Nos se declara el tipo de variable
  • Fuertemente tipado
    • Conversión explícita entre tipos
  • Multiplataforma
  • Programación soportada
    • POO
    • Imperativa
    • Funcional
    • Orientada a aspectos
  • No recomendado para bajo nivel o aplicacioens de rendimeitno crítico
  • Lo usan... Google, NASA, Industrias Light & Magic y todas las distribuciones Linux

Python: Implementaciones de Python

  • CPython
    • Más extendida
    • Instalada por defecto en MAC y Linux
    • Escrita en C
  • Jython
    • Permite usar las librerías de Java
    • Escrita en Java
  • IronPython
    • Permite usar las librerías de .NET
    • C# (.NET)
  • PyPy
    • Implementación de Python en Python

Python: Versión 2.x o 3.x

Verificación e instalación de Python

  • Escribe python en la terminal
    Python 2.7.6 (default, Jun 22 2015, 17:58:13) 
    [GCC 4.8.2] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> 
  • Escribe python3 en la terminal
    Python 3.4.3 (default, Oct 14 2015, 20:28:29) 
    [GCC 4.8.4] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>>
  • Salir del interprete pulsando Control + D o escribiendo exit()
  • Instalar Python

Python: Filosofía Python

Tim Peters, El Zen de Python

  • Bello es mejor que feo.
  • Explícito es mejor que implícito.
  • Simple es mejor que complejo.
  • Complejo es mejor que complicado.
  • Plano es mejor que anidado.
  • Disperso es mejor que denso.
  • La legibilidad cuenta.
  • Los casos especiales no son tan especiales como para quebrantar las reglas.
  • Lo práctico gana a lo puro.
  • Los errores nunca deberían dejarse pasar silenciosamente.
  • A menos que hayan sido silenciados explícitamente.
  • Frente a la ambigüedad, rechaza la tentación de adivinar.
  • Debería haber una -y preferiblemente sólo una- manera obvia de hacerlo.
  • Aunque esa manera puede no ser obvia al principio a menos que usted sea holandés.
  • Ahora es mejor que nunca.
  • Aunque nunca es a menudo mejor que ya mismo.
  • Si la implementación es difícil de explicar, es una mala idea.
  • Si la implementación es fácil de explicar, puede que sea una buena idea.
  • Los espacios de nombres (namespaces) son una gran idea ¡Hagamos más de esas cosas!

[Python: Librerías

Python: Ejecutando código

Creamos el archivo hola.py y preparamos nuestro Hola Mundo

    #!/usr/bin/env python3
    print("Hola", "Mundo")

Python: Guía de estilos para Python

Python: Usando el intérprete de Python

Lanzando el interprete

  • Escribe python en la terminal
    Python 2.7.6 (default, Jun 22 2015, 17:58:13) 
    [GCC 4.8.2] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> 
  • Escribe python3 en la terminal
    Python 3.4.3 (default, Oct 14 2015, 20:28:29) 
    [GCC 4.8.4] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>>

Salir del interprete

  • comando
exit()
  • teclado
    • Control+D (Unix)
    • Control+Z (Windows)

Pasaje de argumentos

  • Argumentos adiccionales que se introducen junto al script.
  • Se pueden consultar desde la variable argv dek módulo sys

Usando el intérprete de Python (Codificación)

Codificación del código fuente

  • UTF-8 por defecto
  • ASCII para la biblioteca estándar, relevante para la portabilidad
  • Especificando otras codificaciones
     # -*- coding: cp-1252 -*-

Python: Usando el intérprete de Python (Cadenas de caracteres)

Indentación

  • No se usan llaves ({}) para delimitar bloques de código
  • No se usa punto y coma (;) para delimitar sentencias
  • El codigo se estrcutura y divide según los espacios en blanco a la izquierda
  • Existe una jerarquía muy clara para mantener una indentación correcta en Python

Comillas

  • Podemos usar varios tipos de comillas
  • Podemos entremezclar las comillas.
  • Ejemplos:
print("doesn't")
print('doesn\'t')

Triples comillas

print("""\
Uso: algo [OPTIONS]
 -h Muestra el mensaje de uso
 -H nombrehost Nombre del host al cual conectarse
""")

Cadenas Crudas

  • Evitamos que el caracter ** se interprete como un caracter especial
print('C:\Ruta\nuevaCarpeta') 
print(r'C:\Ruta\nuevaCarpeta') 

Concatenado, repetición...

  • Concatenación directa
    • Solo funciona entre cadenas
print("ho""la!")
  • Concatenación con Operador
print("ho" + "la!")
  • Repetición
print(3 * "ho""la!" )
print("h"+ (5 * "o") + "la!" )

Python: Programas ejecutables de Python

Sistemas UNIX

  • Shebang
#! /usr/bin/env python3
  • Permisos a nuestro script
sudo chmod +x myscript.py

Windows

  • Los archivos de extensión .py y .piw se ejecutan automaticamente con python.exe como un ejecutable más

Python: Interacción Básica con el Usuario

  • Pedir información
dato_usuario = input("Mide algo: ")
  • Mostrar información
print("Hola, Hola...")

Python: Instalar Python 3.5

sudo add-apt-repository ppa:fkrull/deadsnakes
sudo apt-get update
sudo apt-get install python3.5

Python: Caracteres especiales:

  • \t Tabulador
  • \v Tabulador Vertical
  • \' Comillas Simples
  • \" Comillas Dobles
  • \\ **
  • \n Salto de línea
  • Otros muchos...
    def caracteresDemo ():
        print("Hasta aquí... todo correcto. Ahora vamos a \"tabular\":\tves? Ya estamos más lejos.\n\'Otra linea ;-)\'")
    
    caracteresDemo ()

Python: Comentarios

  • Una línea
# Comentario en una línea
  • Multiples Líneas
"""
Una Línea....
Otra linea...
Etc...
"""

Python: Variables

Características

  • Las variables se definen "al vuelo"
  • Las variables no poseen un tipo intrinsico, por ello puede cambiar de estados y tipo de datos durante la ejecucción
  • Python itnernamente utiliza las referencias para encontrar la vinculación correspondiente en la memoria.
  • Al alterar el valor de una variable, se dispara un proceso de "revinculación".
  • El recolector de basura (garbage collector) funciona de manera automática.
  • Las variables se pueden definir a nivel de script (global) o local en el interior de las funciones.
  • No es posible duplicar nombres de variables (internas/globales) por lo que se sobreescriben valores.
  • En Python es común:
    • Utilizar la primera letra en Mayusculas en el caso de identificar clases
    • Utilizar guión bajo (_variable) para identificar elementos privados
    • Utilizar doble guión bajo (__variable) para remarcar elementos privados
    • Utilizar doble guión bajo al principio y al final (__variable__) para referirnos a elementos propios del lenguaje

Palabras reservadas

  • Verificar:
    dir(__builtins__)
  • Resultados:
    ['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BlockingIOError', 'BrokenPipeError', 
    'BufferError', 'BytesWarning', 'ChildProcessError', 'ConnectionAbortedError', 'ConnectionError', 'ConnectionRefusedError', 
    'ConnectionResetError', 'DeprecationWarning', 'EOFError', 'Ellipsis', 'EnvironmentError', 'Exception', 'False',
    'FileExistsError', 'FileNotFoundError', 'FloatingPointError', 'FutureWarning', 'GeneratorExit', 'IOError', 'ImportError', 
    'ImportWarning', 'IndentationError', 'IndexError', 'InterruptedError', 'IsADirectoryError', 'KeyError',
    'KeyboardInterrupt', 'LookupError', 'MemoryError', 'NameError', 'None', 'NotADirectoryError', 'NotImplemented', 
    'NotImplementedError', 'OSError', 'OverflowError', 'PendingDeprecationWarning', 'PermissionError', 'ProcessLookupError', 
    'ReferenceError', 'ResourceWarning', 'RuntimeError', 'RuntimeWarning', 'StopIteration', 'SyntaxError', 'SyntaxWarning', 
    'SystemError', 'SystemExit', 'TabError', 'TimeoutError', 'True', 'TypeError', 'UnboundLocalError', 'UnicodeDecodeError', 
    'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError', 'UnicodeWarning', 'UserWarning', 'ValueError', 'Warning', 
    'ZeroDivisionError', '__build_class__', '__debug__', '__doc__', '__import__', '__loader__', '__name__', '__package__', 
    '__spec__', 'abs', 'all', 'any', 'ascii', 'bin', 'bool', 'bytearray', 'bytes', 'callable', 'chr', 'classmethod', 
    'compile', 'complex', 'copyright', 'credits', 'delattr', 'dict', 'dir', 'divmod', 'enumerate', 'eval', 'exec', 'exit', 
    'filter', 'float', 'format', 'frozenset', 'getattr', 'globals', 'hasattr', 'hash', 'help', 'hex', 'id', 'input', 'int', 
    'isinstance', 'issubclass', 'iter', 'len', 'license', 'list', 'locals', 'map', 'max', 'memoryview', 'min', 'next', 
    'object', 'oct', 'open', 'ord', 'pow', 'print', 'property', 'quit', 'range', 'repr', 'reversed', 'round', 'set', 
    'setattr', 'slice', 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type', 'vars', 'zip']

Reglas para declarar Variables

  • No se pueden usar espacios
con espacios = 1
  • No usar un número delante
1_numero = 1
  • Válidos, pero no recomendado
otraOpcion = 1
opcionCon123123 = 1
dame$ = 1
  • Mejor usar snake_case para funciones, métodos, atributos y variables
tipo_snake_case = 1
  • Mejor usar mayúsculas en el caso de las constantes
TIPO_CONSTANTE = 1
  • Mejor usar camelCase en el caso de clases o código previamente definido así.
CamelCase = 1

Python: Entendiendo las variables de Python

Estructuración

  • Secuenciales:
    • Son contenedores de elementos ordenados, se pueden recorrer haciendo uso del indice (números enteros positivos)
    • En esta categoria entran las cadenas, listas y tuplas
  • Conjuntos:
    • Son contenedores de elementos ordenados, cada elemento puede ser de diferente tipo o igual.
    • En esta categoria entran las listas, tuplas y diccionarios
  • Números:
    • Las variables de tipo numeral son tres. No existe un tipo de variable único para todos los números

Python: Tipos de variables

Núlo

  • NoneType (como null en otros lenguajes)
type(None)

Números

  • Enteros
type(23) #int - Base 10
type(0o27) #int - Octal
type(0x17 ) #int - Hexadecimal 
  • Punto flotante
type(0.2703) #float
type(0.1e-3) #float
  • Complejos
type(2.1 + 7.8j) #complex

Cadenas

type("Texto entre comillas dobles") #str
type('Texto entre comillas simples') #str
type('Texto entre \n\tcomillas simples') #str
type("""Texto linea 1
linea 2
linea N
""") #str
type("Cadena" * 3) #str

Booleanos

type(True) #bool
type(False) #bool

Conjuntos

  • Lista
type(['pan', 'huevos', 100, 1234]) #list - Listas (Array)
  • Tupla
type(('pan', 'huevos', 100, 1234)) #tuple - Tuplas (Array no modificable)
  • Diccionario (mapping)
type({
    "nombre":"Yo",
    "apellido":"Mismo"
}) #dict - Diccionario

Python: Matemáticas Básicas

    suma = 5 + 4
    resta = 10 - 6
    multiplicacion = 3 * 3
    division = 6 / 1.34 #Devulve float. complex si algún número lo era también
    division_entera = 6 // 1.34 #Devulve un integral, truncando la parte fraccional. round()
    potencia = 3 ** 2 
    negacion = -3 #No hace nada si es cero. Cambia el signo
    clarificar_codigo = +3 #No hace nada... solo se usa para esclarecer.
    modulo = 43 % 10

Python: Matemáticas Básicas: Agrupaciones y Métodos útiles

    expresion1 = (3 + 7) * 10
    expresion2 = (-56 * 6) - 74 * -25
    expresion3 = (3 * 3) + 10 - 12 / 2
    expresion4 = 44 + (83 % (33 + 100))
    expresion5 = -145 + (500 / 10 - 5) + 10 * 10
    valor_absoluto = abs(x) #Valor Absoluto
    calculo = divmod(x,y) #Devuelve el cociente por un lado y el resto por otro 
    otra_potencia = pow(3,2) #Igual que x**y
    expresion6 = pow(3,2,2) #Igual que (3 ** 2) % 2, pero más rápido
    redondeo1 = round(x, n) 

Python: Matemáticas Básicas: crecimiento y decrecimiento

  • En Python no existe -- o ++
    numero = 5;
    
    numero -= 1
    print(numero)  #4
    numero += 1
    print(numero)  #5

Python: Operadores de asignación

  • = Asignación
x = 1
y = 2
x = y
print("\"x\" vale ", x)
  • = Asignación Múltiple
a = b = c = 1
d, e, f = 2,False,"texto"

print("\"a\" vale ", a) #1
print("\"b\" vale ", b) #1
print("\"c\" vale ", c) #1
print("\"d\" vale ", d) #2
print("\"e\" vale ", e) #False
print("\"f\" vale ", f) #texto

# en una lista:
mi_lista = ['Fictizia', 'Madrid']
centro, provincia = mi_lista
print(centro)  # Fictizia
print(provincia)  # Madrid
  • += Suma
x = 1
y = 2
x += y
print("\"x\" vale ", x) #x = x + y
  • -= Resta
x = 1
y = 2
x -= y
print("\"x\" vale ", x) #x = x - y
  • *= Multiplicar
x = 1
y = 2
x *= y
print("\"x\" vale ", x) #x = x * y
  • /= Dividir
x = 1
y = 2
x /= y
print("\"x\" vale ", x) #x = x / y
  • //= División Entera
x = 1
y = 2
x //= y
print("\"x\" vale ", x) #x = x // y
  • **= Potencia
x = 1
y = 2
x **= y
print("\"x\" vale ", x) #x = x ** y
  • %= Módulo
x = 1
y = 2
x %= y
print("\"x\" vale ", x) #x = x % y