PYTHON

Estas son mis notas de Python, espero te puedan servir.

Camino a obtener la certificación PCEP-30-02
PCEP™ – Certified Entry-Level Python Programmer

¿Por que deberia aprender Python ? Por que es omnipresente, multiplataforma, facil de aprender y por que necesitamos pagar facturas.

Fundamentos de Programación.

Lexico: Conjunto de palabras que el lenguaje ofrece a sus usuarios bien sea un lengauje natural o artificial.

Sintaxis: Conjutno de reglas utilizadas para precisar si una determinada cadena de palabras foram una oracion valida.


Soy una Vaca "sintaticamente correcta" 
Vaca una Soy "sintaticamente incorrecta"

Soy una Vaca "sintaticamente correcta" 
Vaca una Soy "sintaticamente incorrecta"

Semantica: Conjuntao de reglas que determina si una frase tiene sentido


Vivo en un cassa "sintaticamente correcta" 
Una casa yo vivo "sintaticamente incorrecta"

Interprete

  1. El interprete lee el codigo fuente de una manera que es comun en la cultura occidental de izquierda a derecha y de arriba hacia abajo.
  2. Verifica si todas las lineas subsiguientes son correctas Alfabeticamente, Lexicamente, Sintaticamente y Semanticamente
  3. Comunca errores.
    Nota: Los lenguajes diseñados para ser utilizados con un interpretador se le llaman lengaujes de scrpting y los programas codificados en dicho lenguaje se les llama scripts.

Python

  1. Lenguaje de programacion de alto nivel
  2. Interpretado
  3. Orientado a Objeto
  4. Con semantica dinamica
  5. Generalizado
  6. Su nombre proviene de la serie Monty Python's Flying Circus
  7. Desarrollador por Guido van Rossum Nacido en 1956 en Haarlem, Paises Bajos

Obtetivos de Python

  1. Facil e intuitivo
  2. Codigo abierto
  3. Tan comprensible como el Ingles
  4. Adecuado para tareas cotidianas

Versiones de python

  1. Los Python 2,3 son mantenidos por Python software Foundation Cpython su prezisdente es Guido van Rossum versiones canonicas
  2. Cython: Extensión de C para Python. Permite escribir codigo en Python con cambios menores que se traducen en lenguaje C logrando un alto rendimiento, utiliza los tipos de datos del lenguaje c/c++
  3. Jython: Es un python escrito en Java. Jython puede comunicarse con la infraestructura existente en Java. Hasta la fecha siguien los estandares de python 2 y no tiene hya conforme a Python 3
  4. PyPy y RPython: Python escrito en Rpython "Restricted Python", el cual es un subconjunto de Python. El codigo fuente de pypy no se ejecuta de manera interpretativa si no que se traduce a C y luego se ejecuta por separado.
    Notas:
    1. Podemos intercambiar Cpython por Pypy
    2. La velocidad de Pypy es sensiblemente superior al a del interprete de Cpython
    3. Es disponible para Python 2 y 3
    4. Compatibilidad con funcionalidad core, La mayoria de los modulos estandar pero no con todas las librerias

La funcion Print

print("Hola Mundo", "Python", end=" ", sep=" & ")


Notas: "Hola Mundo" y "Python" son argumentos posicionales, end y sep son argumentos de palabra clave.

Literal

Un literal se refiere a datos cuyos valores estan determinados por el literal mismo y se utilizan dentro del codigo.

Numeros

  1. Python 3.6 ha introduccion el guion bajo en los literales numericos para manejar la legibilidad 11_111_111
  2. Los numeros positivos no requieren un signo positivo antepuesto, per es permitido
  3. Para valores octal en python agregamos "0O" ó "0o".
     0o123, 0O123
  4. Para valores Hexadecimales agregamos "0x" ó "0X".
    0x123, 0X123
  5. Si utilizas print para imprimir lo hace en formato decional.
  6. Los flotantes en python se pueden escribir como .5 o 4.
  7. Notacion cientifica
    3E8=3x10^8=300000000.0 # velocidad de la luz.
    1E-22=1x10^-22 = 0.0000000000000000000001 # masa de un electron, constante de Plock
  8. Python simpre va a preferir la representacion mas corta de un numero, por
    3000E50 = 3E53

