Pytohn Monografia
Pytohn Monografia
Pytohn Monografia
ocultar
Inicio
Historia
Características y paradigmas
Filosofía
Modo interactivo
Elementos del lenguaje y sintaxis
Alternar subsección Elementos del lenguaje y sintaxis
Sistema de objetos
Biblioteca estándar
Implementaciones
Incidencias
Véase también
Referencias
Bibliografía
Enlaces externos
Python
108 idiomas
Artículo
Discusión
Leer
Editar
Ver historial
Herramientas
Apariencia
ocultar
Texto
Pequeño
Estándar
Grande
Este artículo trata sobre el lenguaje de programación. Para el grupo de
humoristas, véase Monty Python.
Para el revólver, véase Colt Python.
Para la serpiente, véase Pythonidae.
Para otros usos de este término, véase Pitón.
Python
Desarrollador(es)
Información general
Apareció 1991
en
Ha influido Boo,
a Cobra, D, Falcon, Genie, Groovy, Ruby, Java
Script, Cython, Go Latino
Sistema Multiplataforma
operativo
Código Python
con coloreado de sintaxis
Python 2.1 fue un trabajo derivado de las versiones 1.6.1 y 2.0. Es a partir de
este momento que Python Software Foundation (PSF) pasa a dirigir el
proyecto, organizada como una organización sin ánimo de lucro fundada en el
año 2001, tomando como modelo a la Apache Software Foundation.3 Incluida
con este lanzamiento estuvo una implementación del alcance de variables más
parecida a las reglas del static scoping originado por Scheme.16
Una innovación mayor en Python 2.2 fue la unificación de los tipos en Python
(tipos escritos en C), y clases (tipos escritos en Python) dentro de una
jerarquía. Esa unificación logró un modelo de objetos de Python puro y
consistente.17 También fueron agregados los generadores, que fueron
inspirados por el lenguaje Icon.18
Las adiciones a la biblioteca estándar de Python y las decisiones sintácticas
fueron influenciadas fuertemente por Java en algunos casos: el
paquete logging,19 introducido en la versión 2.3, está basado en log4j; el
parser SAX, introducido en 2.0; el paquete threading,20 cuya
clase Thread expone un subconjunto de la interfaz de la clase homónima en
Java.
Python 2.7.x (última versión de la serie Python 2.x) fue oficialmente
descontinuado el 1 de enero de 2020 (paso inicialmente planeado para 2015),
por lo que ya no se publicarán parches de seguridad y otras mejoras para él.2122
Con el final del ciclo de vida de Python 2, solo tienen soporte la rama Python
3.6.x23 y posteriores.
Con Python 3.5 llegaría el soporte incluido para entrada/salida asíncrona a
través de la biblioteca asyncio, orientada a aplicaciones que requieren alto
rendimiento de código concurrente, como servidores web, bibliotecas de
conexión de bases de datos y colas de tareas distribuidas.24
En la actualidad, Python se aplica en los campos de inteligencia
artificial y machine learning.25
Características y paradigmas[editar]
Python es un lenguaje de programación multiparadigma. Esto significa que más
que forzar a los programadores a adoptar un estilo particular de programación,
permite varios estilos: programación orientada a objetos, programación
imperativa y programación funcional. Otros paradigmas están soportados
mediante el uso de extensiones.
Python usa tipado dinámico y conteo de referencias para la gestión de
memoria.
Una característica importante de Python es la resolución dinámica de nombres;
es decir, lo que enlaza un método y un nombre de variable durante la ejecución
del programa (también llamado enlace dinámico de métodos).
Otro objetivo del diseño del lenguaje es la facilidad de extensión. Se pueden
escribir nuevos módulos fácilmente en C o C++. Python puede incluirse en
aplicaciones que necesitan una interfaz programable.26
Aunque la programación en Python podría considerarse en algunas situaciones
hostil a la programación funcional tradicional expuesta por Lisp, existen
bastantes analogías entre Python y los lenguajes minimalistas de la familia Lisp
(como Scheme).
Filosofía[editar]
Los usuarios de Python se refieren a menudo a la filosofía de Python, que es
bastante similar a la filosofía de Unix. El código que siga los principios de
Python es reconocido como "pythónico". Estos principios fueron descritos por el
desarrollador de Python Tim Peters en El Zen de Python:
Comentarios[editar]
Los comentarios se pueden poner de dos formas. La primera y más apropiada
para comentarios largos es utilizando la notación ''' comentario ''', tres
apóstrofos de apertura y tres de cierre. La segunda notación utiliza el
símbolo #, que se extiende hasta el final de la línea.
El intérprete no tiene en cuenta los comentarios, lo cual es útil si deseamos
poner información adicional en el código. Por ejemplo, una explicación sobre el
comportamiento de una sección del programa.
'''
Comentario más largo en una línea en Python
'''
print("Hola mundo") # También es posible añadir un comentario al
final de una línea de código
Variables[editar]
Las variables se definen de forma dinámica, lo que significa que no se tiene
que especificar cuál es su tipo de antemano y puede tomar distintos valores en
otro momento, incluso de un tipo diferente al que tenía previamente. Se usa el
símbolo = para asignar valores.
x = 1
x = "texto" # Esto es posible porque los tipos son asignados
dinámicamente
A partir de Python 3.10 existen también soft keywords, palabras que son
reservadas en ciertos contextos, pero que normalmente pueden ser usadas
como nombres de variables. Estos identificadores son match, case y _.
Tipos de datos[editar]
Mutable, puede
[4.0, 'Cadena',
list Secuencia contener objetos de True]
diversos tipos
Inmutable, puede
(4.0, 'Cadena',
tuple Secuencia contener objetos de True)
diversos tipos
Inmutable, sin
frozenset([4.0,
frozenset Conjunto orden, no contiene 'Cadena', True])
duplicados
Coma flotante de
float Número decimal 3.1415927
doble precisión
Valor booleano
bool Booleano True o False
(verdadero o falso)
Mutable: si su contenido (o dicho valor) puede cambiarse en tiempo
de ejecución.
Inmutable: si su contenido (o dicho valor) no puede cambiarse en
tiempo de ejecución.
Condicionales[editar]
Una sentencia condicional ejecuta su bloque de código interno solo si se
cumple cierta condición. Se define usando la palabra clave if seguida de la
condición y el bloque de código. Si existen condiciones adicionales, se
introducen usando la palabra clave elif seguida de la condición y su bloque de
código. Las condiciones se evalúan de manera secuencial hasta encontrar la
primera que sea verdadera, y su bloque de código asociado es el único que se
ejecuta. Opcionalmente, puede haber un bloque final (la palabra clave else,
seguida de un bloque de código) que se ejecuta solo cuando todas las
condiciones anteriores fueron falsas.
>>> verdadero = True
>>> if verdadero: # No es necesario poner "verdadero == True"
... print("Verdadero")
... else:
... print("Falso")
...
Verdadero
>>> lenguaje = "Python"
>>> if lenguaje == "C": # lenguaje no es "C", por lo que este bloque
se obviará y evaluará la siguiente condición
... print("Lenguaje de programación: C")
... elif lenguaje == "Python": # Se pueden añadir tantos bloques
"elif" como se quiera
... print("Lenguaje de programación: Python")
... else: # En caso de que ninguna de las anteriores condiciones
fuera cierta, se ejecutaría este bloque
... print("Lenguaje de programación: indefinido")
...
Lenguaje de programación: Python
>>> if verdadero and lenguaje == "Python": # Uso de "and" para
comprobar que ambas condiciones son verdaderas
... print("Verdadero y Lenguaje de programación: Python")
...
Verdadero y Lenguaje de programación: Python
Bucle for[editar]
El bucle for es similar a foreach en otros lenguajes. Recorre un objeto iterable,
como una lista, una tupla o un generador, y por cada elemento del iterable
ejecuta el bloque de código interno. Se define con la palabra clave for seguida
de un nombre de variable, seguido de in, seguido del iterable, y finalmente el
bloque de código interno. En cada iteración, el elemento siguiente del iterable
se asigna al nombre de variable especificado:
>>> lista = ["a", "b", "c"]
>>> for i in lista: # Iteramos sobre una lista, que es iterable
... print(i)
...
a
b
c
>>> cadena = "abcdef"
>>> for i in cadena: # Iteramos sobre una cadena, que también es
iterable
... print(i, end=', ') # Añadiendo end=', ' al final hacemos que
no introduzca un salto de línea, sino una coma y un espacio
...
a, b, c, d, e, f,
Bucle while[editar]
El bucle while evalúa una condición y, si es verdadera, ejecuta el bloque de
código interno. Continúa evaluando y ejecutando mientras la condición sea
verdadera. Se define con la palabra clave while seguida de la condición, y a
continuación el bloque de código interno:
>>> numero = 0
>>> while numero < 10:
... print(numero, end=" ")
... numero += 1 # Un buen programador modificará las variables de
control al finalizar el ciclo while
...
0 1 2 3 4 5 6 7 8 9
Listas y Tuplas[editar]
Para declarar una lista se usan los corchetes [], en cambio, para
declarar una tupla se usan los paréntesis (). En ambas los
elementos se separan por comas, y en el caso de las tuplas es
necesario que tengan como mínimo una coma.
Tanto las listas como las tuplas pueden contener elementos de
diferentes tipos. No obstante, las listas suelen usarse para elementos
del mismo tipo en cantidad variable mientras que las tuplas se
reservan para elementos distintos en cantidad fija.
Para acceder a los elementos de una lista o tupla se utiliza un índice
entero (empezando por "0", no por "1"). Se pueden utilizar índices
negativos para acceder elementos a partir del final.
Las listas se caracterizan por ser mutables, es decir, se puede
cambiar su contenido en tiempo de ejecución, mientras que
las tuplas son inmutables ya que no es posible modificar el contenido
una vez creadas.
Listas
>>> lista = ["abc", 42, 3.1415]
>>> lista[0] # Acceder a un elemento por su índice
'abc'
>>> lista[-1] # Acceder a un elemento usando un índice negativo
3.1415
>>> lista.append(True) # Añadir un elemento al final de la lista
>>> lista
['abc', 42, 3.1415, True]
>>> del lista[3] # Borra un elemento de la lista usando un índice (en
este caso: True)
>>> lista[0] = "xyz" # Re-asignar el valor del primer elemento de la
lista
>>> lista[0:2] # Mostrar los elementos de la lista del índice "0" al
"2" (sin incluir este último)
['xyz', 42]
>>> lista_anidada = [lista, [True, 42]] # Es posible anidar listas
>>> lista_anidada
[['xyz', 42, 3.1415], [True, 42]]
>>> lista_anidada[1][0] # Acceder a un elemento de una lista dentro
de otra lista (del segundo elemento, mostrar el primer elemento)
True
Tuplas
>>> tupla = ("abc", 42, 3.1415)
>>> tupla[0] # Acceder a un elemento por su índice
'abc'
>>> del tupla[0] # No es posible borrar (ni añadir) un elemento en
una tupla, lo que provocará una excepción
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object doesn't support item deletion
>>> tupla[0] = "xyz" # Tampoco es posible re-asignar el valor de un
elemento en una tupla, lo que también provocará una excepción
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>> tupla[0:2] # Mostrar los elementos de la tupla del índice "0" al
"2" (sin incluir este último)
('abc', 42)
>>> tupla_anidada = (tupla, (True, 3.1415)) # También es posible
anidar tuplas
>>> 1, 2, 3, "abc" # Esto también es una tupla, aunque es
recomendable ponerla entre paréntesis (recuerde que requiere, al
menos, una coma)
(1, 2, 3, 'abc')
>>> (1) # Aunque se encuentra entre paréntesis, esto no es una tupla,
ya que no posee al menos una coma, por lo que únicamente aparecerá el
valor
1
>>> (1,) # En cambio, en este otro caso, sí es una tupla
(1,)
>>> (1, 2) # Con más de un elemento no es necesaria la coma final
(1, 2)
>>> (1, 2,) # Aunque agregarla no modifica el resultado
(1, 2)
Diccionarios[editar]
Para declarar un diccionario se usan las llaves {}. Contienen
elementos separados por comas, donde cada elemento está formado
por un par clave:valor (el símbolo : separa la clave de su valor
correspondiente).
Los diccionarios son mutables, es decir, se puede cambiar el
contenido de un valor en tiempo de ejecución.
En cambio, las claves de un diccionario deben ser inmutables. Esto
quiere decir, por ejemplo, que no podremos usar ni listas ni
diccionarios como claves.
El valor asociado a una clave puede ser de cualquier tipo de dato,
incluso un diccionario.
>>> diccionario = {"cadena": "abc", "numero": 42, "lista": [True, 42]}
# Diccionario que tiene diferentes valores por cada clave, incluso una
lista
>>> diccionario["cadena"] # Usando una clave, se accede a su valor
'abc'
>>> diccionario["lista"][0] # Acceder a un elemento de una lista
dentro de un valor (del valor de la clave "lista", mostrar el primer
elemento)
True
>>> diccionario["cadena"] = "xyz" # Re-asignar el valor de una clave
>>> diccionario["cadena"]
'xyz'
>>> diccionario["decimal"] = 3.1415927 # Insertar un nuevo elemento
clave:valor
>>> diccionario["decimal"]
3.1415927
>>> diccionario_mixto = {"tupla": (True, 3.1415), "diccionario":
diccionario} # También es posible que un valor sea un diccionario
>>> diccionario_mixto["diccionario"]["lista"][1] # Acceder a un
elemento dentro de una lista, que se encuentra dentro de un
diccionario
42
>>> diccionario = {("abc",): 42} # Sí es posible que una clave sea
una tupla, pues es inmutable
>>> diccionario = {["abc"]: 42} # No es posible que una clave sea una
lista, pues es mutable, lo que provocará una excepción
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
Sentencia match-case[editar]
Python cuenta con la estructura match-case desde la versión 3.10. Esta tiene el
nombre de Structural Pattern Matching.
match variable:
case condicion:
# codigo
case condicion:
# codigo
case condicion:
# codigo
case _:
# codigo
@dataclass
class Punto:
x: int
y: int
match coordenada:
case Punto(x=10, y=40): # los atributos "x" e "y" tienen el
valor specificado
print("Coordenada 10, 40")
case Punto(): # si es una instancia de Punto
print("es un punto")
case _: # ninguna condición cumplida (default)
print("No es un punto")
Podríamos decir que el lado negativo de la sentencia armada con if, elif y else
es que si la lista de posibles operaciones es muy larga, las tiene que recorrer
una por una hasta llegar a la correcta.
Usando diccionarios[editar]
Podemos usar un diccionario para el mismo ejemplo:
>>> def calculo(op, a, b):
... return {
... 'sum': lambda: a + b,
... 'rest': lambda: a - b,
... 'mult': lambda: a * b,
... 'div': lambda: a/b
... }.get(op, lambda: None)()
>>>
>>> print(calculo('sum',3,4))
7
De esta manera, si las opciones fueran muchas, no recorrería todas; solo iría
directamente a la operación buscada en la última línea (.get(op, lambda:
None)()) y estaríamos dando una opción por defecto. El motivo por el que se
usan expresiones lambda dentro del diccionario es para prevenir la ejecución
de las instrucciones que contienen a la hora de definir el diccionario. Este
únicamente define funciones como valores del diccionario, y posteriormente, al
obtener estas mediante get(), se llama a la función, ejecutando la expresión
que esta contiene.
Conjuntos[editar]
Los conjuntos se construyen mediante la expresión set(items),
donde items es cualquier objeto iterable, como listas o tuplas. Los
conjuntos no mantienen el orden ni contienen elementos duplicados.
Se suelen utilizar para eliminar duplicados de una secuencia, o para
operaciones matemáticas
como intersección, unión, diferencia y diferencia simétrica.
>>> conjunto_inmutable = frozenset(["a", "b", "a"]) # Se utiliza una
lista como objeto iterable
>>> conjunto_inmutable
frozenset(['a', 'b'])
>>> conjunto1 = set(["a", "b", "a"]) # Primer conjunto mutable
>>> conjunto1
set(['a', 'b'])
>>> conjunto2 = set(["a", "b", "c", "d"]) # Segundo conjunto mutable
>>> conjunto2
set(['a', 'c', 'b', 'd']) # Los conjuntos no mantienen el orden, como
los diccionarios
>>> conjunto1 & conjunto2 # Intersección
set(['a', 'b'])
>>> conjunto1 | conjunto2 # Unión
set(['a', 'c', 'b', 'd'])
>>> conjunto1 - conjunto2 # Diferencia (1)
set([])
>>> conjunto2 - conjunto1 # Diferencia (2)
set(['c', 'd'])
>>> conjunto1 ^ conjunto2 # Diferencia simétrica
set(['c', 'd'])
Listas por comprensión[editar]
Una lista por comprensión (en inglés list comprehension) es una expresión
compacta para definir listas. Al igual que lambda, aparece en lenguajes
funcionales. Ejemplos:
>>> range(5) # La función range devuelve una lista, empezando en 0 y
terminando con el número indicado menos uno
[0, 1, 2, 3, 4]
>>> [i * i for i in range(5)] # Por cada elemento del rango, lo
multiplica por sí mismo y lo agrega al resultado
[0, 1, 4, 9, 16]
>>> lista = [(i, i + 2) for i in range(5)]
>>> lista
[(0, 2), (1, 3), (2, 4), (3, 5), (4, 6)]
Funciones[editar]
Las funciones se definen con la palabra clave def, seguida del
nombre de la función y sus parámetros. Otra forma de escribir
funciones, aunque menos utilizada, es con la palabra
clave lambda (que aparece en lenguajes funcionales como Lisp).
El valor devuelto en las funciones con def será el dado con la
instrucción return.
Las funciones pueden recibir parámetros especiales para manejar el
exceso de argumentos.
El parámetro *args recibe como una tupla un número
variable de argumentos posicionales.
El parámetro **kwargs recibe como un diccionario un
número variable de argumentos por palabras clave.
def:
>>> def suma(x, y=2):
... return x + y # Retornar la suma del valor de la variable "x"
y el valor de "y"
...
>>> suma(4) # La variable "y" no se modifica, siendo su valor: 2
6
>>> suma(4, 10) # La variable "y" sí se modifica, siendo su nuevo
valor: 10
14
*args:
>>> def suma(*args):
... resultado = 0
... # Se itera la tupla de argumentos
... for num in args:
... resultado += num # Suma todos los argumentos
... return resultado # Retorna el resultado de la suma
...
>>> suma(2, 4)
6
>>> suma(1, 3, 5, 7, 9) # No importa el número de variables
posicionales que se pasen a la función
25
**kwargs:
def suma(**kwargs):
... resultado = 0
... # Se itera el diccionario de argumentos
... for key, value in kwargs.items():
... resultado += value # Suma todos los valores de los
argumentos
... return resultado
...
>>>suma(x=1, y=3)
4
>>>suma(x=2, y=4, z=6) # No importa el número de variables por clave
que se pasen a la función
12
lambda:
>>> suma = lambda x, y=2: x + y
>>> suma(4) # La variable "y" no se modifica, siendo su valor: 2
6
>>> suma(4, 10) # La variable "y" sí se modifica, siendo su nuevo
valor: 10
14
Clases[editar]
Las clases se definen con la palabra clave class, seguida del
nombre de la clase y, si hereda de otras clases, los nombres de
estas.
En Python 2.x era recomendable que una clase heredase de object,
en Python 3.x ya no hace falta.
En una clase, un método equivale a una función, y
un atributo equivale a una variable.36
__init__ es un método especial que se ejecuta al instanciar la clase,
se usa generalmente para inicializar atributos y ejecutar métodos
necesarios. Al igual que todos los métodos en Python, debe tener al
menos un parámetro (generalmente se utiliza self). El resto de
parámetros serán los que se indiquen al instanciar la clase.
Los atributos que se desee que sean accesibles desde fuera de la
clase se deben declarar usando self. delante del nombre.
En Python no existe el concepto de encapsulamiento37, por lo que el
programador debe ser responsable de asignar los valores a los
atributos.
>>> class Persona():
... def __init__(self, nombre, edad):
... self.nombre = nombre # Un atributo cualquiera
... self.edad = edad # Otro atributo cualquiera
... def mostrar_edad(self): # Es necesario que, al menos, tenga
un parámetro, generalmente self
... print(self.edad) # mostrando un atributo
... def modificar_edad(self, edad): # Modificando edad
... if 0 > edad < 150: # Se comprueba que la edad no sea
menor que 0 (algo imposible) ni mayor que 150 (algo realmente difícil)
... return False
... else: # Si está en el rango 0-150, entonces se modifica
la variable
... self.edad = edad # Se modifica la edad
...
>>> p = Persona('Alicia', 20) # Instanciando la clase. Como se puede
ver, no se especifica el valor de self
>>> p.nombre # La variable "nombre" del objeto sí es accesible desde
fuera
'Alicia'
>>> p.nombre = 'Andrea' # Y por tanto, se puede cambiar su contenido
>>> p.nombre
'Andrea'
>>> p.mostrar_edad() # Se llama a un método de la clase
20
>>> p.modificar_edad(21) # Es posible cambiar la edad usando el
método específico que hemos hecho para hacerlo de forma controlada
>>> p.mostrar_edad()
21
Módulos[editar]
Existen muchas propiedades que se pueden agregar al lenguaje
importando módulos, conjuntos de funciones y clases para realizar
determinadas tareas usualmente escritos también en Python. Un ejemplo es el
módulo tkinter38, que permite crear interfaces gráficas basadas en la
biblioteca Tk. Otro ejemplo es el módulo os, que provee acceso a muchas
funciones del sistema operativo. Los módulos se agregan al código escribiendo
la palabra import, seguida del nombre del módulo que queramos usar.39
Instalación de módulos (pip)[editar]
La instalación de módulos en Python se puede realizar mediante la herramienta
de software Pip, que suele estar incluida en las instalaciones de Python. Esta
herramienta permite la gestión de los distintos paquetes o módulos instalables
para Python, incluyendo así las siguientes características:
Instalación de paquetes.
Instalación de versiones concretas de paquetes.
Instalación a partir de un archivo de configuración.
Desinstalación.
Actualización.
Interfaz al sistema operativo[editar]
El módulo os provee funciones para interactuar con el sistema operativo:
>>> import os
>>> os.name # Devuelve el nombre del sistema operativo
'posix'
>>> os.mkdir("/tmp/ejemplo") # Crea un directorio en la ruta
especificada
Biblioteca estándar[editar]
Bibliografía[editar]
Knowlton, Jim (2009). Python. tr: Fernández Vélez, María Jesús (1
edición). Anaya Multimedia-Anaya Interactiva. ISBN 978-84-415-2513-9.
Martelli, Alex (2007). Python. Guía de referencia. tr: Gorjón Salvador,
Bruno (1 edición). Anaya Multimedia-Anaya Interactiva. ISBN 978-84-
415-2317-3.
Enlaces externos[editar]
Wikilibros: Python
Control de Proyectos Wikimedia
autoridades
Datos: Q28865
MediaWiki: Python
Identificadores
GND: 4434275-5
LCCN: sh96008834
NKC: ph170668
NLI: 987007563637105171
SUDOC: 051626225
Categorías:
Python
Lenguajes de programación orientada a objetos
Lenguajes de programación de alto nivel
Lenguajes de programación dinámicamente tipados
Lenguajes de programación educativos
Software de 1991
Países Bajos en 1991
Ciencia y tecnología de los Países Bajos