《Python背记手册》 — Punto de entrada para todas las capacidades del libro
Activación y desactivación
Aplicable: Consultas y tareas relacionadas con el dominio de capacidades de este libro (consulta la columna de intención en la tabla de enrutamiento a continuación). No aplicable:
- Problemas que no sean de sintaxis: diseño arquitectónico de programas, optimización de rendimiento, normas de ingeniería, revisión de código.
- Prácticas modernas de ingeniería (no cubiertas en el libro): entornos virtuales, requirements/restricción de dependencias, anotaciones de tipo, gestores de contexto
with, depuradores y marcos de pruebas, cadenas de excepciones y excepciones personalizadas. - Tutoriales completos de bibliotecas de terceros (wxPython / Pygame / Flask / marcos de scraping solo tienen tablas de nombres y propósitos, sin programas ejecutables).
- Partes del manuscrito faltantes: tabla de funciones de conversión de tipos de datos (NR-02), línea de firma de
open()(NR-09), ejemplo de llamadaconnect()(NR-10),start/joinde Thread/Process (NR-11), creación e importación de sockets (NR-12), funciones dere(NR-13),wx.Appy bucle principal (NR-14).
Principios básicos (resumen permanente, las preguntas de visión general se pueden responder leyendo esto)
- El conocimiento del libro se organiza en el trío «forma sintáctica + explicación parámetro por parámetro + resultado del ejemplo»: recordando la forma y el alcance del valor predeterminado de cada parámetro, se puede escribir la sintaxis correcta.
- Las ramas y los bucles solo tienen dos modos de conducción: ejecutar si la condición es verdadera, volver a evaluar después de la ejecución (
while), o tomar valores uno por uno de un objeto (for);breaksale del bucle,continuesalta la ronda actual,elseno puede aparecer solo. - Las listas, tuplas y cadenas comparten el mismo conjunto de tres parámetros para el slicing: incluye el inicio, excluye el final, y el slicing genera una nueva secuencia (la secuencia original no se modifica).
- Para ordenar, primero pregúntate «¿todavía necesito el orden original?»: si lo necesitas, usa
sorted(no modifica la lista original); si no, usasort(modifica in situ). - Las acciones después de un error se dividen en tres partes:
trycoloca el código que puede tener errores,exceptcaptura la excepción especificada y la maneja,finallycoloca el código que debe ejecutarse en cualquier caso;raisese usa para «no manejar en este nivel»,assertse usa para fijar una premisa que se cree que es cierta. - Los archivos y las bases de datos tienen una estructura de dos niveles «primero obtén el objeto, luego llama al método»:
openobtiene el objeto archivo;connectobtiene el objeto de conexión, y luegocursor()obtiene el objeto cursor — el SQL debe enviarse al cursor, y después de modificar hay que hacercommit. - El manuscrito está dañado en el OCR (tablas aplastadas a una columna, paréntesis convertidos en la letra O, llaves convertidas en paréntesis): las citas deben copiar el manuscrito original textualmente, no rellenar ninguna entrada dañada basándose en el sentido común.
Enrutamiento de capacidades (lee primero esta tabla, luego carga 1 tarjeta de capacidad según la intención)
| Intención del usuario | Leer primero | Lectura complementaria / Notas |
|---|---|---|
Escribir lógica de rama «ejecutar si se cumple la condición»; elegir entre while y for; salir del bucle antes de tiempo o saltar un elemento (break / continue); corregir un error de sintaxis de else o palabra reservada; diagnosticar por qué un bucle no se ejecuta; hacer que el programa pregunte repetidamente o se repita hasta que la condición ya no se cumpla (escenario típico de while) | references/capabilities/control-flow-and-loops.md | references/capabilities/operator-precedence.md, references/capabilities/input-and-print.md, references/capabilities/list-comprehension.md, references/capabilities/exception-handling.md |
Tomar un segmento de una secuencia (primeros elementos, un segmento intermedio, tomar uno de cada varios); cortar una parte de una cadena; cuando falte o sobre un elemento en el resultado del slicing, verificar los límites; confirmar si el slicing modifica la lista/cadena original; entender qué elementos toma x[1:5:2] escrito por otros | references/capabilities/sequence-slicing.md | references/capabilities/list-and-tuple-operations.md, references/capabilities/string-encoding-split-join.md |
| Contar cuántas veces aparece un elemento o en qué posición está; fusionar los elementos de otra lista en la lista actual; recorrer una lista con índice; generar una lista o tupla por rango, crear una lista vacía; sumar y luego añadir una base | references/capabilities/list-and-tuple-operations.md | references/capabilities/sequence-slicing.md, references/capabilities/sort-vs-sorted.md, references/capabilities/list-comprehension.md, references/capabilities/dict-and-set-operations.md |
Ordenar una lista en orden ascendente o descendente; conservar el orden original después de ordenar; ordenar in situ, sin crear un nuevo objeto; ordenar por una clave de un elemento (por ejemplo, sin distinguir mayúsculas/minúsculas); decidir si usar sort o sorted en un fragmento de código | references/capabilities/sort-vs-sorted.md | references/capabilities/list-and-tuple-operations.md, references/capabilities/function-definition-and-call.md |
| Generar una nueva lista en una línea; mapear elementos de una lista a una nueva lista; filtrar elementos de una lista que cumplan una condición; convertir una comprensión de lista incomprensible en un bucle | references/capabilities/list-comprehension.md | references/capabilities/list-and-tuple-operations.md, references/capabilities/control-flow-and-loops.md |
Crear un diccionario y buscar por clave; deduplicar datos en un conjunto; recorrer un diccionario obteniendo pares clave-valor; determinar si una clave o elemento de conjunto puede usar un tipo determinado; elegir del/pop/remove/clear para eliminar contenido de un conjunto | references/capabilities/dict-and-set-operations.md | references/capabilities/list-and-tuple-operations.md |
| Resolver problemas de codificación y codificación inconsistente; dividir una cadena en campos por un separador; combinar múltiples cadenas en una; hacer que la codificación/descodificación sea tolerante a caracteres no válidos | references/capabilities/string-encoding-split-join.md | references/capabilities/sequence-slicing.md, references/capabilities/file-and-directory-operations.md, references/capabilities/string-formatting.md, references/capabilities/regex-construction.md |
Insertar variables en una frase de salida; controlar el número de decimales; escribir un formato de porcentaje; escribir una representación binaria/hexadecimal; elegir entre % y format() | references/capabilities/string-formatting.md | references/capabilities/string-encoding-split-join.md, references/capabilities/input-and-print.md |
Determinar el orden de evaluación y el resultado de una expresión; expandir una asignación compuesta (+=, etc.) a su forma desarrollada; confirmar si el resultado de una expresión de comparación/lógica es True o False; decidir qué partes de una expresión condicional se evalúan primero y si se necesitan paréntesis | references/capabilities/operator-precedence.md | references/capabilities/control-flow-and-loops.md |
Hacer que el programa reciba la entrada del teclado del usuario; escribir un texto indicador para la entrada; usar print para mostrar el resultado de una variable o expresión; construir un esqueleto mínimo de diálogo con el usuario usando input/print (las condiciones y bucles del esqueleto consultar control-flow-and-loops) | references/capabilities/input-and-print.md | references/capabilities/control-flow-and-loops.md, references/capabilities/string-formatting.md |
Encapsular código repetitivo en una función; definir parámetros con valores predeterminados; hacer que una función devuelva uno o más valores; usar lambda para escribir una función pequeña y temporal; pasar una función como argumento donde se necesite un objeto de función (por ejemplo, el parámetro key de ordenación; el llenado de target en escenarios concurrentes consultar process-and-thread) | references/capabilities/function-definition-and-call.md | references/capabilities/sort-vs-sorted.md, references/capabilities/exception-handling.md, references/capabilities/class-and-objects.md, references/capabilities/process-and-thread.md |
Definir una clase y crear una instancia; escribir un método de instancia y manejar la posición de self; usar @property para hacer una propiedad calculada; usar herencia para reutilizar una clase existente y sobrescribir métodos | references/capabilities/class-and-objects.md | references/capabilities/function-definition-and-call.md, references/capabilities/gui-window-construction.md |
Determinar si una funcionalidad pertenece a la biblioteca estándar o si necesita instalarse con un paquete; escribir sentencias import/from...import (incluyendo alias y comodín *); instalar, ver y desinstalar módulos de terceros; diagnosticar ImportError/ModuleNotFoundError | references/capabilities/module-import-and-pip.md | references/capabilities/database-access.md, references/capabilities/socket-communication.md |
Cuando un programa se bloquea por un error, convertirlo en un manejo controlable; escribir la estructura de tres partes try...except...finally y determinar qué poner en cada bloque; no manejar en este nivel, lanzar la excepción hacia arriba al llamante; usar assert para exponer una suposición que el programa cree que es cierta; localizar el error por su nombre (NameError/KeyError/ZeroDivisionError, etc.) | references/capabilities/exception-handling.md | references/capabilities/function-definition-and-call.md, references/capabilities/file-and-directory-operations.md, references/capabilities/control-flow-and-loops.md |
| Escribir contenido en un archivo o leerlo de un archivo; cuando no se puede escribir después de abrir un archivo (por defecto solo lectura); eliminar un archivo o cambiarle el nombre; ver metadatos como el tamaño del archivo, la hora de la última modificación, etc.; manejar la diferencia entre la misma ruta de directorio y una ruta completa | references/capabilities/file-and-directory-operations.md | references/capabilities/exception-handling.md, references/capabilities/string-encoding-split-join.md |
Almacenar datos en una base de datos o consultarlos desde ella; distinguir entre el objeto de conexión y el objeto cursor y qué hace cada uno; cuando los datos modificados no tienen efecto, sospechar que falta el commit; recuperar los resultados de la consulta (siguiente / cantidad especificada / todos); confirmar qué parámetros tiene connect() y determinar el nombre del módulo controlador según el tipo de base de datos (la instalación e importación del controlador consultar module-import-and-pip) | references/capabilities/database-access.md | references/capabilities/module-import-and-pip.md |
Usar Process o Thread para iniciar una tarea (escribir la llamada y los parámetros, incluyendo qué llenar en target/args/kwargs); confirmar si los parámetros de construcción del proceso y del hilo son consistentes; entender qué hace mutex.acquire()/release(); determinar qué sucede cuando acquire(blocking=False) no puede obtener el bloqueo; proteger datos compartidos leídos y escritos por múltiples ejecutores | references/capabilities/process-and-thread.md | references/capabilities/function-definition-and-call.md |
Escribir la secuencia de llamadas del servidor TCP desde la vinculación hasta la recepción de datos; confirmar cuánto debe llenarse en backlog de listen; explicar por qué accept se detiene (espera bloqueante); diagnosticar en qué paso verificar el fallo de conexión del cliente (socket.error); consultar los usos de recv/send/sendall/recvfrom/sendto | references/capabilities/socket-communication.md | references/capabilities/module-import-and-pip.md |
Construir un patrón de expresión regular; consultar el significado de los metacaracteres (punto, barra invertida w/s/d/b, ^, $); elegir cuantificador de repetición para una posición específica; elegir banderas de ignorar mayúsculas/minúsculas, multilínea, etc.; determinar si ^ y $ coinciden con toda la cadena o por línea | references/capabilities/regex-construction.md | references/capabilities/string-encoding-split-join.md |
Leer o reescribir la construcción de ventanas y controles wxPython; consultar los parámetros de wx.Frame y los elementos que se pueden omitir; configurar estilos como solo lectura/contraseña para un cuadro de entrada; elegir el tipo de sizer para el diseño de controles; confirmar qué pasar en parent para la ventana de nivel superior y los controles respectivamente | references/capabilities/gui-window-construction.md | references/capabilities/class-and-objects.md |
Consultas no relacionadas con capacidades:
- Nombre del libro / autor / capítulos / resumen del libro completo → references/overview.md
- Explicación de términos → references/glossary.md
- Referencia rápida de reglas de decisión (cuando no se necesita la base textual original) → references/cheatsheet.md
- Índice completo de intenciones y palabras clave (para intenciones no cubiertas en esta tabla, consulta primero aquí) → references/capability-index.md
Reglas de carga
- Cada tarea debe leer primero este archivo, luego cargar 1 tarjeta de capacidad según la tabla de enrutamiento; cuando la tarea abarque claramente múltiples dominios, se pueden cargar como máximo 2 tarjetas.
- Las preguntas de resumen / nombre del libro no cargan tarjetas de capacidad, se responden con los «Principios básicos» y overview.md.
- Si la tabla de enrutamiento y capability-index.md no pueden hacer coincidir una intención, indique claramente que está fuera del alcance de este libro, no lo fuerce.
Límites y criterio de parada
- Cuando el problema requiera un «diagrama de montaje» no proporcionado por el manuscrito (ver el último punto de out_of_scope), detenga la inferencia e indique claramente «no cubierto por el libro», no lo complete ni invente basándose en el sentido común.
- Cuando sea necesario citar la tabla de funciones de conversión de tipos de datos (NR-02, el nombre de la función de la línea
ord()está desplazado por la línea siguiente), deje de citar esa tabla e indique la ubicación del daño en el manuscrito. - Cuando el usuario quiera citar textualmente para impresos, materiales didácticos, etc., recuérdele que el manuscrito es un texto reconstruido por OCR (NR-15: identificación incorrecta de símbolos, tablas aplastadas a una columna, concatenación entre líneas), y que primero debe cambiarse por un manuscrito mejor y volver a ejecutar la verificación de las citas.