Operadores Arismeticos

  1. Exponenciacion:2**4 donde 2 es la base y 4 el exponente.
    Notas:
    • Cuando ambos argumentos son enteros el resultado es un entero.
    • Cuando ambos argumentos son flotantes el resultado es un flotante
    • En caso de que uno de los argumentos sea flotante el resultado es flotante
    • El operador ** es asociativo de derecha a izquierda
    • El operador ** tiene la mayor prioridad

  2. Divicion: Notas:
    • EN caso de division "/" el resultado siempre es flotante
    • Si necesitas que el valor sea entero debes utilizar // y olvidar el residuo de la operacion
    • El redondeo simpre va hacia abajo "floor division" ejemplo :
      6 / 4 = -1,5 
      -6 // 4 = -2
      -6 // 4 = -2.0
    • Operador residuo Modulo 6 % 4 = 2
    • Operadores y sus enlaces
      9 % 6 % 2 = (9 % 6) % 2 = 1 
      Nota: enlazado de lado izquierdo
      2 ** 3 ** 2 = 2 ** (3 ** 2) = 512 
      Nota: enlazado de lado derecho

Variables

  1. Python no impone restricciones en la longitud
  2. Python no solo soporta alfabeto latino si no caracteres especificos de otros alfabetos
  3. Deben comenzar con una letra

Pep-8 Style guide for Python code

  1. Nombre de varaibles y funciones deben estar en minusculas con palabras separadas por guiones bajos para mejorar la legibilidad
  2. Tambien es posible usar letras mixtas "myVariable" pero soo en contextos donde ese ya es el estilo predominante.

Operadores Abreviados

i+=(2*J) # seria i = i + 2 * j
rem%=10 # seria rem = rem % 10
j-=10 # seria rem = rem % 10

Replicacion de String

n = 3 
"James"*n ## JamesJamesJames
Notas: En caso de N sea <= 0 el resultado es una cadena vacia.

Ciclos

Los bucles while y for tienen una clausula else en python. La clausula else se ejecuta despues que el bucle finalice y cuando no haya terminado con un break

Logica de computadora

Conjunción
  • 0 and 0 = 0
  • 1 and 0 = 0
  • 0 and 1 = 0
  • 1 and 1 = 1
Disuyción
  • 0 and 0 = 0
  • 1 and 0 = 1
  • 0 and 1 = 1
  • 1 and 1 = 1

Operadores Bit a Bit

Hay cuatro operadores que le permite manipular bits de datos individuales. se denomina operadores bit a bit.

  • & (ampersand) - Conjuncion a nivel de bits
  • | (Barra vertical) - Disyucion a nivel de bits
  • ~ (Tilde) - Negacion a nivel bits
  • ^ (Intercalación) - ó exclusivo a nivel de bits (xor).
&|^
00000
01011
10011
11111

~
01
01

Notas:

  1. Los operadores bit a bit tratan cada bit por separado y en procesadores modernos de 64bits se ejecutan las 64 operaciones simultaneamente.
  2. i = 15 
    j = 20
    log = i and j #Operacion logica y su resultado es True
    bit = i & j # Es una operacion a nivel bit y su resultado s 6
    logneg = not i # Operacion logica valor Falsebitneg = ~ i # Operacion a nivel de bit y su valor es -16
  3. Forma abrebiada
    x = x & y -- x &= y 
    x = x | y -- x |= y
    x = x ^ y -- x ^= y

Desplazamiento Izquierdo y derecho binario

  1. Se aplica solo a valores de numeros enteros
  2. Los operadores de cambio en Python son un par de digrafos << y >> sugiriendo claramente en que direccion aplica el cambio.
  3. value << bits# Desplazamiento izquierda 
    value >> bits# Desplazamiento derecha
  4. Deplazamiento agrega ceros a la derecha y elimina los bits que se desplazan fuera del rango o los bits que se desplazan a la izquierda
    17 >> 1 = 8.# 17/2
    17 << 2 = 68# 17*(2**2)

Representacion de numeros negativos

En python los numeros negativos se representan usando el complemento a dos.
pasos para convertir

  1. Convertir el numero a binario
  2. Invertir los bits "complemento a 1"
  3. Sumar 1 al resultado
5 = 000101 # representacion binaria 

111010 # Complemento a 1
+ 1
111011 = -5

Listas

  1. append agrega al final de la lista,
  2. insert insertart el elemento en la posicion indicada en caso de no existir la agregade ultimo y realiza un desplazamiento a la derecha.
  3. Rebanada: puedes hacer una copia de un arreglo o parte de ella
    1. start: indica el indice del primer elemento incluido en la rebanada
    2. end: indica el indice del primer elemento no incluido en la rebanada
      arr = [10,8,6,4,2] 
      arr[1:3] # [8,6]

      lista = [10,8,6,4,2]
      lista[-1:1] # [8,6]
    3. Si start especifica un elemento superior a end la lista es vacia.
    lista2 = lista[:] # produce una nueva lista  
    my_lista[start:end] # crea una nueva lista de destino tomando elementos de la lista origen.

Representación de números negativos

