Conceptos básicos de Python
Comentarios en Python
Comentarios de una sola línea en Python
En Python, se utiliza el símbolo de almohadilla (#) para crear comentarios de una sola línea. El formato es:
# Contenido del comentario
Es decir, desde el carácter # hasta el final de la línea se considera parte del comentario y será ignorado durante la ejecución del programa. El comentario puede colocarse antes de la línea de código que se quiere comentar, por ejemplo:
# Este es un comentario simple
print ("¡Hola Mundo!")
O puede colocarse al final de la línea de código, como:
print ("¡Hola Mundo!") # Este es un comentario simple
Aunque la posición varíe, ambos casos producirán el mismo resultado: imprimir "¡Hola Mundo!".
Comentarios multilínea en Python
Los comentarios multilínea permiten comentar múltiples líneas de código (incluyendo una sola línea). Existen dos formas de hacerlo:
'''
Usando tres comillas simples para abrir y cerrar
Se pueden comentar varias líneas de contenido
Todo esto es parte del comentario
'''
O bien:
"""
Usando tres comillas dobles para abrir y cerrar
Se pueden comentar varias líneas de contenido
Todo esto es parte del comentario
"""
Estos comentarios suelen usarse para incluir información sobre licencia, descripción de funcionalidad, etc., en archivos, módulos, clases o funciones. Es importante mencionar que si estos marcadores aparecen dentro de una sentencia, se tratan como cadenas en lugar de comentarios, por ejemplo:
print('''¡Hola, Mundo!''')
Este código imprime: ¡Hola, Mundo!. En este caso, los tres apóstrofos no son interpretados como comentarios sino como delimitadores de cadena.
Declaración de codificación para caracteres chinos en Python
Python también permite declaraciones especiales de codificación para manejar caracteres chinos. Aunque esta limitación fue eliminada en Python 3.x, se recomienda incluir esta declaración al inicio del archivo para mantener la compatibilidad y claridad. La sintaxis es:
# -*- coding:codificación -*-
O
# coding=codificación
Donde codificación puede ser UTF-8, GBK, entre otros. En la primera forma, los -*- son solo decorativos. Por lo tanto, se puede escribir simplemente:
# coding:utf-8
O
# coding=utf-8
Agregar comentarios tiene otra utilidad práctica: ayudar a depurar el código. Si sospechas que cierta parte está causando errores, puedes comentarla temporalmente para ver si el problema persiste.
Reglas de sangría en Python
A diferencia de otros lenguajes como Java o C, donde se usan llaves {} para definir bloques de código, Python utiliza sangrías y dos puntos :. Un dos puntos al final de una línea, seguido de una línea con sangría, indica el comienzo de un nuevo bloque de código. La sangría termina cuando se encuentra una línea sin sangría o una línea con menor sangría. Se puede usar espacio o tabulador para la sangría, aunque generalmente se recomienda usar 4 espacios (un tabulador equivale a 4 espacios).
Normas de codificación en Python
Python sigue las normas de codificación establecidas en PEP 8, que es una guía de estilo para el código Python. Aquí se presentan algunas reglas importantes para principiantes:
- Cada sentencia
importdebe importar un solo módulo. Ejemplo:
# Recomendado
import os
import sys
# No recomendado
import os,sys
- No se deben usar punto y coma al final de las líneas ni para separar comandos en una misma línea. Ejemplo:
# No recomendado
altura=float(input("Ingrese altura:")) ; peso=float(input("Ingrese peso:")) ;
- Se recomienda que cada línea tenga máximo 80 caracteres. Para líneas largas, usar paréntesis para concatenar implícitamente:
# Recomendado
s=("Sitio web profesional de programación en C, "
"ofrece tutoriales de introducción a C, compiladores de C, manuales de funciones, etc.")
# No recomendado
s="Sitio web profesional de programación en C, \
ofrece tutoriales de introducción a C, compiladores de C, manuales de funciones, etc."
- Usar líneas en blanco mejora la legibilidad. Dos líneas en blanco entre definiciones de nivel superior (funciones o clases), una línea entre definiciones de métodos, y una línea para separar funcionalidades.
- Usar espaicos alrededor de operadores y después de comas para mejorar la claridad.
Herramientas automatizadas de normas de codificación
Primero, selecciona o define las normas adecuadas para tu equipo. Puedes usar PEP 8 o Google Style como referencia. Una vez definidas, asegúrate de aplicarlas mediante revisiones de código y herramientas de análisis estático como Pylint.
Nomenclatura de identificadores en Python
Los identificadores en Python deben seguir ciertas reglas:
- Están formados por letras (
A-Zya-z), guiones bajos y números, pero no pueden comenzar con un número. - No pueden coincidir con palabras reservadas de Python.
- No pueden contener espacios,
@,%o$. Ejemplos válidos:
IDUsuario
nombre
modo12
edad_usuario
Ejemplos inválidos:
palabra # No puede comenzar con número
try # try es una palabra reservada
$dinero # No puede contener caracteres especiales
- Python distingue entre mayúsculas y minúsculas en los identificadores:
numero = 0
Numero = 0
NUMERO = 0
- Identificadores que comienzan con guión bajo tienen significados especiales:
- Un guión bajo inicial (como
_ancho) indica atributos privados. - Doble guión bajo inicial (como
__agregar) representa miembros privados de clase. - Doble guión bajo al principio y final (como
__init__) son identificadores especiales. Se recomienda evitar estos a menos que sea necesario.
Palabras clave en Python
Las palabras clave son términos con significado especial en Python. No pueden usarse como nombres de variables, funciones, clases, etc. Para ver todas las palabras clave en Python:
>>> import keyword
>>> keyword.kwlist
['False', 'None', 'True', 'and', 'as',
'assert', 'break', 'class', 'continue',
'def', 'del', 'elif', 'else', 'except',
'finally', 'for', 'from', 'global', 'if',
'import', 'in', 'is', 'lambda', 'nonlocal',
'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
Funciones integradas en Python
Python proporciona muchas funciones predefinidas para facilitar el desarrollo. Puedes consultarlas en https://docs.python.org/zh-cn/3/library/functions.html
| Función integrada | ||||
|---|---|---|---|---|
| abs() | delattr() | hash() | memoryview() | set() |
| all() | dict() | help() | min() | setattr() |
| any() | dir() | hex() | next() | slice() |
| ascii() | divmod() | id() | object() | sorted() |
| bin() | enumerate() | input() | oct() | staticmethod() |
| bool() | eval() | int() | open() | str() |
| breakpoint() | exec() | isinstance() | ord() | sum() |
| bytearray() | filter() | issubclass() | pow() | super() |
| bytes() | float() | iter() | print() | tuple() |
| callable() | format() | len() | property() | type() |
| chr() | frozenset() | list() | range() | vars() |
| classmethod() | getattr() | locals() | repr() | zip() |
| compile() | globals() | map() | reversed() | import() |
| complex() | hasattr() | max() | round() |
Variables en Python
Python usa el signo igual (=) como operador de asignación. Por ejemplo, a = 20 significa asignar el valor 20 a la variable a.
Nota: Los nombres de variables son identificadores, así que deben seguir las reglas de nomenclatura de Python y evitar conflictos con funciones o palabras clave incorporadas.
Comparando con C:
int a = 20
Este código declara una variable entera a que contiene el valor 20. En lenguajes fuertemente tipados, a solo puede almacenar valores enteros. En Python, las variables pueden cambiar de tipo dinámicamente:
# Definir una variable de tipo numérico
a = 5
print(a)
# Reasignar una cadena a la variable a
a = 'Hola, Charlie'
print(a)
print(type(a))
Salida:
5
Hola, Charlie
<class 'str'>
Tipos enteros
Los tipos enteros representan números sin parte decimal.
# Asignar un valor entero a la variable a
a = 56
print(a)
# Asignar un número grande a la variable a
a = 9999999999999999999999
print(a)
# La función type() devuelve el tipo de la variable
print(type (a))
Salida:
56
9999999999999999999999
<class 'int'>
Los enteros en Python pueden tener cuatro representaciones:
- Decimal: números comunes, sin comenzar con 0 (excepto el número 0).
- Binario: usando
0bo0B. Ejemplo:101es 5 en decimal. - Octal: usando
0oo0O. Ejemplo:0o54es 44 en decimal. - Hexadecimal: usando
0xo0X. Ejemplo:0x13es 19 en decimal.
# Valores hexadecimales
hex_value1 = 0x13
hex_value2 = 0XaF
print("hexValue1 es:",hex_value1)
print("hexValue2 es:",hex_value2)
# Valores binarios
bin_val = 0b111
print('bin_val es:',bin_val)
bin_val = 0B101
print('bin_val es:',bin_val)
# Valores octales
oct_val = 0o54
print('oct_val es:',oct_val)
oct_val = 0O17
print('oct_val es:',oct_val)
Tipos de punto flotante
Los números de punto flotante guardan valores con decimales.
- Formato decimal: Ejemplo
5.12,512.0,0.512. - Formato científico: Ejemplo
5.12e2(que es 5.12×10²).
af1 = 5.2345556
print("af1 es:",af1)
af2 = 25.2345
print("af2 es:",type(af2))
f1=5.12e2
print("f1 es:",f1)
f2 = 5e3
print("f2 es:",f2)
print("f2 es:",type(f2))
Aunque 5e3 da 5000, sigue siendo un tipo float porque Python lo convierte automáticamente a 5000.0.
Cadenas de texto
En Python, las cadenas deben estar entre comillas simples o dobles.
str1 = 'c.biancheng.net'
str2 = "C语言中文网"
print(str1)
print(str2)
Si la cadena contiene comillas internas, se pueden usar comillas diferentes o escaparlas:
str3 = "I'm a coder"
print(str3)
str4 = '"Spring is here,let us jam!", said woodchuck.'
str5 = '"we are scared,Let\'s hide in the shade", says the bird'
Las cadenas pueden contener saltos de línea con el carácter de escape \:
s2 = 'The quick brown fox \
jumps over the lazy dog'
print(s2)
Cadenas largas
Usar tres comillas permite definir cadenas multilínea:
s = '''"Let's go fishing", said Mary.
"OK, Let's go", said her brother.
they walked to a lake'''
print(s)
Cadenas crudas
Las cadenas crudas comienzan con r y no interpretan caracteres especiales como \:
s1 = r'G:\publish\codes\02\2.4'
print(s1)
Codificación de caracteres en Python
Por defecto, Python usa UTF-8. Puedes convertir cadenas Unicode usando encode().
Tipo bytes
Python 3 introduce el tipo bytes para representar secuencias de bytes.
# Crear bytes vacíos
b1 = bytes()
b2 = b''
# Usar prefijo b para crear bytes
b3 = b'hello'
print(b3)
print(b3[0])
print(b3[2:4])
# Usar bytes() para convertir una cadena
b4 = bytes('Me encanta Python',encoding='utf-8')
print(b4)
# Usar encode() de una cadena
b5 = "Aprender Python es divertido".encode('utf-8')
print(b5)
Salida:
b'hello'
104
b'll'
b'\xe6\x88\x91\xe7\x88\xb1Python\xe7\xbc\x96\xe7\xa8\x8b'
b'\xe5\xad\xa6\xe4\xb9\xa0Python\xe5\xbe\x88\xe6\x9c\x89\xe8\xb6\xa3'
Tipo booleano
Python tiene un tipo bool para representar verdadero o falso.
>>> 5>3
True
>>> 4>20
False
Función input()
La función input() muestra un mensaje y espera la entrada del usuario, devolviendo siempre una cadena.
msg = input("Ingrese su valor:")
print (type(msg))
print(msg)
Salida:
Ingrese su valor:2
<class 'str'>
2
Función print()
print() puede mostrar múltiples valores y tiene opciones adicionales:
user_name = 'Charlie'
user_age = 8
print("Nombre:",user_name,"Edad:",user_age)
Salida:
Nombre: Charlie Edad: 8
Usando sep para cambiar el separador:
print("Nombre:",user_name,"Edad:",user_age,sep='|')
Salida:
Nombre:|Charlie|Edad:|8
Usando end para evitar salto de línea:
print(40,'\t',end="")
print(50,'\t',end="")
print(60,'\t',end="")
Salida:
40 50 60
Usando file para redirigir salida a archivo:
f = open("demo.txt","w")
print('Lágrimas de perla en la luna',file=f)
print('Solemne calor en el cielo',file=f)
f.close()
Formato de salida
Python permite formatear datos usendo %:
price = 108
print ("El precio del libro es %s" % price)
user = "Charlie"
age = 8
print("%s es un niño de %s años" % (user , age))
Ancho mínimo y formato
num = -28
print("num es: %6i" % num)
print("num es: %6d" % num)
print("num es: %6o" % num)
print("num es: %6x" % num)
print("num es: %6X" % num)
print("num es: %6s" % num)
Salida:
num es: -28
num es: -28
num es: -34
num es: -1c
num es: -1C
num es: -28
Alineación y signos
num2 = 30
print("num2 es: %06d" % num2)
print("num2 es: %+06d" % num2)
print("num2 es: %-6d" % num2)
Salida:
num2 es: 000030
num2 es: +00030
num2 es: 30
Precisión decimal y cadenas
my_value = 3.001415926535
print("my_value es: %8.3f" % my_value)
print("my_value es: %08.3f" % my_value)
print("my_value es: %+08.3f" % my_value)
the_name = "Charlie"
print("el nombre es: %.3s" % the_name)
print("el nombre es: %10.2s" % the_name)
Salida:
my_value es: 3.001
my_value es: 0003.001
my_value es: +003.001
el nombre es: Cha
el nombre es: Ch
Operadores en Python
Operadores aritméticos
Operadores para operaciones matemáticas básicas.
| Operador | Descripción | Ejemplo | Resultado |
|---|---|---|---|
| + | Suma | 12.45 + 15 | 27.45 |
| - | Resta | 4.56 - 0.26 | 4.3 |
| * | Multiplicación | 5 * 3.6 | 18.0 |
| / | División | 7 / 2 | 3.5 |
| % | Módulo | 7 % 2 | 1 |
| // | División entera | 7 // 2 | 3 |
| ** | Potencia | 2 ** 4 | 16 |
Operador de suma
a = 5.2
b = 3.1
the_sum = a + b
print("the_sum es:", the_sum)
También se usa para concatenar cadenas:
s1 = 'Hola, '
s2 = 'Charlie'
print(s1 + s2)
Operador de resta
c = 5.2
d = 3.1
sub = c - d
print("sub es:", sub)
También puede negar un valor:
x = -5.0
x = -x
print(x)
Operador de multiplicación
e = 5.2
f = 3.1
multiply = e * f
print("multiply es:", multiply)
También se usa para repetir cadenas:
s3 = 'locura '
print(s3 * 5)
Operador de división
print("19/4 es:", 19/4)
print("19//4 es:", 19//4)
aa = 5.2
bb = 3.1
print("aa/bb es:", aa / bb)
print("aa//bb es:", aa // bb)
Operador de módulo
print("5%3 es:", 5 % 3)
print("5.2%3.1 es:",5.2 % 3.1)
print("-5.2%-3.1 es:", -5.2 % -3.1)
print("5.2%-2.9 es:", 5.2 % -2.9)
print("5.2%-1.5 es:", 5.2 % -1.5)
print("-5.2%1.5 es:", -5.2 % 1.5)
Operador de potencia
print('5 elevado a 2:', 5 ** 2)
print('4 elevado a 3:', 4 ** 3)
print('Raíz cuadrada de 4:', 4 ** 0.5)
print('Raíz cúbica de 27:',27 **(1 / 3 ))
Operadores de asignación
Operador básico de asignación
st = "Python"
pi = 3.14
visited = True
También se puede copiar valores entre variables:
st2 = st
print(st2)
Operadores de asignación extendidos
a = 1
b = 2
a += b
print("a+b=",a)
a -= b
print("a-b=",a)
a *= b
print("a*b=",a)
a /= b
print("a/b=",a)
a %= b
print("a%b=",a)
c = 0
d = 2
c &= d
print("c&d=",c)
c |= d
print("c|d=",c)
Operadores bit a bit
Operan sobre valores enteros tratándolos como binarios.
| Operador | Descripción | Ejemplo |
|---|---|---|
| & | AND bit a bit | 4 & 5 |
| | | OR bit a bit | 4 | 5 |
| ^ | XOR bit a bit | 4 ^ 5 |
| ~ | NOT bit a bit | ~4 |
| << | Desplazamiento izquierdo | 4 << 2 |
| >> | Desplazamiento derecho | 4 >> 2 |
AND bit a bit
>>> 12 & 8
8
OR bit a bit
>>> 4 | 8
12
XOR bit a bit
>>> 31 ^ 22
9
NOT bit a bit
>>> ~-5
4
Desplazamiento izquierdo
>>> 5 << 2
20
>>>-5 << 2
-20
Desplazamiento derecho
>>> -5 >> 2
-2
Operadorse de comparación
Compara valores y devuelve True o False.
| Operador | Descripción |
|---|---|
| > | Mayor que |
| >= | Mayor o igual |
| < | Menor que |
| <= | Menor o igual |
| == | Igual |
| != | Distinto |
| is | Verifica si dos variables apuntan al mismo objeto |
| is not | Verifica si dos variables apuntan a objetos diferentes |
>>> print("¿5 es mayor que 4?", 5 > 4)
¿5 es mayor que 4? True
>>> print("¿3 elevado a 4 es mayor o igual que 90.0?", 3 ** 4 >= 90)
¿3 elevado a 4 es mayor o igual que 90.0? False
>>> print("¿20 es mayor o igual que 20.0?", 20 >= 20.0)
¿20 es mayor o igual que 20.0? True
>>> print("¿5 es igual a 5.0?", 5 == 5.0)
¿5 es igual a 5.0? True
>>> print("¿True es igual a False?", True == False)
¿True es igual a False? False
Diferencia entre == e is
import time
a = time.gmtime()
b = time.gmtime()
print(a == b) # True
print(a is b) # False
Operadores lógicos
Operan con valores booleanos.
| Operador | Descripción |
|---|---|
| and | Devuelve True si ambos operandos son True |
| or | Devuelve True si al menos uno es True |
| not | Devuelve True si el operando es False |
print(not False)
print(5 > 3 and 20.0 > 10)
print(4 >= 5 or "c" > "a")