Introducción y Configuración de Python
Introducción y Configuración de Python
Contenido:
Introducción a Python.............................................................................................................2
Instalación de Python..........................................................................................................2
Objetos....................................................................................................................................5
Tipo numérico.....................................................................................................................7
Secuencias.........................................................................................................................10
Clase str.........................................................................................................................10
Clase list.........................................................................................................................14
Métodos de la clase list.............................................................................................16
Copiar listas...............................................................................................................18
Clase tuple.....................................................................................................................20
Clase range.....................................................................................................................21
Tipo mapa..........................................................................................................................21
Diccionarios...................................................................................................................21
Tipo booleano....................................................................................................................22
Comprobar tipo de instancia.................................................................................................23
Conversiones.........................................................................................................................24
Conversión implícita.........................................................................................................24
Conversión explicita..........................................................................................................24
Operadores............................................................................................................................27
Operadores aritméticos......................................................................................................27
Operadores de comparación..............................................................................................29
Operador de asignación.....................................................................................................29
Operadores de asignación compuestos..........................................................................30
Operadores lógicos............................................................................................................30
Operadores de membresía y de identidad..........................................................................31
Operadores de membresía..............................................................................................31
1
Operadores de identidad................................................................................................31
Diferencia entre operador is y operador ==..............................................................32
Sentencia de asignación........................................................................................................33
Expresión de asignación........................................................................................................35
Eliminación de objetos..........................................................................................................37
Comentarios en Python.........................................................................................................37
Referencias............................................................................................................................38
Introducción a Python
Python es un lenguaje de tipado dinámico (no es necesario declarar el tipo de una variable,
se determina el tipo de la variable cuando se hace la asignación, en tiempo de ejecución) y
es interpretado (no necesita ser complicado previo a ser ejecutado, es decir, el código se
ejecuta directamente línea por línea). Python es un lenguaje de alto nivel (usa un lenguaje
más natural para el ser humano lo que lo hace más fácil de usar) por lo que tiene tipos de
datos de alto nivel. En Python se puede implementar un programa en varios módulos, los
cuales pueden ser utilizados en otros programas de Python. Además, Python puede ser
usado como una calculadora.
Instalación de Python
[Link]
2
Figura 1. Icono IDLE en el menú inicio.
Además, se puede acceder al intérprete de Python (el programa que ejecuta las
instrucciones) desde la terminal (Command Prompt) escribiendo python, para salir se hace
con quit() o con exit(). En el sistema operativo Windows si no pueden acceder al intérprete
de Python desde la terminal, se debe agregar el ejecutable de Python a PATH, para esto
vamos a Control Panel, a System, a Advanced system settings, a Environment Variables, a
3
User variables for user, y en Path agregamos la ruta donde se encuentra la aplicación
python y donde se encuentra la aplicación pip. Para corroborar que lo anterior quedo bien
en la terminal escribimos C:\Users\user>where Python, que en mi caso muestra
C:\Users\user\AppData\Local\Programs\Python\Python313\[Link]
C:\Users\user\AppData\Local\Programs\Python\Python313\Scripts\[Link]
C:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages
import sys
[Link](['C:\\Users\\user\\Desktop',])
python "C:\\Users\\user\\Desktop\\dar_clase.py"
se ejecuta dar_clase.py.
El intérprete está en modo interactivo cuando lee comandos desde una terminal (la interfaz
con la que el usuario interactúa con el ordenador). En la Figura 2 vemos que el intérprete
imprime un mensaje de bienvenida (donde se indica la versión de Python) y un aviso de
copyright, luego imprime el prompt primario, que son tres signos mayo que, es decir, >>>.
El prompt primario es el carácter o conjunto de caracteres que se muestran en la línea de
comandos para indicar que el intérprete está en espera de instrucciones; el prompt
secundario, que son tres puntos (…), aparecen al principio de cada línea cuando se ingresa
una construcción multilínea; para finalizar un comando multilínea, después del prompt
secundario dejamos la línea en blanco y presionamos enter. Las líneas que no comienzan
con prompt son emitidas por el intérprete, entonces si al inicio de una línea hay un prompt
es una entrada, si no lo hay, es una salida.
En la ventana IDLE Shell podemos escribir una línea a la vez, el intérprete de Python [1]
lee la instrucción y la convierte al lenguaje de la máquina para evaluarla. Ejemplo:
4
>>> 2+(2*3)
8
En el modo interactivo, la última expresión impresa (sin usar print) se asigna a la variable
_, ejemplo:
>>> 2+2
4
>>> _+8
12
>>> _/2
6.0
La variable _ debe ser tratada como de solo lectura, por lo que no la debemos usar para
asignarle explícitamente un valor (por ejemplo, _=0), de ser así crearíamos una variable que
anula la variable original y el comportamiento de referenciar la última expresión impresa se
perdería.
Las funciones del sistema (built-in functions, en inglés) son las que ya están definidas y
disponibles para el usuario. Por ejemplo, para redondear un número se tiene la función
round(x,y), donde x se redondea hasta y posiciones; para redondear un número decimal
hasta dos posiciones después del punto decimal escribimos:
>>> round(12.1234,2)
12.12
Objetos
5
Un objeto puede ser una instancia de una clase [2]. En la clase se definen variables
(atributos) y funciones, las funciones serán los métodos de las instancias creadas a partir de
la clase, de modo que una instancia (un objeto) es una encapsulación de atributos y métodos
[3], [4], [5].
En Python un objeto puede ser nombrado, el nombre (o identificador) apunta al objeto, por
lo que con el nombre se puede acceder al objeto. A un objeto se le asigna espacio en la
memoria cuando es definido, es decir, cuando por medio de una instrucción de asignación a
un nombre se le asigna un objeto, por lo que el nombre hará referencia al objeto que se le
asigno. Para nombrar un objeto de determinado tipo, una función, una clase o un módulo se
pueden usar letras, números, y guion bajo (de acuerdo con la convención snake case, entre
palabras se debe poner guion bajo, por ejemplo: resultado_total). Además, no se puede
empezar un nombre con un número. Python es case sensitive, es decir, distingue entre
minúsculas y mayúsculas, por lo que el nombre V1 es diferente del nombre v1, aunque
ambos nombres pueden apuntar al mismo objeto,
>>> V1='número'
>>> v1=V1
>>> id(V1)
2173121498688
>>> id(v1)
2173121498688
Para conocer las palabras reservadas en Python (las que no se pueden usar como el
identificador de un objeto) lo hacemos con la lista [Link],
Para conocer si un nombre es una palabra reservada (o no) lo hacemos con la función
[Link]('NOMBRE'), siendo NOMBRE el nombre que queremos probar; se
obtiene True si NOMBRE es una palabra reservada, False en caso contrario, ejemplo,
>>> [Link]('None')
True
>>> [Link]('list')
False
A pesar de que list es un tipo de dato incorporado (built-in type), no es una palabra clave
(keyword), lo mismo pasa con str, set, dict, int, float, etc, ver referencia [6]. Entonces no
debemos usar el nombre de una clase para referenciar un objeto (para evitar que dicho
6
nombre deje de hacer referencia a la clase), aunque es posible hacerlo. A un nombre le
podemos asignar un literal (que representa directamente un valor), p. ej. x=1 (ver referencia
[7]), una expresión (una combinación de valores y operadores que se reduce a un valor), p.
ej. x=2+2, el resultado de llamar una función, p. ej. x=round(3.1416,2), o una combinación
de las anteriores, p. ej. x=1+round(2.2,0). En Python una variable es el nombre [8] que se
usa para referenciar un objeto, por lo que la instrucción de asignación lo que hace es
vincular un nombre y un objeto. Un objeto es de cierto tipo, puede ser de tipo numérico
(int, float, complex), booleano (bool), secuencia de caracteres (str), secuencia de objetos
(list, tuple, range), mapa (dict), conjunto (set, frozenset), entre otros.
Desde Python 3 no hay diferencia entre tipo y clase [9], por lo que en este documento son
intercambiables. A continuación, los tipos de objetos.
Tipo numérico
Tenemos tres tipos numéricos. El tipo int, que se usa para representar enteros con signo. El
tipo float, que usa para representar números reales. El tipo complex, que se usa para
representar números complejos; un objeto de tipo complex tiene atributos, si x es el nombre
de un número complejo, entonces [Link] regresa el valor de la parte real y [Link] regresa el
valor de la parte imaginaria, cada cual de tipo float. Con sys.float_info.max se obtiene el
valor positivo máximo representable de tipo float, con sys.float_info.min se obtiene el valor
normalizado [10]-[11] positivo mínimo representable de tipo float. Escribir en IDLE Shell:
>>> sys.float_info.max*(-1)
-1.7976931348623157e+308
>>> sys.float_info.min*(-1)
-2.2250738585072014e-308
7
(o restrictivo) se “ensancha” al tipo del otro, se tiene que tipo int es más estrecho que float,
y que este es más estrecho que complex, por lo que Python soporta aritmética mixta, es
decir, un operador puede tener operandos de diferente tipo.
Con int(valor), float(valor), y complex(valor_1,valor_2), siendo el valor que va entre
paréntesis numérico (o bien puede ser texto que represente contenido numérico), creamos
un objeto (una instancia) de la clase indicada a la izquierda de los paréntesis (consultar
referencia [12]) y que tendrá por valor el que se escribió dentro de los paréntesis. Entonces
para crear un objeto de la clase int, float o complex, es decir, instanciar una clase, se hace
con el nombre de la clase seguido de paréntesis y dentro de los paréntesis el/los valor(es)
(ya que complex puede tener parte real y parte imaginara); por ejemplo, complex(r,i)
regresa un número complejo (un objeto de clase complex), con parte real r y con parte
imaginaria i.
Python tiene incorporado el módulo math, el cual tiene funciones y constantes [13]. Para
acceder al contenido de un módulo (un objeto con código) primero se debe importar,
entonces, para poder usar las constantes y funciones del módulo math se logra con la
palabra import seguido del nombre del módulo,
La Tabla 1 presenta algunas funciones para trabajar con objetos de tipo numérico.
8
cero.
math . modf (x) Regresa una tupla con dos valores de tipo float, el primero es
la parte fraccionaria de x, el segundo es la parte entera de x.
Para convertir el número x de base y a un número entero en base 10 se hace con int('x',
base=y), ejemplos,
>>> int('101',base=2)
5
>>> int('a2f',base=16)
2607
>>> int('12',base=10)
12
Para conocer el número de dígitos que se necesita para representar un entero en base 2, se
hace de la siguiente manera,
>>> n=64
>>> n.bit_length()
7
>>> bin(n)
'0b1000000'
Al convertir un número del sistema decimal a binario por medio de la función bin(n), con n
siendo un entero, se tiene el siguiente resultado (en orden de izquierda a derecha) entre
comillas: aparece el signo menos si el número a convertir es negativo, un cero, la b
expresando binario, y el resultado de la conversión.
>>> (4).as_integer_ratio()
(4, 1)
>>> (8.2).as_integer_ratio()
(2308094809027379, 281474976710656)
Ya que los números se guardan en binario la precisión es limitada, por lo que si vamos a
trabajar con decimales podemos usar el paquete decimal para tener resultados más precisos,
>>> 0.2+0.2+0.2-0.6
1.1102230246251565e-16
>>> import decimal
>>> [Link](0.2)+[Link](0.2)+[Link](0.2)-[Link](0.6)
Decimal('5.551115123130313080847263336E-17')
>>> 1.1102230246251565e-16>5.551115123130313080847263336E-17
True
9
Secuencias
Una secuencia es una estructura de datos que contiene elementos (objetos) guardados con
un orden; se puede acceder a cada objeto de una secuencia por medio de un índice que
representa la posición del objeto en la secuencia. En esta sección veremos los tipos str, list,
tuple y range.
Clase str
Una cadena es una secuencia de caracteres. Un objeto de clase str es una cadena que va
entre comillas simples ('), o comillas dobles ("). Ejemplo:
>>> x1='si'
>>> x2="no"
Se puede usar el operador * para repetir tantas veces una cadena como el número por el
cual se multiplica (el resultado se concatena). El operador + se usa para concatenar cadenas,
es decir, unir cadenas para formar una sola. Ejemplo:
>>> (2*'zo')+'brar'
'zozobrar'
Si dos cadenas están una seguida de la otra separadas únicamente por espacios vacíos (o
incluso sin separación) se hace una conversión implícita que entrega un literal (una sola
cadena). Ejemplo:
>>> letras='abcde'
Para acceder al carácter que está en la posición=x, seguido del nombre del objeto
escribimos corchetes y dentro de estos el número de la posición, es decir, nombre[x]. Por
ejemplo, para acceder al carácter que está en la posición 0 del objeto al que hace referencia
el nombre letras,
10
>>> letras[0]
'a'
>>> letras[1]
'b'
>>> letras[1:4]
'bcd'
>>> letras[:2]
'ab'
No fue necesario especificar x ya que por defecto x=0. Ejemplo, se puede acceder a todo lo
que está a la derecha de x=2 (incluyendo esta posición):
>>> letras[2:]
'cde'
>>> letras[:2]+letras[2:]
'abcde'
Ejemplo:
11
>>> cadena='Python'
De acuerdo con la Figura 3, para obtener 'yth' lo podemos hacer con el rango [1:4], o con el
rango [-5:-2], entonces
Si a nombre se le asignó un objeto de tipo str, con la función len(nombre) se puede conocer
el número de caracteres (un espacio vacío cuenta por un carácter) del objeto al que hace
referencia nombre. Tenemos que cadena='Python' (nombre=objeto) tiene 6 caracteres, por
lo que
>>> len(cadena)
6
Algunos de los métodos que podemos usar con objetos de tipo str son:
Donde string es un objeto de tipo str y sub es una cadena. Regresa el índice de valor más
bajo donde se encuentra sub en string dentro del rango determinado por start y end, que son
argumentos opcionales,
>>> 'hola'.find('h')
0
[Link](*args)
[Link](**kwargs)
12
Un objeto str puede tener campos de reemplazo que van entre llaves. En las llaves puede ir
el índice (numérico) de un argumento posicional o el nombre de un argumento de palabra
clave. Si tenemos [Link](*args), *args es un número variable de argumentos
(posicionales) sin nombre, si tenemos [Link](**kwargs), **kwargs es un número
variable de argumentos con nombre. En el resultado tenemos que en las llaves (los campos
de reemplazo) va el valor del argumento correspondiente. Ejemplo con argumentos
posicionales
[Link](iterable)
string es el separador (una cadena) e iterable es una lista de cadenas. Regresa un objeto str
integrado por cada cadena en iterable separadas por string, el cual puede ser un espacio en
blanco, es decir ' '. Ejemplo:
Para que el intérprete no tome en cuenta una comilla como la forma de cerrar una cadena,
usamos el carácter \, ejemplo
Los caracteres precedidos por \ se interpreten como caracteres especiales, para evitarlo se
debe indicar que se usaran cadenas sin formato, esto se hace de la siguiente manera,
>>> print(r'C:\carpeta1\nombre')
C:\carpeta1\nombre
>>> print('C:\carpeta1\nombre')
C:\carpeta1
ombre
13
Clase list
Una lista es una colección ordenada de objetos separados por coma y entre corchetes,
aunque una lista puede tener un solo objeto o estar vacía. La clase de una lista es list, los
objetos que contiene una lista pueden ser objetos de un mismo tipo o de diferentes tipos.
Una lista es un objeto mutable, es decir, se le pueden hacer cambios (agregar objetos,
eliminar objetos, sustituir un objeto por otro). Para crear una lista con cinco objetos de clase
int y que tenga por nombre lista1 escribimos
>>> lista1=[1, 2, 3, 4, 5]
A una lista se le puede agregar el contenido de otra lista con el operador +, por lo que es
posible hacer concatenación de listas (unir dos o más listas en una sola). Si a lista1 le
agregamos el contenido de otra lista, el resultado se puede referenciar con un nombre
diferente (lista2), o con el nombre previamente utilizado (lista1).
>>> lista1[7]=8
>>> lista1
[1, 2, 3, 4, 5, 6, 7, 8]
La sentencia del [15] se usa para eliminar objetos, por lo que se puede usar para eliminar
objetos de una lista o eliminar la lista en su totalidad. Para eliminar el ultimo objeto en
lista2, es decir el número 9, procedemos así
>>> del(lista2[7])
>>> lista2
[1, 2, 3, 4, 5, 6, 7]
14
>>> del(lista2)
Eliminar un objeto significa que el nombre del objeto será removido del espacio de
nombres (local o global) en el que fue definido [16], además, si ningún otro nombre hace
referencia al objeto, este será eliminado de la memoria.
Para agregar un objeto a una lista de manera que se agregue al final, es decir, en la siguiente
posición con respecto a la última posición existente, lo podemos hacer con el método
append(). Para agregar a lista1 el número 9,
>>> [Link](9)
>>> lista1
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> [Link]()
9
>>> lista1
[1, 2, 3, 4, 5, 6, 7, 8]
Los objetos que acabamos de modificar los podemos eliminar de lista2 de la siguiente
manera
>>> lista2[1:5]=[]
>>> lista2
['a', 'f']
Con lista[:] se selecciona todo el contenido de lista, entonces, podemos dejar una lista sin
contenido (vacía) de la siguiente manera
15
>>> lista2[:]=[]
>>> lista2
[]
>>> lista1=[1, 2, 3]
>>> lista2=['a', 'b', 'c', 'd1']
La función len(lista) se puede usar para obtener el número de objetos en una lista,
>>> len(lista1)
3
>>> len(lista2)
4
Podemos crear una lista que contenga las dos listas anteriores
Entonces lista3 es una lista con dos objetos, los cuales a su vez son listas que contienen más
objetos, por lo que lista3 es una lista de listas. En lista3 en la posición 0 tenemos el
contenido de lista1, en la posición 1 tenemos el contenido de lista2. A su vez, lista1 y lista2
tienen sus propias posiciones, en un rango de 0 a 2 y de 0 a 3, respectivamente. Por medio
de lista3 si queremos acceder al número 2 de lista1, lo hacemos con lista3[0][1]; con
lista3[0] se hace referencia a [1, 2, 3], y con lista3[0][1] al 2, entonces
>>> lista3[0][1]
2
Por medio de lista3 si queremos acceder a la cadena 'd1' de lista2, tenemos que con lista3[1]
se hace referencia a ['a', 'b', 'c', 'd1'], y con lista3[1][3] se hace referencia a 'd1', entonces
>>> lista3[1][3]
'd1'
[Link](x)
16
Añade el valor x al final de lista. Para este y los siguientes ejemplos de este apartado, lista
se refiere a una lista cualquiera, x representa el valor de un objeto, e iterable representa un
objeto iterable, es decir, que se puede acceder a sus elementos de uno a la vez por lo que
puede ser iterado en un ciclo [17].
[Link](iterable)
[Link](i, x)
[Link](x)
[Link](i)
[Link]()
Regresa el índice del primer elemento con valor igual a x, si no encuentra dicho elemento
entonces se obtiene ValueError. Los argumentos inicio y fin son opcionales y son para
limitar la búsqueda en un rango que empieza con índice=inicio y termina con índice=fin;
este rango en matemáticas equivale a [inicio, fin), es decir, se incluye inicio pero no se
incluye fin.
[Link](x)
[Link](key=None, reverse=False)
Ordena los elementos en lista, ver referencia [18]. Los argumentos key y reverse son
opcionales y por default toman el valor None y False, respectivamente; si reverse=True,
ordena de mayor a menor, si reverse=False, ordena de menor a mayor. Opcionalmente,
para ordenar una lista podemos usar la función sorted(iterable, key=None, reverse=False),
17
esta no modifica el iterable sino que toma sus elementos, los ordena, y regresa una lista
ordenada.
[Link]()
[Link]()
Regresa una copia superficial (shallow copy en inglés) de lista, es decir, la copia y lista no
son referencias, sin embargo, los elementos que contiene la copia son referencias a los
elementos que contiene lista, ver referencia [19].
Algunos de los métodos que modifican una lista, como insert, remove y sort, regresan
None, que es un tipo de dato.
Si vamos a crear una lista por medio de la clase list y pasamos como argumento un objeto
iterable, el objeto creado será de tipo list y su contenido será cada elemento del objeto
iterable. Ejemplo:
>>> list('hola')
['h', 'o', 'l', 'a']
Copiar listas
Si tenemos que lista1=[], y que lista2=lista1, tenemos que lista2 hace referencia al mismo
objeto que lista1, por lo que los cambios que se le hagan a lista1 se reflejan en lista2 y
viceversa [20]. Ejemplo:
>>>lista1=[]
>>>lista2=lista1
>>>[Link](1)
>>>lista2
[1]
>>>[Link](2)
>>>lista1
[1, 2]
>>>id(lista1)
2002751351232
>>>id(lista2)
2002751351232
18
Para hacer una copia profunda (deep copy) de una lista, de modo que la lista (el objeto
original) y la copia no sean referencias, y que además los elementos que contiene el objeto
original y los elementos que contiene la copia no sean referencias (ver [21] y [22]), lo
haremos con la función deepcopy(), para lo cual es necesario importar el módulo copy.
Ejemplo:
>>>import copy
>>>a=[[],[]]
>>>b=[Link](a)
>>> id(a)==id(b)
False
>>>b[0].append(1)
>>>b
[[1], []]
>>>a
[[], []]
Con b=a[:] se tiene que las listas a y b son diferentes objetos, pero los objetos que
contienen son referencias. Nota: a is b es equivalente a id(a)==id(b), que es para comparar
el valor de las identidades. Ejemplo
>>>a=[[],[]]
>>>b=a[:]
>>>a is b
False
>>>a[0] is b[0]
True
>>>a[1] is b[1]
True
>>>b[0].append(1)
>>>b
[[1], []]
>>>a
[[1], []]
Otra manera de copiar superficialmente una lista con el mismo efecto que produce b=a[:],
es b=list(a) y b=[Link]().
Por medio de rebanado (slicing en inglés) se puede obtener una lista (el objeto copia) a
partir de una lista (el objeto original) con diferente identidad, sin embargo, los objetos que
contiene la lista copia son referencias a los objetos que contiene la lista original, por lo que
la lista copia es una copia superficial de la lista original. Ejemplo
>>> lista1=[[0],[1],[2],[3],[4],[5]]
>>> lista2=lista1[3:]
>>> [Link]([6])
>>> lista1[3].append('x')
19
>>> lista1
[[0], [1], [2], [3, 'x'], [4], [5]]
>>> lista2
[[3, 'x'], [4], [5], [6]]
Clase tuple
Una tupla contiene objetos separados por coma y entre paréntesis, la clase de una tupla es
tuple. Un objeto de clase tuple es inmutable, es decir, no se le pueden hacer cambios
(agregar objetos, eliminar objetos, sustituir un objeto por otro). Para definir una tupla vacía
lo podemos hacer así
>>> tupla1=()
>>> type(tupla1)
<class 'tuple'>
Se puede definir una tupla sin paréntesis (objetos separamos por coma), sin embargo, si
solo tiene un objeto se debe poner coma después de este.
>>> tupla1=1,
>>> type(tupla1)
<class 'tuple'>
Cuando se usan paréntesis para definir una tupla con un solo elemento, también es
necesario poner coma después del único elemento que contiene.
>>> tupla1=(1,)
>>> type(tupla1)
<class 'tuple'>
La clase type(nombre) regresa un objeto de clase type; esta función la usaremos para
conocer la clase del objeto al que hace referencia nombre. Ejemplo:
>>> tupla1=('h','o','l','a')
>>> type(tupla1)
<class 'tuple'>
Para acceder a los elementos de una tupla se hace igual que con una lista. Ejemplo
>>> tupla2=('a','d','i','ó','s')
>>> tupla2[3]
'ó'
20
Clase range
El tipo range representa una secuencia inmutable de números y se puede usar para repetir
un bucle for un determinado número de veces. La clase de este tipo de objeto es range y
tiene la siguiente estructura
Se tiene que start es el valor inicial de la secuencia, si este valor no es especificado por
defecto es cero; stop es el último valor de la secuencia y es forzoso especificarlo, no se
incluye este valor sino hasta stop-1; step es el valor de los incrementos; cada valor del
rango se puede ir calculando con la formula r[i] = start + step*i, siendo i el índice de cada
valor (iniciando en 0 y hasta j), de modo que r[j] < stop, y r[j+1] >= stop.
Tipo mapa
Diccionarios
Un diccionario está integrado por pares. Los pares de un diccionario van entre llaves y se
separan entre si con una coma. Un par es la correspondencia entre el objeto clave y el
objeto valor, de modo que en un diccionario un par se escribe clave:valor. Para acceder a
un valor se hace por medio de la clave. La clave debe ser un tipo de dato inmutable (int,
float, str, bool), una clave debe estar presente una sola vez en un diccionario [23]. El valor
puede ser cualquier tipo de objeto. La clase de un diccionario es dict. Ejemplo:
Para acceder al valor que corresponde con la clave 'edad', la clave se toma como el índice.
>>> dict1['edad']
33
21
Salida:
{'nombre': 'él', 'edad': 33, 'profesión': 'no se sabe'}
Además, list(diccionario) regresa una lista con las claves de diccionario. Ejemplo
>>> lista=list(dict2)
>>> lista
['nombre', 'edad', 'profesión']
Con los operadores de membresía in y not in podemos verificar si una clave se encuentra o
no se encuentra, respectivamente, en un diccionario. Ejemplo
Tipo booleano
Un objeto booleano puede tener por valor verdadero (True) o Falso (False). Un objeto
booleano es de clase bool, esta clase es una subclase de la clase int, por lo que en la
mayoría de los contextos True se comporta como un 1 y False se comporta como un 0. El
resultado de evaluar una condición puede ser True o False. Ejemplos:
>>> 1>2
False
>>> -1<1
True
22
>>> 1==3
False
>>> 1!=1
False
Salida:
True
>>> x=1.2
>>> isinstance(x,int)
False
>>> isinstance(x,float)
True
Tenemos que isinstance(x,int) lo que se hace es evaluar si x (que hace referencia a 1.2) es
una instancia de clase int, por lo que regresa False. En cambio, isinstance(x,float) regresa
True ya que x es una instancia de clase float.
Tenemos que bool es una subclase de int, por lo que True y False son instancias de int, ver
referencia [24].
>>> isinstance(True,int)
True
>>> isinstance(False,int)
True
23
Conversiones
Conversión implícita
>>> a=10
>>> type(a)
<class 'int'>
>>> b=20.1
>>> type(b)
<class 'float'>
>>> c=a+b
>>> print(c)
30.1
>>> type(c)
<class 'float'>
Conversión explicita
>>> c=float(a)+b
>>> print(c)
30.1
>>> type(c)
<class 'float'>
El resultado de la suma es float, se puede ver que explícitamente convertimos a clase float
el valor de a para hacer la suma. En este caso el usuario define a que tipo va a convertir un
valor, por lo que puede haber perdida de datos. Por ejemplo, podemos crear una instancia
de la clase int o float a partir del valor de un objeto de clase str si todos sus caracteres son
de tipo numérico, para crear un objeto de clase float a partir de una cadena en esta puede
haber un punto decimal y decimales. También podemos crear un objeto de clase str a partir
del valor de un objeto de clase int o float. Si tenemos que v1=10 y v2='30', sumarlos no es
posible porque no son del mismo tipo, el operador + no puede sumar operandos int y str,
ejemplo
>>> v1=10
>>> v2='30'
>>> v2=int(v2)
>>> type(v2)
24
<class 'int'>
Ahora, el objeto al que hace referencia v2 es de clase int, por lo que es posible sumar v1 y
v2.
>>> v1+v2
40
>>> v1='somos'
>>> v2=100
>>> v2=str(v2)
>>> type(v2)
<class 'str'>
>>> v1+' '+v2
'somos 100'
Para obtener 'somos 100' se agregó un espacio entre las cadenas v1 y v2. Con int(cadena,
base) podemos crear un objeto de clase int del sistema númerico decimal con el valor de
cadena (un str con caracteres numéricos), base es el número de dígitos del sistema
numérico del valor de cadena. Ejemplo:
>>> x='1000'
>>> y=int(x,2)
>>> print(y)
8
Tenemos que '1000' es una cadena str, sin embargo, sin las comillas puede ser un número
base 2, por lo que es correcto base=2. Si no se especifica base, por defecto es 10.
Con la función hex(entero) podemos crear un objeto de tipo str que represente un valor
hexadecimal a partir de entero (de clase int y de base 10). Con la función oct(entero)
podemos crear un objeto de tipo str que represente un valor octal a partir de entero.
Ejemplos
>>> x=10
>>> hex(x)
'0xa'
>>> x=8
>>> oct(x)
'0o10'
25
Con set(secuencia) se obtiene un conjunto (un objeto de clase set) no ordenado a partir de
los objetos en secuencia. El resultado no repite objetos. Ejemplos
>>> x='123123123'
>>> y=set(x)
>>> print(y)
{'2', '3', '1'}
>>> x=['a','b','b','c','c','c']
>>> y=set(x)
>>> print(y)
{'a', 'b', 'c'}
Podemos obtener una lista (clase list) o a una tupla (clase tuple) al pasar como argumento
un objeto iterable a las clases list y tuple, respectivamente. Ejemplos
>>> x='hola'
>>> y=list(x)
>>> print(y)
['h', 'o', 'l', 'a']
>>> x=[1,2,3]
>>> y=tuple(x)
>>> print(y)
(1, 2, 3)
Con la clase bool se puede evaluar un objeto para obtener True o False. Considerando
bool(objeto), para valores numéricos el 0 se evalúa como False y cualquier otro número
como True. Una cadena vacía (con 0 caracteres) da False, pero si contiene uno o más
caracteres da True. Una lista, tupla, conjunto, o diccionario vacío da False, de lo contrario
da True. Ejemplos
>>> bool(0)
False
>>> bool(-1)
True
>>> bool(5.5)
True
>>> bool(1+2j)
True
>>> bool([1,2,3])
True
>>> bool(())
False
>>> bool('')
26
False
>>> bool('0')
True
>>> bool(' ')
True
Notar que '0' no es de tipo numérico, sino una cadena con un carácter numérico. Además, ' '
es una cadena de clase str de longitud 1 (un espacio en blanco hace que la cadena no este
vacía).
Operadores
Python soporta los siguientes operadores (entre otros): aritméticos, de comparación, de
asignación, lógicos, de membresía, de identidad.
Operadores aritméticos
Un operador aritmético se usa para hacer operaciones con operandos de tipo numérico. En
la Tabla 2 se presentan por cada operador aritmético un ejemplo y una breve explicación.
Ejemplos:
>>> 9//2
4
>>> 9%2
1
>>> 10**2
100
27
Además, el resultado de una expresión se puede mantener sin cambio de signo con el
operador +¿ , o cambiar de signo con el operador −¿. Ejemplo
>>> +(1+1)
2
>>> -(1+1)
-2
+, - Adición, sustracción
<<, >> Desplazamiento a nivel de bits
& AND a nivel de bits
^ XOR a nivel de bits
| OR a nivel de bits
<, <=, >, >=, !=, ==, Comparaciones,
in, not in, is, is not operadores de membresía, operadores de identidad
not NOT lógico
and AND lógico
or OR lógico
if – else Expresión condicional
lambda Expresión lambda
:= Expresión de asignación
28
Cuando se tiene en una expresión operadores con la misma precedencia, se evalúan por
orden de izquierda a derecha. Ejemplo:
>>> 10%3*8/4
2.0
>>> 3*(10/5)/2
3.0
>>> 2**1**2
2
>>> (2**1)**2
4
Operadores de comparación
La Tabla 4 muestra los operadores de comparación, como ejemplo se tiene que x=5 y que
y=10.
Operador de asignación
29
Para asociar un valor con una variable se usa el operador =, de modo que el nombre a la
izquierda del operador de asignación hará referencia al objeto (que tiene un valor y es de
determinado tipo) a la derecha del operador de asignación. Ejemplo:
>>> x=1
>>> id(x)
2011428784
Tenemos que x=x+1 lo podemos simplificar como x+=1 por medio del operador de
asignación compuesto +=. Ejemplo:
>>> x=2
>>> x+=1
>>> x
3
La sintaxis x+=valor, aplica para los operadores: (+) (-) (*) (/) (%) (//) (**) (&) (|) (^) (>>)
(<<). La Tabla 5 presenta algunos ejemplos con x=10.
El operador += no tiene el mismo efecto que =+. Con x=+1 se tiene que a x se le asigna
un +1, y con x=−1 se tiene que a x se le asigna un -1.
Operadores lógicos
30
Los operadores lógicos se usan para conectar expresiones, el resultado es un valor
booleano. Si a=True y b=False, se obtienen los resultados de la Tabla 6.
Los operadores lógicos explicados por medio de diagramas de flujo en [28]. Si x=0,
not(x)=True. Con x como cualquier número racional diferente que cero, es decir
x ∈ Q∧ x ≠ 0, se tiene que not(x)=False.
Operadores de membresía
El operador in. Con la sentencia objeto in iterable, se obtiene True si objeto se encuentra en
iterable, False en caso contrario. Ejemplo
>>> lista1=[1,2,3,4,5]
>>> 1 in lista1
True
>>> 6 in lista1
False
El operador not in. Con la sentencia objeto not in iterable, se obtiene True si objeto no está
en iterable, False en caso contrario. Ejemplo
>>> lista1=[1,2,3,4,5]
>>> a=6; b=1
>>> a not in lista1
True
>>> b not in lista1
False
Operadores de identidad
31
El operador is. Con la sentencia objeto_1 is objeto_2, se obtiene True si la identidad de
objeto_1 es igual a la identidad de objeto_2 (lo que quiere decir que son el mismo objeto),
False en caso contrario. Ejemplo
>>> a=1000
>>> b=1000
>>> a==b
True
>>> a is b
False
>>> id(a)==id(b)
False
>>> c=a
>>> a is c
True
>>> id(a)==id(c)
True
De acuerdo con el ejemplo anterior, a pesar de que a y b tienen asignado el mismo valor, y
por lo tanto a==b da True (ya que el operador == compara valores), no son el mismo
objeto ya que su identidad no es igual. Sin embargo, la identidad de a y c es igual, por lo
que hacen referencia al mismo objeto.
El operador is not. Con la sentencia objeto_1 is not objeto_2, se obtiene True si la identidad
de objeto_1 no es igual a la identidad de objeto_2 (por lo que son objetos diferentes), False
en caso contrario. Ejemplo:
>>> a=10
>>> b=10.0
>>> a!=b
False
>>> a is not b
True
>>> id(a)!=id(b)
True
Como a!=b da False se tiene que los valores 10 y 10.0 no son diferentes, es decir, son
iguales. En Python, al comparar números de diferente tipo con los operadores de
comparación (ver Tabla 4) se tiene que se comparan los valores exactos de los números
comparados. Además, ya que a is not b da True, se tiene que la identidad de a es diferente
que la de b por lo que no hacen referencia al mismo objeto.
32
Cuando comparamos objetos con el operador is estamos comparando la identidad de los
objetos, que de ser la misma obtenemos True. La comparación a is b equivale a
id(a)==id(b), siendo a y b objetos cualquiera. Cuando usamos el operador == estamos
comparando valores, que de ser iguales obtenemos True. Cuando definimos un objeto en
Python, es decir, a una variable (nombre) le asignamos un objeto (por medio de un valor) se
crea un objeto nuevo con una identidad única, pero dependiendo de la versión de Python
hay excepciones [29]. Ejemplos con Python versión 3.10.6:
>>>a=1
>>>b=1
>>>a is b
True
>>>a==b
True
>>>a=1000
>>>b=1000
>>>a is b
False
>>>a==b
True
>>>a='123456789'
>>>b='123456789'
>>>a is b
True
>>>a==b
True
>>> a=[1,2,3]
>>> b=[1,2,3]
>>> a is b
False
>>> a==b
True
Entonces, si dos variables hacen referencia al mismo objeto, el valor de las variables es
igual; sin embargo, si el valor de dos variables es igual, no necesariamente hacen referencia
al mismo objeto.
Sentencia de asignación
Para definir un objeto se usa la sintaxis nombre = objeto, una vez definido el nombre a la
izquierda del operador hace referencia al objeto a la derecha del operador. Python tiene
referencia, es decir, un nombre apuntando a un objeto, pero no tiene puntero, es decir, un
nombre apuntando a un nombre. Ejemplo:
33
>>> a=1
>>> b=a
>>> a=2
>>> b
1
Aunque cambio el objeto al cual a hace referencia, b sigue haciendo referencia al objeto
que se le asigno cuando fue definido, por lo que b no hace referencia a a. Al escribir:
>>> h=1
>>> del(h)
La eliminación de h implica que se remueve este nombre del espacio de nombres (local o
global, donde se haya definido) y que el objeto al que hace referencia h es eliminado de la
memoria si ningún otro nombre hace referencia a dicho objeto. Por lo que ahora h no está
definido,
>>> h
Traceback (most recent call last):
File "<pyshell#536>", line 1, in <module>
h
NameError: name 'h' is not defined
>>> h=10
>>> z=h
>>> id(h)
140725619647560
>>> del(h)
>>> id(z)
140725619647560
>>> a,b,c=1,2,3
>>> print(f'a={a}, b={b}, c={c}')
a=1, b=2, c=3
34
>>> a,b,c='123'
>>> print(f'a={a}, b={b}, c={c}')
a=1, b=2, c=3
>>> a,*b=1,2,3,4,5,6
>>> a
1
>>> b
[2, 3, 4, 5, 6]
En este caso a hace referencia al primer objeto y b hace referencia a una lista con el resto
de los objetos, para lo cual fue necesario escribir *b. Si tenemos,
>>> a=b=c=3
>>> print(f'a={a}, b={b}, c={c}')
a=3,b=3,c=3
Expresión de asignación
Código 1.
Para escribir el código anterior en IDLE Shell ubicarse en File y dar clic en New file (o
Ctrl+N), en la ventana que aparece podemos escribir el código.
35
Explicación de Código 1. Se le presenta al usuario la siguiente cadena: 'Escriba sí o no: ',
luego se hace captura de texto que se asigna en la variable entrada. Posteriormente se entra
en un ciclo while que tiene por condición entrada != 'no', de acuerdo con la lógica de esta
condición si la cadena capturada es 'no', el ciclo termina, luego con la función print
imprimimos en pantalla 'Usted escribió: no', si la cadena capturada es 'sí' (o cualquier
cadena diferente que 'no') se procede con las instrucciones del bloque while. El bloque de
instrucciones del while comprende las líneas 5 y 6; la línea 5 es para imprimir en pantalla
'Usted probablemente escribió: sí' por medio de la función print; la línea 6 es para capturar
texto (asignado en la variable entrada) por medio de la función input, para lo cual se
muestra en pantalla 'Escriba sí o no: '. Dependiendo del valor de entrada, el while hace una
iteración o no.
Notar que tanto en la línea 1 como en la línea 6 vinculamos entrada con la cadena que
introduce el usuario. La variable entrada se define en línea 1, ya que de no estar definida no
puede usarse en la condición de la línea 3. En cada iteración del ciclo while a entrada se le
asigna un valor (línea 6). Mediante una expresión de asignación se puede simplificar
Código 1 como se muestra en Código 2.
Código 2.
En Código 2 en línea 1 donde escribimos la condición del ciclo while tenemos una
expresión de asignación:
Una expresión de asignación se evalúa a un valor, el cual está determinado por la expresión
a la derecha del operador :=, este valor es vinculado con el identificador que está a la
izquierda del operador. En la línea 1 de Código 2 el valor que devuelve input('Escriba sí o
no: ') es vinculado con entrada por medio del operador :=, además, dicho valor se usa en la
condición (que es una expresión) del bucle while
36
Ejemplo. Definir a y b mediante sentencia de asignación para luego hacer una suma.
>>> a=1
>>> b=2
>>> c=a+b
>>> print(c)
3
>>> c=(a:=2)+(b:=3)
>>> print(f'a={a}, b={b}, c={c}')
a=2, b=3, c=5
>>> a=(b:=1+2+3)+4
>>> print(f'a={a}, b={b}')
a=10, b=6
Eliminación de objetos
Para eliminar objetos que previamente hemos definido podemos agregar en una lista los
nombres de los objetos que queremos eliminar, para luego eliminarlos en determinado
momento. Ejemplo, para eliminar a, b, y c:
a=1;b='dos';c=True
lista=['a','b','c']
for nombre in lista:
del(globals()[nombre])
La función globals() regresa un diccionario que contiene la información del ámbito global
del programa e incluye los objetos definidos por el usuario en dicho ámbito, que aparecen
como 'nombre': objeto. Entonces, del(globals()['nombre']) equivale a del(nombre), siendo
nombre el identificador del objeto que queremos eliminar.
Nota: Los objetos definidos dentro de una función o clase del ámbito global pertenecen a
un ámbito local.
Comentarios en Python
Lo que se escriba a la derecha del carácter numeral, es decir #, el intérprete de Python no lo
ejecuta, ya que es un comentario. Ejemplo:
37
>>> 2+(2*3) #Este es un comentario
8
Lo que escribamos dentro de un bloque que inicia con 3 comillas simples (o dobles) y
termina de igual manera, es un comentario. Ejemplo:
'''
Esto es
un comentario
'''
"""
Esto también es
un comentario
"""
Un comentario puede aparecer después de una instrucción o al inicio de una línea, pero no
dentro de una cadena de caracteres. Si escribimos el carácter numeral dentro de una cadena
(que va entre comillas), el intérprete lo toma como el carácter numeral y no como el
carácter para iniciar un comentario.
Referencias
38
[7] stackoverflow. "Are numbers considered objects in python?"
[Link]
python (accessed.
[8] stackoverflow. "Why should I refer to "names" and "binding" in Python instead of
"variables" and "assignment"?"
[Link]
binding-in-python-instead-of-variables-and#:~:text=So%20the%20variable%20is
%20the,the%20variable%20is%20that%20object. (accessed.
[9] Stackoverflow. "Class vs. Type in Python."
[Link] (accessed.
[10] [Link]. "Normal vs Subnormal Floats."
[Link] (accessed.
[11] stackoverflow. "What is a subnormal floating point number?"
[Link]
number (accessed.
[12] stackoverflow. "Python: is 'int' a type or a function?"
[Link]
function#:~:text=int%20is%20a%20class.,you%20defined%20in%20the%20class
(accessed.
[13] w3schools. "Python math Module."
[Link] (accessed.
[14] M. Sánchez. "Slicing." [Link]
(accessed.
[15] w3schools. "Python del Keyword."
[Link] (accessed.
[16] [Link]. "The del statement."
[Link] (accessed.
[17] R. Soklaski. "Iterables."
[Link]
#:~:text=Definition%3A,over%20in%20a%20for%2Dloop. (accessed.
[18] [Link]. "Sorting HOW TO."
[Link] (accessed.
[19] [Link]. "copy — Shallow and deep copy operations."
[Link] (accessed.
[20] stackoverflow. "How do I clone a list so that it doesn't change unexpectedly after
assignment?" [Link]
so-that-it-doesnt-change-unexpectedly-after-assignment (accessed.
[21] stackoverflow. "What is the difference between shallow copy, deepcopy and normal
assignment operation?" [Link]
difference-between-shallow-copy-deepcopy-and-normal-assignment-oper (accessed.
[22] stackoverflow. "python list by value not by reference [duplicate]."
[Link]
(accessed.
[23] Realpython. "Restrictions on Dictionary Keys and Values."
[Link] (accessed.
[24] stackoverflow, "Comparing boolean and int using isinstance," ed.
39
[25] [Link]. "Operator precedence."
[Link]
(accessed.
[26] [Link]. "Corrutinas." [Link]
(accessed.
[27] [Link]. "Built-in Functions (id)."
[Link] (accessed.
[28] [Link]. "Python Logical Operators with Examples."
[Link]
improvement-needed/ (accessed.
[29] stackoverflow. "Two variables in Python have same id, but not lists or tuples."
[Link]
id-but-not-lists-or-tuples (accessed.
[30] [Link]. "PEP 572 – Assignment Expressions." [Link]
0572/ (accessed.
[31] stackoverflow. "What is an expression in Python?"
[Link]
(accessed.
40