En Python los números negativos se representan usando el complemento a dos.
Pasos para convertir:

  1. Convertir el número a binario
  2. Invertir los bits "complemento a 1"
  3. Sumar 1 al resultado
5 = 000101 # representación binaria 

111010 # Complemento a 1
+ 1
111011 = -5

Listas

  1. append agrega al final de la lista,
  2. insert inserta el elemento en la posición indicada; en caso de no existir, lo agrega al final y realiza un desplazamiento a la derecha.
  3. Rebanada: puedes hacer una copia de un arreglo o parte de ella
    1. start: indica el índice del primer elemento incluido en la rebanada
    2. end: indica el índice del primer elemento no incluido en la rebanada
      arr = [10,8,6,4,2] 
      arr[1:3] # [8,6]

      lista = [10,8,6,4,2]
      lista[-1:1] # [8,6]
    3. Si start especifica un elemento superior a end, la lista es vacía.
    lista2 = lista[:] # produce una nueva lista  
    my_lista[start:end] # crea una nueva lista de destino tomando elementos de la lista origen.

Funciones

  1. Una variable que existe fuera de una función tiene alcance dentro del cuerpo de la función, excluyendo aquellas que tienen el mismo nombre.
  2. Global: existe un método especial de Python el cual puede extender el alcance de una variable incluyendo el cuerpo de las funciones para leer y modificar los valores de las variables.
    def my_function(): 
    global var
    var = 2
    print(var)

    var = 1
    my_function()
    print(var)
  3. El valor máximo de profundidad de recursión (recursion depth) es 1000, este valor puede ser modificado.

Tipos de secuencia y Mutabilidad

  1. Tipo de secuencia es un tipo de datos en Python el cual es capaz de almacenar más de un valor o ninguno; si la secuencia varía, los actuales pueden ser secuencialmente examinados.
  2. Los datos mutables pueden ser actualizados libremente en cualquier momento "in situ".
  3. in situ: es una expresión en latín que se traduce literalmente como posición, en el lugar o momento.
  4. Los datos inmutables no pueden ser modificados de esta manera.

Tuplas

  1. Una tupla es una secuencia inmutable.
  2. Cada elemento de una tupla puede ser de distinto tipo.
  3. Para crear una tupla de un solo elemento tupla = (1,) "si se omite la coma será una variable".

Diccionarios

  1. El método popitem elimina y retorna el último valor del diccionario.
  2. A partir de Python 3.7 los diccionarios conservan el orden de inserción.
  3. Si el diccionario está vacío lanza un error KeyError.

Excepciones

  1. Es mejor pedir perdón que pedir permiso. Es mejor manejar un error cuando ocurre que tratar de evitarlo.
  2. Los argumentos con los cuales instanciamos a dicha clase se guardan en la variable args y esta es de tipo tupla.
    try: 
    1/0
    except ZeroDivisionError as e:
    print(e.args) # es de tipo tupla

Funciones

  1. Una variable que existe fuera de una funcion tiene alcance dentro del cuerpo de la funcion excluyendo aquellas qeu tienen el mismo nombre.
  2. Global: existe un metodo expecial de python el cual puede extender el alcance de una variable incluyendo el cuerpo de las funciones para leer y modificar los valores de las variables.
    def my_function(): 
    global var
    var = 2
    print(var)

    var = 1
    my_function()
    print(var)
  3. El valor maximo de profundida de recursion. (recursion depth) es 1000, este valor puede ser modificado.

Tipos de secuencia y Mutabilidad

  1. Tipo de secuencia es un tipo de datos en Python el caul es capaz de almacenar mas de un valor o ninguno, si la secuencia esta varia los acuales pueden ser secuencialmente examinados.
  2. Los datos mutables pueden ser actualizados libremente en cualquier momento "in situ"
  3. in situ: es una expresion en Latim que se traduce literalmente como posicion, en el lugar o momento.
  4. Los datos inmutables no pueden ser modificados de esta manera

Tuplas

  1. Una tupla es una secuencia inmutable.
  2. Cada elemento de una tupla puede ser de distinto tipo
  3. Para crear una tupla de un solo elemento tupla = (1,) "si se omite la coma sera una variable"

Diccionarios

  1. El metodo popitem elimina y retorna el ultimo valor del diccionario.
  2. A partir de Python 3.7 los diccionarios conservan el orden de insercion.
  3. Si el diccionario esta vacio lanza un error KeyError

Exceptions

  1. Es mejor pedir perdon que perdir permiso, Es mejor manejar un error cuando ocurre que tratar de evitarlo
  2. Los argumentos con los cuales instanciamos a dicha clase se guarda en la variable args y esta es de tipo tupla
    try: 
    1/0
    except ZeroDivisionError as e:
    print(e.args) # es de tipo tupla