Documentos de Académico
Documentos de Profesional
Documentos de Cultura
3: Sangría de bloque
Python usa sangría para definir construcciones de control y bucle. Esto contribuye a la legibilidad
de Python; sin embargo, requiere que el programador preste mucha atención al uso de espacios en
blanco. Por lo tanto, una mala calibración del editor podría provocar que el código se comporte de
forma inesperada.
Python usa el símbolo de dos puntos (:) y la sangría para mostrar dónde comienzan y terminan los
bloques de código (si viene de otro idioma, no confunda esto con estar relacionado de alguna
manera con el operador ternario). Es decir, los bloques en Python, como funciones, bucles,
cláusulas if y otras construcciones, no tienen identificadores finales. Todos los bloques comienzan
con dos puntos y luego contienen las líneas sangradas debajo.
Por ejemplo:
def mi_función(): a = 2
devolver un
# Esta es una definición de función. Tenga en cuenta los dos puntos (:)
# Esta línea pertenece a la función porque tiene sangría # Esta línea también pertenece a la misma
función
si a > b:
imprimir(a)
demás:
imprimir(b)
# Esto es parte del bloque if # else debe estar en el mismo nivel que if
Los bloques que contienen exactamente una declaración de una sola línea se pueden colocar en la
misma línea, aunque esta forma generalmente no se considera un buen estilo:
si x > y: y = x print(y) #
Usar pestañas exclusivamente es posible pero PEP 8, la guía de estilo para el código Python,
establece que se prefieren los espacios.
Python 3 no permite mezclar el uso de tabulaciones y espacios para sangría. En tal caso, se genera
un error en tiempo de compilación: uso inconsistente de tabulaciones y espacios en sangría y el
programa no se ejecutará.
Citando a PEP 8:
El carácter de tabulación debe configurarse para mostrar 8 espacios, para que coincida con la
semántica del idioma, al menos en los casos en que es posible una sangría mixta (accidental). Los
editores también pueden convertir automáticamente el carácter de tabulación a
espacios.
Sin embargo, puede resultar útil configurar el editor para que al presionar la tecla Tab se inserten 4
espacios, en lugar de insertar un carácter de tabulación.
El código fuente de Python escrito con una combinación de tabulaciones y espacios, o con un
número no estándar de espacios de sangría, se puede hacer compatible con pep8 usando
autopep8. (Una alternativa menos poderosa viene con la mayoría de las instalaciones de Python:
reindent.py)
Sección 1.4: Tipos de datos
bool: un valor booleano de Verdadero o Falso. Las operaciones lógicas como y o no se pueden
realizar en valores booleanos.
no x
En Python 2.x y Python 3.x, un booleano también es un int. El tipo bool es una subclase del tipo int
y Verdadero y Falso son sus únicas instancias:
Verdadero + Falso == 1 # 1 + 0 == 1
Verdadero * Verdadero == 1 # 1 * 1 == 1
Números
a=2
b = 100
c = 123456789 d
= 38563846326424324
Nota: en versiones anteriores de Python, estaba disponible un tipo largo y era distinto de int. Los
dos se han unificado.
a = 2.0 b
= 100.e0
c = 123456789.e1
a = 2 + 1j b
= 100 + 10j
Los operadores <, <=, > y >= generarán una excepción TypeError cuando cualquier operando sea un
número complejo.
Cadenas
str: una cadena Unicode. El tipo de bytes de 'hola' : una cadena de bytes. El tipo de b'hola'
Secuencias y colecciones.
Python diferencia entre secuencias ordenadas y colecciones desordenadas (como set y dict).
a = invertido('hola')
a = (1, 2, 3) b =
a = [1, 2, 3] b =
['a', 1, 'python', (1, 2), [1, 2]] b[2] = 'algo más' # permitido
No hashable; mudable.
conjunto: una colección desordenada de valores únicos. Los elementos deben ser hash.
un = {1, 2, 'un'}
dict: una colección desordenada de pares clavevalor únicos; las claves deben ser hash.
a = {1: 'uno', 2:
'dos'}
cadena'}
Un objeto es hash si tiene un valor hash que nunca cambia durante su vida (necesita un método
hash () ) y se puede comparar con otros objetos (necesita un método eq () ). Los objetos hash que
comparan igualdad deben tener el mismo valor hash.
Constantes incorporadas
Junto con los tipos de datos integrados, hay una pequeña cantidad de constantes integradas en el
espacio de nombres integrado:
Verdadero: el valor verdadero del tipo incorporado bool. Falso: el valor falso del tipo incorporado
bool.
Ninguno: un objeto singleton utilizado para señalar que un valor está ausente.
Elipsis o ...: utilizado en el núcleo de Python3+ en cualquier lugar y uso limitado en Python2.7+
como parte de la notación de matriz. Los paquetes numpy y relacionados usan esto como una
referencia para "incluir todo" en las matrices.
NotImplemented: un singleton usado para indicarle a Python que un método especial no admite
los argumentos específicos, y Python probará alternativas si están disponibles.
a = Ninguno # No se asignará ningún valor. Cualquier tipo de datos válido se puede asignar más
tarde
Ninguno no tiene ningún orden natural. El uso de operadores de comparación de pedidos (<, <=,
>=, >) ya no se admite y generará un TypeError.
Ninguno es siempre menor que cualquier número (Ninguno < 32 se evalúa como Verdadero).
En Python, podemos verificar el tipo de datos de un objeto usando el tipo de función incorporada.
a = '123'
imprimir(tipo(b))
En declaraciones condicionales es posible probar el tipo de datos con isinstance. Sin embargo,
normalmente no se recomienda confiar en el tipo de variable.
yo = 7
i es instancia(i, int): yo += 1
Para obtener información sobre las diferencias entre type() e isinstance() lea: Diferencias entre
isinstance y type en Python
x = Ninguno
si x es Ninguno:
Por ejemplo, '123' es de tipo str y se puede convertir a un número entero usando la función int .
a = '123' b =
int(a)
La conversión desde una cadena flotante como '123.456' se puede realizar utilizando la función
flotante .
a = '123.456' b =
float(a) c = int(a) #
ValueError: literal no válido para int() con base 10: '123.456' d = int(b) # 123
a = 'hola' lista(a)
# ['h', 'e', 'l', 'l', 'o'] set(a) # {'o', 'e', 'l', ' h'} tupla(a) # ('h', 'e', 'l', 'l', 'o')
Con etiquetas de una letra justo delante de las comillas, puede saber qué tipo de cadena desea
definir.
b'foo bar': resultados bytes en Python 3, str en Python 2 u'foo bar': resultados str en Python 3,
unicode en Python 2 'foo bar': resultados str
r'foo bar': resultados de la llamada cadena sin formato, donde no es necesario escapar de
caracteres especiales, todo se toma palabra por palabra a medida que escribe
# bar
crudo
Un objeto se llama mutable si se puede cambiar. Por ejemplo, cuando pasa una lista a alguna
función, la lista se puede cambiar:
def f(m):
x = [1, 2] f(x) x
== [1,
Un objeto se llama inmutable si no se puede cambiar de ninguna manera. Por ejemplo, los
números enteros son inmutables, ya que no hay forma de cambiarlos:
2) g(x) x == (1,
2) #
Siempre será Verdadero, ya que ninguna función puede cambiar el objeto (1, 2)
Tenga en cuenta que las variables en sí son mutables, por lo que podemos reasignar la variable x,
pero esto no cambia el objeto al que x había apuntado previamente. Solo hizo que x apuntara a un
nuevo objeto.
Los tipos de datos cuyas instancias son mutables se denominan tipos de datos mutables, y lo
mismo ocurre con los objetos y tipos de datos inmutables.
cadena
tupla de bytes
conjunto congelado
colocar
dictar
Hay varios tipos de colecciones en Python. Mientras que tipos como int y str contienen un único
valor, los tipos de colección contienen varios valores.
Lista
lista_vacia = []
Los elementos de una lista no están restringidos a un único tipo de datos, lo cual tiene sentido
dado que Python es un lenguaje dinámico:
# Craig
Los índices también pueden ser negativos, lo que significa contar desde el final de la lista (siendo 1
el índice del último elemento). Entonces, usando la lista del ejemplo anterior:
Las listas son mutables, por lo que puedes cambiar los valores en una lista:
print(nombres)
nombres.remove("Bob")
dieciséis
Obtenga el índice en la lista del primer elemento cuyo valor es x. Mostrará un error si no existe
dicho elemento.
nombre.index("Alicia") 0
len(nombres) 6
a = [1, 1, 1, 2, 3, 4] a.cuenta(1) 3
invertir la lista
a.reverse() [4, 3,
2, 1, 1, 1] # o a[::1] [4, 3, 2, 1,
1, 1]
Eliminar y devolver el artículo en el índice (el valor predeterminado es el último artículo) con
L.pop([índice]), devuelve el artículo
Tuplas
Una tupla es similar a una lista excepto que tiene una longitud fija y es inmutable. Por lo tanto, los
valores de la tupla no se pueden cambiar ni agregar o eliminar valores de la tupla. Las tuplas se
utilizan comúnmente para pequeñas colecciones de valores que no será necesario cambiar, como
una dirección IP y un puerto. Las tuplas se representan entre paréntesis en lugar de corchetes:
Las mismas reglas de indexación para listas también se aplican a las tuplas. Las tuplas también se
pueden anidar y los valores pueden ser cualquier Python válido.
Una tupla con un solo miembro debe definirse (tenga en cuenta la coma) de esta manera:
Diccionarios
capitales_estado = {
}
Para obtener un valor, consúltelo por su clave:
ca_capital = capitales_estado['California']
También puedes obtener todas las claves en un diccionario y luego iterar sobre ellas:
para k en state_capitals.keys():
Los diccionarios se parecen mucho a la sintaxis JSON. El módulo json nativo de la biblioteca
estándar de Python se puede utilizar para convertir entre JSON y diccionarios.
colocar
Un conjunto es una colección de elementos sin repeticiones y sin orden de inserción pero sí
ordenados. Se utilizan en situaciones en las que sólo es importante que algunas cosas estén
agrupadas y no el orden en que se incluyeron. Para grandes grupos de datos, es mucho más rápido
comprobar si un elemento está o no en un conjunto que hacer lo mismo con una lista.
mi_lista = [1,2,3]
mi_conjunto = conjunto(mi_lista)
imprimir (nombre)
Puede iterar sobre un conjunto exactamente como una lista, pero recuerde: los valores estarán en
un orden arbitrario definido por la implementación.
dictamen predeterminado
Un defaultdict es un diccionario con un valor predeterminado para las claves, de modo que se
pueda acceder sin errores a las claves para las que no se ha definido explícitamente ningún valor.
defaultdict es especialmente útil cuando los valores en el diccionario son colecciones (listas,
dictados, etc.) en el sentido de que no es necesario inicializarlo cada vez que se usa una nueva
clave.
Un defaultdict nunca generará un KeyError. Cualquier clave que no exista obtiene el valor
predeterminado.
Si intentamos acceder a una clave inexistente, Python nos devuelve un error de la siguiente
manera