- 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
- 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
- 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
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!
Creamos el archivo hola.py y preparamos nuestro Hola Mundo
#!/usr/bin/env python3
print("Hola", "Mundo")
- PEP8
- Google Python Style Guide
- Hitchhiker's Guide to Python
- DJango - Coding style
- Code Like a Pythonista: Idiomatic Python
- The Chromium Projects - Python Style Guidelines
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
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 -*-
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!" )
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
- Pedir información
dato_usuario = input("Mide algo: ")
- Mostrar información
print("Hola, Hola...")
sudo add-apt-repository ppa:fkrull/deadsnakes
sudo apt-get update
sudo apt-get install python3.5
\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 ()
- Una línea
# Comentario en una línea
- Multiples Líneas
"""
Una Línea....
Otra linea...
Etc...
"""
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
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
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
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
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)
- En Python no existe -- o ++
numero = 5;
numero -= 1
print(numero) #4
numero += 1
print(numero) #5
- = 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