mirror of
https://github.com/adambard/learnxinyminutes-docs.git
synced 2024-12-23 09:41:36 +00:00
Add python-es file
This commit is contained in:
parent
a084a8cb4d
commit
6db6606d2e
490
es-es/python-es.html.markdown
Normal file
490
es-es/python-es.html.markdown
Normal file
@ -0,0 +1,490 @@
|
||||
---
|
||||
language: python
|
||||
contributors:
|
||||
- ["Louie Dinh", "http://ldinh.ca"]
|
||||
translators:
|
||||
- ["Camilo Garrido", "http://www.twitter.com/hirohope"]
|
||||
lang: es-es
|
||||
filename: learnpython.py
|
||||
---
|
||||
|
||||
Python fue creado por Guido Van Rossum en el principio de los 90'. Ahora es uno
|
||||
de los lenguajes más populares en existencia. Me enamoré de Python por su claridad sintáctica.
|
||||
Es básicamente pseudocódigo ejecutable.
|
||||
|
||||
¡Comentarios serán muy apreciados! Pueden contactarme en [@louiedinh](http://twitter.com/louiedinh) o louiedinh [at] [servicio de email de google]
|
||||
|
||||
Nota: Este artículo aplica a Python 2.7 específicamente, pero debería ser aplicable a Python 2.x. ¡Pronto un recorrido por Python 3!
|
||||
|
||||
```python
|
||||
# Comentarios de una línea comienzan con una almohadilla (o signo gato)
|
||||
""" Strings multilinea pueden escribirse
|
||||
usando tres "'s, y comunmente son usados
|
||||
como comentarios.
|
||||
"""
|
||||
|
||||
####################################################
|
||||
## 1. Tipos de datos primitivos y operadores.
|
||||
####################################################
|
||||
|
||||
# Tienes números
|
||||
3 #=> 3
|
||||
|
||||
# Matemática es lo que esperarías
|
||||
1 + 1 #=> 2
|
||||
8 - 1 #=> 7
|
||||
10 * 2 #=> 20
|
||||
35 / 5 #=> 7
|
||||
|
||||
# La división es un poco complicada. Es división entera y toma la parte entera
|
||||
# de los resultados automáticamente.
|
||||
5 / 2 #=> 2
|
||||
|
||||
# Para arreglar la división necesitamos aprender sobre 'floats'
|
||||
# (números de coma flotante).
|
||||
2.0 # Esto es un 'float'
|
||||
11.0 / 4.0 #=> 2.75 ahhh...mucho mejor
|
||||
|
||||
# Refuerza la precedencia con paréntesis
|
||||
(1 + 3) * 2 #=> 8
|
||||
|
||||
# Valores 'boolean' (booleanos) son primitivos
|
||||
True
|
||||
False
|
||||
|
||||
# Niega con 'not'
|
||||
not True #=> False
|
||||
not False #=> True
|
||||
|
||||
# Igualdad es ==
|
||||
1 == 1 #=> True
|
||||
2 == 1 #=> False
|
||||
|
||||
# Desigualdad es !=
|
||||
1 != 1 #=> False
|
||||
2 != 1 #=> True
|
||||
|
||||
# Más comparaciones
|
||||
1 < 10 #=> True
|
||||
1 > 10 #=> False
|
||||
2 <= 2 #=> True
|
||||
2 >= 2 #=> True
|
||||
|
||||
# ¡Las comparaciones pueden ser concatenadas!
|
||||
1 < 2 < 3 #=> True
|
||||
2 < 3 < 2 #=> False
|
||||
|
||||
# Strings se crean con " o '
|
||||
"Esto es un string."
|
||||
'Esto también es un string'
|
||||
|
||||
# ¡Strings también pueden ser sumados!
|
||||
"Hola " + "mundo!" #=> "Hola mundo!"
|
||||
|
||||
# Un string puede ser tratado como una lista de caracteres
|
||||
"Esto es un string"[0] #=> 'E'
|
||||
|
||||
# % pueden ser usados para formatear strings, como esto:
|
||||
"%s pueden ser %s" % ("strings", "interpolados")
|
||||
|
||||
# Una forma más reciente de formatear strings es el método 'format'.
|
||||
# Este método es la forma preferida
|
||||
"{0} pueden ser {1}".format("strings", "formateados")
|
||||
# Puedes usar palabras claves si no quieres contar.
|
||||
"{nombre} quiere comer {comida}".format(nombre="Bob", comida="lasaña")
|
||||
|
||||
# None es un objeto
|
||||
None #=> None
|
||||
|
||||
# No uses el símbolo de igualdad `==` para comparar objetos con None
|
||||
# Usa `is` en lugar de
|
||||
"etc" is None #=> False
|
||||
None is None #=> True
|
||||
|
||||
# El operador 'is' prueba la identidad del objeto. Esto no es
|
||||
# muy útil cuando se trata de datos primitivos, pero es
|
||||
# muy útil cuando se trata de objetos.
|
||||
|
||||
# None, 0, y strings/listas vacíos(as) todas se evalúan como False.
|
||||
# Todos los otros valores son True
|
||||
0 == False #=> True
|
||||
"" == False #=> True
|
||||
|
||||
|
||||
####################################################
|
||||
## 2. Variables y Colecciones
|
||||
####################################################
|
||||
|
||||
# Imprimir es muy fácil
|
||||
print "Soy Python. ¡Encantado de conocerte!"
|
||||
|
||||
|
||||
# No hay necesidad de declarar las variables antes de asignarlas.
|
||||
una_variable = 5 # La convención es usar guiones_bajos_con_minúsculas
|
||||
una_variable #=> 5
|
||||
|
||||
# Acceder a variables no asignadas previamente es una excepción.
|
||||
# Ve Control de Flujo para aprender más sobre el manejo de excepciones.
|
||||
otra_variable # Levanta un error de nombre
|
||||
|
||||
# 'if' puede ser usado como una expresión
|
||||
"yahoo!" if 3 > 2 else 2 #=> "yahoo!"
|
||||
|
||||
# Listas sobre secuencias
|
||||
lista = []
|
||||
# Puedes empezar con una lista prellenada
|
||||
otra_lista = [4, 5, 6]
|
||||
|
||||
# Añadir cosas al final de una lista con 'append'
|
||||
lista.append(1) #lista ahora es [1]
|
||||
lista.append(2) #lista ahora es [1, 2]
|
||||
lista.append(4) #lista ahora es [1, 2, 4]
|
||||
lista.append(3) #lista ahora es [1, 2, 4, 3]
|
||||
# Remueve del final de la lista con 'pop'
|
||||
lista.pop() #=> 3 y lista ahora es [1, 2, 4]
|
||||
# Pongámoslo de vuelta
|
||||
lista.append(3) # Nuevamente lista ahora es [1, 2, 4, 3].
|
||||
|
||||
# Accede a una lista como lo harías con cualquier arreglo
|
||||
lista[0] #=> 1
|
||||
# Mira el último elemento
|
||||
lista[-1] #=> 3
|
||||
|
||||
# Mirar fuera de los límites es un error 'IndexError'
|
||||
lista[4] # Levanta la excepción IndexError
|
||||
|
||||
# Puedes mirar por rango con la sintáxis de trozo.
|
||||
# (Es un rango cerrado/abierto para ustedes los matemáticos.)
|
||||
lista[1:3] #=> [2, 4]
|
||||
# Omite el inicio
|
||||
lista[2:] #=> [4, 3]
|
||||
# Omite el final
|
||||
lista[:3] #=> [1, 2, 4]
|
||||
|
||||
# Remueve elementos arbitrarios de una lista con 'del'
|
||||
del lista[2] # lista ahora es [1, 2, 3]
|
||||
|
||||
# Puedes sumar listas
|
||||
lista + otra_lista #=> [1, 2, 3, 4, 5, 6] - Nota: lista y otra_lista no se tocan
|
||||
|
||||
# Concatenar listas con 'extend'
|
||||
lista.extend(otra_lista) # lista ahora es [1, 2, 3, 4, 5, 6]
|
||||
|
||||
# Chequea la existencia en una lista con
|
||||
1 in lista #=> True
|
||||
|
||||
# Examina el largo de una lista con 'len'
|
||||
len(lista) #=> 6
|
||||
|
||||
|
||||
# Tuplas son como listas pero son inmutables.
|
||||
tupla = (1, 2, 3)
|
||||
tupla[0] #=> 1
|
||||
tupla[0] = 3 # Levanta un error TypeError
|
||||
|
||||
# También puedes hacer todas esas cosas que haces con listas
|
||||
len(tupla) #=> 3
|
||||
tupla + (4, 5, 6) #=> (1, 2, 3, 4, 5, 6)
|
||||
tupla[:2] #=> (1, 2)
|
||||
2 in tupla #=> True
|
||||
|
||||
# Puedes desempacar tuplas (o listas) en variables
|
||||
a, b, c = (1, 2, 3) # a ahora es 1, b ahora es 2 y c ahora es 3
|
||||
# Tuplas son creadas por defecto si omites los paréntesis
|
||||
d, e, f = 4, 5, 6
|
||||
# Ahora mira que fácil es intercambiar dos valores
|
||||
e, d = d, e # d ahora es 5 y e ahora es 4
|
||||
|
||||
|
||||
# Diccionarios almacenan mapeos
|
||||
dicc_vacio = {}
|
||||
# Aquí está un diccionario prellenado
|
||||
dicc_lleno = {"uno": 1, "dos": 2, "tres": 3}
|
||||
|
||||
# Busca valores con []
|
||||
dicc_lleno["uno"] #=> 1
|
||||
|
||||
# Obtén todas las llaves como una lista
|
||||
dicc_lleno.keys() #=> ["tres", "dos", "uno"]
|
||||
# Nota - El orden de las llaves del diccionario no está garantizada.
|
||||
# Tus resultados podrían no ser los mismos del ejemplo.
|
||||
|
||||
# Obtén todos los valores como una lista
|
||||
dicc_lleno.values() #=> [3, 2, 1]
|
||||
# Nota - Lo mismo que con las llaves, no se garantiza el orden.
|
||||
|
||||
# Chequea la existencia de una llave en el diccionario con 'in'
|
||||
"uno" in dicc_lleno #=> True
|
||||
1 in dicc_lleno #=> False
|
||||
|
||||
# Buscar una llave inexistente deriva en KeyError
|
||||
dicc_lleno["cuatro"] # KeyError
|
||||
|
||||
# Usa el método 'get' para evitar la excepción KeyError
|
||||
dicc_lleno.get("uno") #=> 1
|
||||
dicc_lleno.get("cuatro") #=> None
|
||||
# El método 'get' soporta un argumento por defecto cuando el valor no existe.
|
||||
dicc_lleno.get("uno", 4) #=> 1
|
||||
dicc_lleno.get("cuatro", 4) #=> 4
|
||||
|
||||
# El método 'setdefault' es una manera segura de añadir nuevos pares
|
||||
# llave-valor en un diccionario
|
||||
dicc_lleno.setdefault("cinco", 5) #dicc_lleno["cinco"] es puesto con valor 5
|
||||
dicc_lleno.setdefault("cinco", 6) #dicc_lleno["cinco"] todavía es 5
|
||||
|
||||
|
||||
# Sets (conjuntos) almacenan ... bueno, conjuntos
|
||||
conjunto_vacio = set()
|
||||
# Inicializar un conjunto con montón de valores
|
||||
un_conjunto = set([1,2,2,3,4]) # un_conjunto ahora es set([1, 2, 3, 4])
|
||||
|
||||
# Desde Python 2.7, {} puede ser usado para declarar un conjunto
|
||||
conjunto_lleno = {1, 2, 2, 3, 4} # => {1 2 3 4}
|
||||
|
||||
# Añade más valores a un conjunto
|
||||
conjunto_lleno.add(5) # conjunto_lleno ahora es {1, 2, 3, 4, 5}
|
||||
|
||||
# Haz intersección de conjuntos con &
|
||||
otro_conjunto = {3, 4, 5, 6}
|
||||
conjunto_lleno & otro_conjunto #=> {3, 4, 5}
|
||||
|
||||
# Haz unión de conjuntos con |
|
||||
conjunto_lleno | otro_conjunto #=> {1, 2, 3, 4, 5, 6}
|
||||
|
||||
# Haz diferencia de conjuntos con -
|
||||
{1,2,3,4} - {2,3,5} #=> {1, 4}
|
||||
|
||||
# CHequea la existencia en un conjunto con 'in'
|
||||
2 in conjunto_lleno #=> True
|
||||
10 in conjunto_lleno #=> False
|
||||
|
||||
|
||||
####################################################
|
||||
## 3. Control de Flujo
|
||||
####################################################
|
||||
|
||||
# Hagamos sólo una variable
|
||||
una_variable = 5
|
||||
|
||||
# Aquí está una declaración de un 'if'. ¡La indentación es significativa en Python!
|
||||
# imprime "una_variable es menor que 10"
|
||||
if una_variable > 10:
|
||||
print "una_variable es completamente mas grande que 10."
|
||||
elif una_variable < 10: # Este condición 'elif' es opcional.
|
||||
print "una_variable es mas chica que 10."
|
||||
else: # Esto también es opcional.
|
||||
print "una_variable es de hecho 10."
|
||||
|
||||
|
||||
"""
|
||||
For itera sobre listas
|
||||
imprime:
|
||||
perro es un mamifero
|
||||
gato es un mamifero
|
||||
raton es un mamifero
|
||||
"""
|
||||
for animal in ["perro", "gato", "raton"]:
|
||||
# Puedes usar % para interpolar strings formateados
|
||||
print "%s es un mamifero" % animal
|
||||
|
||||
"""
|
||||
`range(número)` retorna una lista de números
|
||||
desde cero hasta el número dado
|
||||
imprime:
|
||||
0
|
||||
1
|
||||
2
|
||||
3
|
||||
"""
|
||||
for i in range(4):
|
||||
print i
|
||||
|
||||
"""
|
||||
While itera hasta que una condición no se cumple.
|
||||
imprime:
|
||||
0
|
||||
1
|
||||
2
|
||||
3
|
||||
"""
|
||||
x = 0
|
||||
while x < 4:
|
||||
print x
|
||||
x += 1 # versión corta de x = x + 1
|
||||
|
||||
# Maneja excepciones con un bloque try/except
|
||||
|
||||
# Funciona desde Python 2.6 en adelante:
|
||||
try:
|
||||
# Usa raise para levantar un error
|
||||
raise IndexError("Este es un error de indice")
|
||||
except IndexError as e:
|
||||
pass # Pass no hace nada. Usualmente harias alguna recuperacion aqui.
|
||||
|
||||
|
||||
####################################################
|
||||
## 4. Funciones
|
||||
####################################################
|
||||
|
||||
# Usa 'def' para crear nuevas funciones
|
||||
def add(x, y):
|
||||
print "x es %s y y es %s" % (x, y)
|
||||
return x + y # Retorna valores con una la declaración return
|
||||
|
||||
# Llamando funciones con parámetros
|
||||
add(5, 6) #=> imprime "x es 5 y y es 6" y retorna 11
|
||||
|
||||
# Otra forma de llamar funciones es con argumentos de palabras claves
|
||||
add(y=6, x=5) # Argumentos de palabra clave pueden ir en cualquier orden.
|
||||
|
||||
# Puedes definir funciones que tomen un número variable de argumentos
|
||||
def varargs(*args):
|
||||
return args
|
||||
|
||||
varargs(1, 2, 3) #=> (1,2,3)
|
||||
|
||||
|
||||
# Puedes definir funciones que toman un número variable de argumentos
|
||||
# de palabras claves
|
||||
def keyword_args(**kwargs):
|
||||
return kwargs
|
||||
|
||||
# Llamémosla para ver que sucede
|
||||
keyword_args(pie="grande", lago="ness") #=> {"pie": "grande", "lago": "ness"}
|
||||
|
||||
# Puedes hacer ambas a la vez si quieres
|
||||
def todos_los_argumentos(*args, **kwargs):
|
||||
print args
|
||||
print kwargs
|
||||
"""
|
||||
todos_los_argumentos(1, 2, a=3, b=4) imprime:
|
||||
(1, 2)
|
||||
{"a": 3, "b": 4}
|
||||
"""
|
||||
|
||||
# ¡Cuando llames funciones, puedes hacer lo opuesto a varargs/kwargs!
|
||||
# Usa * para expandir tuplas y usa ** para expandir argumentos de palabras claves.
|
||||
args = (1, 2, 3, 4)
|
||||
kwargs = {"a": 3, "b": 4}
|
||||
todos_los_argumentos(*args) # es equivalente a foo(1, 2, 3, 4)
|
||||
todos_los_argumentos(**kwargs) # es equivalente a foo(a=3, b=4)
|
||||
todos_los_argumentos(*args, **kwargs) # es equivalente a foo(1, 2, 3, 4, a=3, b=4)
|
||||
|
||||
# Python tiene funciones de primera clase
|
||||
def crear_suma(x):
|
||||
def suma(y):
|
||||
return x + y
|
||||
return suma
|
||||
|
||||
sumar_10 = crear_suma(10)
|
||||
sumar_10(3) #=> 13
|
||||
|
||||
# También hay funciones anónimas
|
||||
(lambda x: x > 2)(3) #=> True
|
||||
|
||||
# Hay funciones integradas de orden superior
|
||||
map(sumar_10, [1,2,3]) #=> [11, 12, 13]
|
||||
filter(lambda x: x > 5, [3, 4, 5, 6, 7]) #=> [6, 7]
|
||||
|
||||
# Podemos usar listas por comprensión para mapeos y filtros agradables
|
||||
[add_10(i) for i in [1, 2, 3]] #=> [11, 12, 13]
|
||||
[x for x in [3, 4, 5, 6, 7] if x > 5] #=> [6, 7]
|
||||
|
||||
####################################################
|
||||
## 5. Clases
|
||||
####################################################
|
||||
|
||||
# Heredamos de object para obtener una clase.
|
||||
class Humano(object):
|
||||
|
||||
# Un atributo de clase es compartido por todas las instancias de esta clase
|
||||
especie = "H. sapiens"
|
||||
|
||||
# Constructor basico
|
||||
def __init__(self, nombre):
|
||||
# Asigna el argumento al atributo nombre de la instancia
|
||||
self.nombre = nombre
|
||||
|
||||
# Un metodo de instancia. Todos los metodos toman self como primer argumento
|
||||
def decir(self, msg):
|
||||
return "%s: %s" % (self.nombre, msg)
|
||||
|
||||
# Un metodo de clase es compartido a través de todas las instancias
|
||||
# Son llamados con la clase como primer argumento
|
||||
@classmethod
|
||||
def get_especie(cls):
|
||||
return cls.especie
|
||||
|
||||
# Un metodo estatico es llamado sin la clase o instancia como referencia
|
||||
@staticmethod
|
||||
def roncar():
|
||||
return "*roncar*"
|
||||
|
||||
|
||||
# Instancia una clase
|
||||
i = Humano(nombre="Ian")
|
||||
print i.decir("hi") # imprime "Ian: hi"
|
||||
|
||||
j = Humano("Joel")
|
||||
print j.decir("hello") #imprime "Joel: hello"
|
||||
|
||||
# Llama nuestro método de clase
|
||||
i.get_especie() #=> "H. sapiens"
|
||||
|
||||
# Cambia los atributos compartidos
|
||||
Humano.especie = "H. neanderthalensis"
|
||||
i.get_especie() #=> "H. neanderthalensis"
|
||||
j.get_especie() #=> "H. neanderthalensis"
|
||||
|
||||
# Llama al método estático
|
||||
Humano.roncar() #=> "*roncar*"
|
||||
|
||||
|
||||
####################################################
|
||||
## 6. Módulos
|
||||
####################################################
|
||||
|
||||
# Puedes importar módulos
|
||||
import math
|
||||
print math.sqrt(16) #=> 4
|
||||
|
||||
# Puedes obtener funciones específicas desde un módulo
|
||||
from math import ceil, floor
|
||||
print ceil(3.7) #=> 4.0
|
||||
print floor(3.7) #=> 3.0
|
||||
|
||||
# Puedes importar todas las funciones de un módulo
|
||||
# Precaución: Esto no es recomendable
|
||||
from math import *
|
||||
|
||||
# Puedes acortar los nombres de los módulos
|
||||
import math as m
|
||||
math.sqrt(16) == m.sqrt(16) #=> True
|
||||
|
||||
# Los módulos de Python son sólo archivos ordinarios de Python.
|
||||
# Puedes escribir tus propios módulos e importarlos. El nombre del módulo
|
||||
# es el mismo del nombre del archivo.
|
||||
|
||||
# Puedes encontrar que funciones y atributos definen un módulo.
|
||||
import math
|
||||
dir(math)
|
||||
|
||||
|
||||
```
|
||||
|
||||
## ¿Listo para más?
|
||||
|
||||
### Gratis y en línea
|
||||
|
||||
* [Learn Python The Hard Way](http://learnpythonthehardway.org/book/)
|
||||
* [Dive Into Python](http://www.diveintopython.net/)
|
||||
* [The Official Docs](http://docs.python.org/2.6/)
|
||||
* [Hitchhiker's Guide to Python](http://docs.python-guide.org/en/latest/)
|
||||
* [Python Module of the Week](http://pymotw.com/2/)
|
||||
|
||||
### Encuadernados
|
||||
|
||||
* [Programming Python](http://www.amazon.com/gp/product/0596158106/ref=as_li_qf_sp_asin_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=0596158106&linkCode=as2&tag=homebits04-20)
|
||||
* [Dive Into Python](http://www.amazon.com/gp/product/1441413022/ref=as_li_tf_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1441413022&linkCode=as2&tag=homebits04-20)
|
||||
* [Python Essential Reference](http://www.amazon.com/gp/product/0672329786/ref=as_li_tf_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=0672329786&linkCode=as2&tag=homebits04-20)
|
||||
|
Loading…
Reference in New Issue
Block a user