diff --git a/dict b/dict index 586fe50333..529d2fcca1 100644 --- a/dict +++ b/dict @@ -29,6 +29,7 @@ API ASCII Ascii Aahz +ActivePython ActiveState Adam Adviértase @@ -37,6 +38,7 @@ Addison Ahlstrom Alex Android +Anthony asincrónico asincrónicos Associates @@ -55,6 +57,7 @@ Aqua auxiliar Awk B +Bartelt Bind bidireccional Bare @@ -103,6 +106,7 @@ Conway Cookbook Ctrl Cython +DateTime Excel Desafortunadamente Dershowitz @@ -129,11 +133,13 @@ Friedl GIL Google Grayson +Gordon Greg Gtk+ HTML Hammond Hat +Heller Henstridge heredable heredables @@ -177,6 +183,8 @@ MacPython Mandrake Manheimer Mark +Matthias +McMillan Matt Microsoft Mitch @@ -191,6 +199,7 @@ Nd None Neumann NumPy +Numeric NotImplemented Numerical Octales @@ -208,15 +217,19 @@ Paul Perl Phil Pillow +PyChecker +Pydb PowerShell PyFLTK PyGtk +Pylint PyQt PyRun PySide Python PyObjC Pythónico +PythonWin PyModuleDef PyConfig PythonCore @@ -234,18 +247,23 @@ Reilly Reingold ReturnType Rezinsky +Roskind Rossum Ruby SYSV Schwartz +Scintilla SciPy SimpleFileExFlags Smalltalk Sobreescriben Solaris +SomeClassName Spot Sparc Stein +Schwartzian +Schwartziana Steen subintérprete subintérpretes @@ -254,9 +272,16 @@ subinterprete subinterpretes TCP Tcl +Thomas Tix Tk Tkinter +Tools +Transform +Tuininga +Tutorial +Ulf +UnboundLocalError Toplevel Tokenizador Transactions @@ -264,7 +289,10 @@ Tuple Tutorial TypedDict Unicode +UnicodeDecodeError +UnicodeEncodeError Unix +Urlichs unix Usenet UTF @@ -282,6 +310,7 @@ Xlib Xt Z Zip +Zope ab aleatoriamente antepuesto @@ -343,10 +372,17 @@ bytearray búfer búferes bzip +c +capturable +capturador cargable cargables +cdr +cfg +chomp char class +classname clonación coerción collector @@ -360,6 +396,14 @@ compárese comparablemente compilada computacionales +config +cons +conversor +code +códec +códecs +configúrelo +comp conversor configurarlo códec @@ -378,6 +422,7 @@ conceptualmente consolelib contravariante contravariantes +constructo constructos conversor corutina @@ -385,6 +430,7 @@ correlacionan correlacionarán corrutina corrutinas +count covariante covariantes criptográficamente @@ -458,6 +504,7 @@ docstrings ecualizadora effbot else +encapsulación empaquetamiento encriptada encriptando @@ -477,6 +524,7 @@ escribible escapándolo except exclude +exe explícitamente exponenciación exit @@ -504,6 +552,7 @@ free freeze from future +g from future from @@ -531,10 +580,15 @@ heredables heurístico helper host +html i identación +identity id idiomáticas +idiomático +idle +ids if implementación implementaciones @@ -593,6 +647,7 @@ invocable invocables instanciadas isinstance +item iso iterador iteradores @@ -613,6 +668,7 @@ latín Latin latin l +lang latin letter lexicográfica @@ -620,6 +676,7 @@ lexicográfico length libtclsam libtksam +list linters list ListWrapper @@ -638,6 +695,8 @@ map mapear mapeo mapeos +marshal +memoizing mbcs metacaracteres metaclase @@ -665,6 +724,20 @@ mortem muestrea multi multicast +multidimensional +multihilo +multilínea +mutarlo +mx +naif +name +nonlocal +object +obsérvese +or +ordenables +path +pathlib multifásica multifase multihilo @@ -704,6 +777,7 @@ naíf naífs namedtuple ncurses +octal octales nonlocal normalización @@ -744,6 +818,8 @@ parsear perfilador pax pasándole +pdb +per pasándoles path pathlib @@ -754,6 +830,7 @@ permitiéndole permutación permutaciones personalizadamente +personitas pid pip píxeles @@ -824,6 +901,7 @@ recompilación recompilada recompilar recompilarse +recursión recordarle recursión recursivamente @@ -831,6 +909,7 @@ RedHat redefinida recursivo recurrencia +redefine redefinido redefinidos redefinir @@ -859,18 +938,21 @@ referenciado referenciados referencian referenciar +referenciará referenciarse reintenta reintentar regex reinicializador reinicializar +relectura reimplementado reintentar remove renombramiento renderización reordenar +reordene repr reposicionamiento reproducibles @@ -880,6 +962,11 @@ retrocompatible retrollamada remuestreo request +result +reunificar +rf +rm +root retrollamada reubicar reutilizable @@ -890,6 +977,7 @@ root reubicar run s +safe str scanf script @@ -903,6 +991,7 @@ selectivamente self seleccionables semánticamente +sep semialeatorio semialeatoria semiabierto @@ -929,6 +1018,8 @@ sobreescriban sobreescribe sobreescriben sobreescribir +sobreescrita +sobreescrito socket sockets solucionadores @@ -937,6 +1028,7 @@ sort source SortKey spam +sscanf stderr stdin Stats @@ -960,6 +1052,7 @@ subárbol subárboles subcadena subcadenas +subcarpeta subclasificado subcarpetas subclaseada @@ -1004,6 +1097,7 @@ super superclase superclases sys +system t tab tabulación @@ -1014,6 +1108,7 @@ tarball termcap tcl testeo +thread temporizaciones temporización Ted @@ -1036,6 +1131,8 @@ try tty tupla tuplas +tuple +tutorial tzname txt ua @@ -1048,6 +1145,7 @@ unices unicode unidireccional uninstall +usables urllib us utf diff --git a/faq/programming.po b/faq/programming.po index 9057f9b79c..513509782f 100644 --- a/faq/programming.po +++ b/faq/programming.po @@ -6,47 +6,52 @@ # Check https://github.com/PyCampES/python-docs-es/blob/3.8/TRANSLATORS to # get the list of volunteers # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: Python 3.8\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-05 12:54+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" +"POT-Creation-Date: 2019-05-06 11:59-0400\n" +"PO-Revision-Date: 2020-07-26 11:04+0200\n" +"Last-Translator: Kiko Correoso\n" "Language-Team: python-doc-es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.8.0\n" +"Last-Translator: \n" +"Language: es\n" +"X-Generator: Poedit 2.0.6\n" #: ../Doc/faq/programming.rst:5 msgid "Programming FAQ" -msgstr "" +msgstr "Preguntas frecuentes de programación" #: ../Doc/faq/programming.rst:8 msgid "Contents" -msgstr "" +msgstr "Contenido" #: ../Doc/faq/programming.rst:12 msgid "General Questions" -msgstr "" +msgstr "Preguntas generales" #: ../Doc/faq/programming.rst:15 msgid "" "Is there a source code level debugger with breakpoints, single-stepping, " "etc.?" msgstr "" +"¿Existe un depurador a nivel de código fuente con puntos de interrupción, " +"depuración paso a paso, etc?" #: ../Doc/faq/programming.rst:17 ../Doc/faq/programming.rst:63 msgid "Yes." -msgstr "" +msgstr "Sí." #: ../Doc/faq/programming.rst:19 msgid "" "Several debuggers for Python are described below, and the built-in function :" "func:`breakpoint` allows you to drop into any of them." msgstr "" +"Debajo se describen algunos depuradores para Python y la función integrada :" +"func:`breakpoint` te permite ejecutar alguno de ellos." #: ../Doc/faq/programming.rst:22 msgid "" @@ -55,6 +60,10 @@ msgid "" "Library Reference Manual `. You can also write your own debugger by " "using the code for pdb as an example." msgstr "" +"El módulo pdb es en depurador en modo consola simple pero conveniente para " +"Python. Es parte de la biblioteca estándar de Python y está :mod:" +"`documentado en el manual de referencia de la biblioteca `. Puedes " +"escribir tu propio depurador usando el código de pdb como ejemplo." #: ../Doc/faq/programming.rst:27 msgid "" @@ -62,16 +71,26 @@ msgid "" "Python distribution (normally available as Tools/scripts/idle), includes a " "graphical debugger." msgstr "" +"El entorno interactivo de desarrollo IDLE, el cual es parte de la " +"distribución Python estándar (disponible, generalmente, como Tools/scripts/" +"idle), incluye un depurador gráfico." #: ../Doc/faq/programming.rst:31 msgid "" "PythonWin is a Python IDE that includes a GUI debugger based on pdb. The " -"Pythonwin debugger colors breakpoints and has quite a few cool features such " -"as debugging non-Pythonwin programs. Pythonwin is available as part of the " +"PythonWin debugger colors breakpoints and has quite a few cool features such " +"as debugging non-PythonWin programs. PythonWin is available as part of the " "`Python for Windows Extensions `__ project and as a part of the ActivePython distribution (see https://www." "activestate.com/activepython\\ )." msgstr "" +"PythonWin es un IDE Python que incluye un depurador con GUI basado en pdb. " +"El depurador PythonWin colorea los puntos de interrupción y dispone de " +"características geniales como la depuración de programas no modificados " +"mediante PythonWin. PythonWin está disponible como parte del proyecto `Las " +"extensiones de Python para Windows `__ y como parte de la distribución ActivePython (ver https://www." +"activestate.com/activepython\\ )." #: ../Doc/faq/programming.rst:38 msgid "" @@ -81,12 +100,20 @@ msgid "" "browsers, inheritance hierarchies, doc string generated html documentation, " "an advanced debugger, integrated help, and Zope support." msgstr "" +"`Boa Constructor `_ es un IDE y " +"creador de GUIs que usa wxWidgets. Ofrece creación y manipulación visual de " +"marcos, un inspector de objetos, muchas vistas sobre la fuente como los " +"navegadores de objetos, jerarquías de herencia, documentación docstring " +"generada como html, un depurador avanzado, ayuda integrada y soporte para " +"Zope." #: ../Doc/faq/programming.rst:44 msgid "" "`Eric `_ is an IDE built on PyQt and " "the Scintilla editing component." msgstr "" +"`Eric `_ es un IDE creado usando PyQt " +"y el componente de edición Scintilla." #: ../Doc/faq/programming.rst:47 msgid "" @@ -95,28 +122,36 @@ msgid "" "can be found at http://bashdb.sourceforge.net/pydb/ and DDD can be found at " "https://www.gnu.org/software/ddd." msgstr "" +"Pydb es una versión del depurador estándar de Python pdb, modificado para " +"usarse con DDD (*Data Display Debugger*), un popular frontal gráfico para " +"depuradores. Pydb se puede encontrar en http://bashdb.sourceforge.net/pydb/ " +"y DDD se puede encontrar en https://www.gnu.org/software/ddd." #: ../Doc/faq/programming.rst:52 msgid "" "There are a number of commercial Python IDEs that include graphical " "debuggers. They include:" msgstr "" +"Existen varios IDEs comerciales para Python que incluyen depuradores " +"gráficos. Entre ellos tenemos:" #: ../Doc/faq/programming.rst:55 msgid "Wing IDE (https://wingware.com/)" -msgstr "" +msgstr "Wing IDE (https://wingware.com/)" #: ../Doc/faq/programming.rst:56 msgid "Komodo IDE (https://komodoide.com/)" -msgstr "" +msgstr "Komodo IDE (https://komodoide.com/)" #: ../Doc/faq/programming.rst:57 msgid "PyCharm (https://www.jetbrains.com/pycharm/)" -msgstr "" +msgstr "PyCharm (https://www.jetbrains.com/pycharm/)" #: ../Doc/faq/programming.rst:61 msgid "Is there a tool to help find bugs or perform static analysis?" msgstr "" +"¿Existe alguna herramienta que ayude a encontrar errores o realizar análisis " +"estático?" #: ../Doc/faq/programming.rst:65 msgid "" @@ -124,6 +159,9 @@ msgid "" "and warns about code complexity and style. You can get PyChecker from " "http://pychecker.sourceforge.net/." msgstr "" +"PyChecker es un analizador estático que encuentra errores en código fuente " +"Python y avisa sobre complejidad del código y estilo. Puedes obtener " +"PyChecker desde http://pychecker.sourceforge.net/." #: ../Doc/faq/programming.rst:69 msgid "" @@ -135,6 +173,15 @@ msgid "" "standard, whether declared interfaces are fully implemented, and more. " "https://docs.pylint.org/ provides a full list of Pylint's features." msgstr "" +"`Pylint `_ es otra herramienta que comprueba si un " +"módulo satisface un estándar de código y, además, también hace posible " +"escribir *plug-ins* para añadir características personalizadas. Además de " +"la comprobación de errores que realiza PyChecker, Pylint ofrece algunas " +"características adicionales como la comprobación de la longitud de línea, si " +"los nombres de variable han sido creados correctamente de acuerdo a tu " +"estándar de código, si las interfaces declaradas han sido implementadas de " +"forma completa y más. https://docs.pylint.org/ proporciona una lista " +"completa de las características de Pylint." #: ../Doc/faq/programming.rst:77 msgid "" @@ -142,10 +189,15 @@ msgid "" "pyre-check.org/>`_, and `Pytype `_ can " "check type hints in Python source code." msgstr "" +"Inspectores estáticos de tipos como `Mypy `_, `Pyre " +"`_, y `Pytype `_ " +"pueden hacer comprobaciones de las anotaciones de tipos en código fuente " +"Python." #: ../Doc/faq/programming.rst:84 msgid "How can I create a stand-alone binary from a Python script?" msgstr "" +"¿Cómo puedo crear un binario independiente a partir de un programa Python?" #: ../Doc/faq/programming.rst:86 msgid "" @@ -155,6 +207,12 @@ msgid "" "determine the set of modules required by a program and bind these modules " "together with a Python binary to produce a single executable." msgstr "" +"No necesitas tener la habilidad de compilar Python a código C si lo único " +"que necesitas es un programa independiente que los usuarios puedan descargar " +"y ejecutar sin necesidad de instalar primero una distribución Python. Existe " +"una serie de herramientas que determinan el conjunto de módulos que necesita " +"un programa y une estos módulos conjuntamente con un binario Python para " +"generar un único ejecutable." #: ../Doc/faq/programming.rst:92 msgid "" @@ -163,6 +221,11 @@ msgid "" "you can embed all your modules into a new program, which is then linked with " "the standard Python modules." msgstr "" +"Una forma es usando la herramienta *freeze*, la cual viene incluida con el " +"árbol de código Python como ``Tools/freeze``. Convierte el byte code Python " +"a arrays C; un compilador C permite incrustar todos tus módulos en un nuevo " +"programa que, posteriormente se puede enlazar con los módulos estándar de " +"Python." #: ../Doc/faq/programming.rst:97 msgid "" @@ -176,40 +239,59 @@ msgid "" "rest of the Python interpreter to form a self-contained binary which acts " "exactly like your script." msgstr "" +"Funciona escaneando su fuente de forma recursiva en busca de declaraciones " +"de importación (en ambas formas) y buscando los módulos en la ruta estándar " +"de Python, así como en el directorio de la fuente (para los módulos " +"incorporados). Luego convierte el *bytecode* de los módulos escritos en " +"Python en código C (inicializadores de arrays que pueden ser convertidos en " +"objetos de código usando el módulo marshal) y crea un archivo de " +"configuración a medida que sólo contiene aquellos módulos incorporados que " +"se usan realmente en el programa. A continuación, compila el código C " +"generado y lo enlaza con el resto del intérprete de Python para formar un " +"binario autónomo que actúa exactamente igual que su script." #: ../Doc/faq/programming.rst:106 msgid "" "Obviously, freeze requires a C compiler. There are several other utilities " "which don't. One is Thomas Heller's py2exe (Windows only) at" msgstr "" +"Obviamente, freeze necesita un compilador C. Existen otras utilidades que " +"no necesitan un compilador C. Una de ellas es py2exe de Thomas Heller (solo " +"disponible para Windows) en" #: ../Doc/faq/programming.rst:109 msgid "http://www.py2exe.org/" -msgstr "" +msgstr "http://www.py2exe.org/" #: ../Doc/faq/programming.rst:111 msgid "" "Another tool is Anthony Tuininga's `cx_Freeze `_." msgstr "" +"Otra herramienta es `cx_Freeze `_ de Anthony Tuininga." #: ../Doc/faq/programming.rst:115 msgid "Are there coding standards or a style guide for Python programs?" msgstr "" +"¿Existen estándares de código o una guía de estilo para programas Python?" #: ../Doc/faq/programming.rst:117 msgid "" "Yes. The coding style required for standard library modules is documented " "as :pep:`8`." msgstr "" +"Sí. El estilo de código requerido para los módulos de la biblioteca estándar " +"se encuentra documentado como :pep:`8`." #: ../Doc/faq/programming.rst:122 msgid "Core Language" -msgstr "" +msgstr "Núcleo del lenguaje" #: ../Doc/faq/programming.rst:125 msgid "Why am I getting an UnboundLocalError when the variable has a value?" msgstr "" +"¿Por qué obtengo un *UnboundLocalError* cuando la variable tiene un valor?" #: ../Doc/faq/programming.rst:127 msgid "" @@ -217,18 +299,22 @@ msgid "" "when it is modified by adding an assignment statement somewhere in the body " "of a function." msgstr "" +"Puede ser una sorpresa el hecho de obtener un UnboundLocalError en código " +"que había estado funcionando previamente cuando se modifica mediante el " +"añadido de una declaración de asignación en alguna parte del cuerpo de una " +"función." #: ../Doc/faq/programming.rst:131 msgid "This code:" -msgstr "" +msgstr "Este código:" #: ../Doc/faq/programming.rst:139 msgid "works, but this code:" -msgstr "" +msgstr "funciona, pero este código:" #: ../Doc/faq/programming.rst:146 msgid "results in an UnboundLocalError:" -msgstr "" +msgstr "resulta en un UnboundLocalError:" #: ../Doc/faq/programming.rst:153 msgid "" @@ -239,12 +325,21 @@ msgid "" "Consequently when the earlier ``print(x)`` attempts to print the " "uninitialized local variable and an error results." msgstr "" +"Esto es debido a que cuando realizas una asignación a una variable en un " +"ámbito de aplicación, esa variable se convierte en local y enmascara " +"cualquier variable llamada de forma similar en un ámbito de aplicación " +"exterior. Desde la última declaración en foo asigna un nuevo valor a ``x``, " +"el compilador la reconoce como una variable local. Consecuentemente, cuando " +"el ``print(x)`` más próximo intenta mostrar la variable local no " +"inicializada se muestra un error." #: ../Doc/faq/programming.rst:160 msgid "" "In the example above you can access the outer scope variable by declaring it " "global:" msgstr "" +"En el ejemplo anterior puedes acceder al ámbito de aplicación exterior a la " +"variable declarándola como global:" #: ../Doc/faq/programming.rst:171 msgid "" @@ -252,16 +347,23 @@ msgid "" "the superficially analogous situation with class and instance variables) you " "are actually modifying the value of the variable in the outer scope:" msgstr "" +"Esta declaración explícita es necesaria de cara a recordarte que (a " +"diferencia de la situación superficialmente análoga con las variables de " +"clase e instancia) estás modificando el valor de la variable en un ámbito de " +"aplicación más externo:" #: ../Doc/faq/programming.rst:178 msgid "" "You can do a similar thing in a nested scope using the :keyword:`nonlocal` " "keyword:" msgstr "" +"Puedes hacer algo similar en un ámbito de aplicación anidado usando la " +"palabra clave :keyword:`nonlocal`:" #: ../Doc/faq/programming.rst:195 msgid "What are the rules for local and global variables in Python?" msgstr "" +"¿Cuáles son las reglas para las variables locales y globales en Python?" #: ../Doc/faq/programming.rst:197 msgid "" @@ -270,6 +372,10 @@ msgid "" "function's body, it's assumed to be a local unless explicitly declared as " "global." msgstr "" +"En Python, las variables que solo se encuentran referenciadas dentro de una " +"función son globales implícitamente. Si a una variable se le asigna un " +"valor en cualquier lugar dentro del cuerpo de una función, se asumirá que es " +"local a no ser que explícitamente se la declare como global." #: ../Doc/faq/programming.rst:201 msgid "" @@ -281,18 +387,30 @@ msgid "" "a component of an imported module. This clutter would defeat the usefulness " "of the ``global`` declaration for identifying side-effects." msgstr "" +"Aunque, inicialmente, puede parecer sorprendente, un momento de " +"consideración permite explicar esto. Por una parte, requerir :keyword:" +"`global` para variables asignadas proporciona una barrera frente a efectos " +"secundarios indeseados. Por otra parte, si ``global`` es requerido para " +"todas las referencias globales, deberás usar ``global`` en todo momento. " +"Deberías declarar como global cualquier referencia a una función integrada o " +"a un componente de un módulo importado. Este embrollo arruinaría la utilidad " +"de la declaración \"global\" para identificar los efectos secundarios." #: ../Doc/faq/programming.rst:211 msgid "" "Why do lambdas defined in a loop with different values all return the same " "result?" msgstr "" +"¿Por qué las funciones lambda definidas en un bucle con diferentes valores " +"devuelven todas el mismo resultado?" #: ../Doc/faq/programming.rst:213 msgid "" "Assume you use a for loop to define a few different lambdas (or even plain " "functions), e.g.::" msgstr "" +"Considera que usas un bucle *for* para crear unas pocas funciones lambda (o, " +"incluso, funciones normales), por ejemplo.::" #: ../Doc/faq/programming.rst:220 msgid "" @@ -301,6 +419,10 @@ msgid "" "``1``, ``4``, ``9``, and ``16``. However, when you actually try you will " "see that they all return ``16``::" msgstr "" +"Lo siguiente proporciona una lista que contiene 5 funciones lambda que " +"calculan ``x**2``. Esperarías que, cuando se les invoca, devolvieran, " +"respectivamente, ``0``, ``1``, ``4``, ``9``y ``16``. Sin embargo, cuando lo " +"ejecutes verás que todas devuelven ``16``::" #: ../Doc/faq/programming.rst:230 msgid "" @@ -310,12 +432,21 @@ msgid "" "the functions now return ``4**2``, i.e. ``16``. You can also verify this by " "changing the value of ``x`` and see how the results of the lambdas change::" msgstr "" +"Esto sucede porque ``x`` no es una función lambda local pero se encuentra " +"definida en un ámbito de aplicación externo y se accede cuando la lambda es " +"invocada --- no cuando ha sido definida. Al final del bucle, el valor de " +"``x`` es ``4``, por tanto, ahora todas las funciones devuelven ``4**2``, i." +"e. ``16``. También puedes verificar esto mediante el cambio del valor de " +"``x`` y ver como los resultados de las lambdas cambian::" #: ../Doc/faq/programming.rst:240 msgid "" "In order to avoid this, you need to save the values in variables local to " "the lambdas, so that they don't rely on the value of the global ``x``::" msgstr "" +"De cara a evitar esto necesitas guardar los valores en variables locales a " +"las funciones lambda de tal forma que no dependan del valor de la ``x`` " +"global::" #: ../Doc/faq/programming.rst:247 msgid "" @@ -325,16 +456,24 @@ msgid "" "the first lambda, ``1`` in the second, ``2`` in the third, and so on. " "Therefore each lambda will now return the correct result::" msgstr "" +"Aquí, ``n=x`` crea una nueva variable ``n`` local a la función lambda y " +"ejecutada cuando la función lambda se define de tal forma que tiene el mismo " +"valor que tenía ``x`` en ese punto en el bucle. Esto significa que el valor " +"de ``n`` será ``0`` en la primera función lambda, ``1`` en la segunda, ``2`` " +"en la tercera y así sucesivamente. Por tanto, ahora cada lambda devolverá el " +"resultado correcto::" #: ../Doc/faq/programming.rst:258 msgid "" "Note that this behaviour is not peculiar to lambdas, but applies to regular " "functions too." msgstr "" +"Es de destacar que este comportamiento no es peculiar de las funciones " +"lambda sino que aplica también a las funciones regulares." #: ../Doc/faq/programming.rst:263 msgid "How do I share global variables across modules?" -msgstr "" +msgstr "¿Cómo puedo compartir variables globales entre módulos?" #: ../Doc/faq/programming.rst:265 msgid "" @@ -345,28 +484,36 @@ msgid "" "each module, any changes made to the module object get reflected " "everywhere. For example:" msgstr "" +"La forma canónica de compartir información entre módulos dentro de un mismo " +"programa sería creando un módulo especial (a menudo llamado config o cfg). " +"Simplemente importa el módulo config en todos los módulos de tu aplicación; " +"el módulo estará disponible como un nombre global. Debido a que solo hay " +"una instancia de cada módulo, cualquier cambio hecho en el objeto módulo se " +"reflejará en todos los sitios. Por ejemplo:" #: ../Doc/faq/programming.rst:271 msgid "config.py::" -msgstr "" +msgstr "config.py::" #: ../Doc/faq/programming.rst:275 msgid "mod.py::" -msgstr "" +msgstr "mod.py::" #: ../Doc/faq/programming.rst:280 msgid "main.py::" -msgstr "" +msgstr "main.py::" #: ../Doc/faq/programming.rst:286 msgid "" "Note that using a module is also the basis for implementing the Singleton " "design pattern, for the same reason." msgstr "" +"Ten en cuenta que usar un módulo es también la base para la implementación " +"del patrón de diseño Singleton, por la misma razón." #: ../Doc/faq/programming.rst:291 msgid "What are the \"best practices\" for using import in a module?" -msgstr "" +msgstr "¿Cuáles son las \"buenas prácticas\" para usar import en un módulo?" #: ../Doc/faq/programming.rst:293 msgid "" @@ -374,6 +521,9 @@ msgid "" "importer's namespace, and makes it much harder for linters to detect " "undefined names." msgstr "" +"En general, no uses ``from modulename import *``. Haciendo eso embarulla el " +"espacio de nombres del importador y hace que sea más difícil para los " +"*linters* el detectar los nombres sin definir." #: ../Doc/faq/programming.rst:297 msgid "" @@ -382,30 +532,43 @@ msgid "" "is in scope. Using one import per line makes it easy to add and delete " "module imports, but using multiple imports per line uses less screen space." msgstr "" +"Importar los módulos en la parte inicial del fichero. Haciéndolo así deja " +"claro los módulos que son necesarios para tu código y evita preguntas sobre " +"si el nombre del módulo se encuentra en el ámbito de la aplicación. Usar una " +"importación por línea hace que sea sencillo añadir y eliminar módulos " +"importados pero usar múltiples importaciones por línea usa menos espacio de " +"pantalla." #: ../Doc/faq/programming.rst:302 msgid "It's good practice if you import modules in the following order:" -msgstr "" +msgstr "Es una buena práctica si importas los módulos en el orden siguiente:" #: ../Doc/faq/programming.rst:304 msgid "standard library modules -- e.g. ``sys``, ``os``, ``getopt``, ``re``" msgstr "" +"módulos de la biblioteca estándar -- por ejemplo, ``sys``, ``os``, " +"``getopt``, ``re``" #: ../Doc/faq/programming.rst:305 msgid "" "third-party library modules (anything installed in Python's site-packages " "directory) -- e.g. mx.DateTime, ZODB, PIL.Image, etc." msgstr "" +"módulos de bibliotecas de terceros (cualquier cosa instalada en el " +"directorio *site-packages* de Python) -- por ejemplo, mx.DateTime, ZODB, PIL." +"Image, etc." #: ../Doc/faq/programming.rst:307 msgid "locally-developed modules" -msgstr "" +msgstr "módulos desarrollados localmente" #: ../Doc/faq/programming.rst:309 msgid "" "It is sometimes necessary to move imports to a function or class to avoid " "problems with circular imports. Gordon McMillan says:" msgstr "" +"Hay veces en que es necesario mover las importaciones a una función o clase " +"para evitar problemas de importaciones circulares. Gordon McMillan dice:" #: ../Doc/faq/programming.rst:312 msgid "" @@ -415,6 +578,12 @@ msgid "" "That's because names in the 1st are not yet available, because the first " "module is busy importing the 2nd." msgstr "" +"No hay problema con las importaciones circulares cuando ambos módulos usan " +"la forma de importación \"import \". Fallará cuando el segundo " +"módulo quiera coger un nombre del primer módulo (\"from module import name" +"\") y la importación se encuentre en el nivel superior. Esto sucede porque " +"los nombres en el primero todavía no se encuentran disponibles debido a que " +"el primer módulo se encuentra ocupado importando al segundo." #: ../Doc/faq/programming.rst:318 msgid "" @@ -423,6 +592,10 @@ msgid "" "called, the first module will have finished initializing, and the second " "module can do its import." msgstr "" +"En este caso, si el segundo módulo se usa solamente desde una función, la " +"importación se puede mover de forma sencilla dentro de la función. En el " +"momento en que se invoca a la importación el primer módulo habrá terminado " +"de inicializarse y el segundo módulo podrá hacer la importación." #: ../Doc/faq/programming.rst:323 msgid "" @@ -432,6 +605,12 @@ msgid "" "importing the correct modules in the corresponding platform-specific code is " "a good option." msgstr "" +"También podría ser necesario mover importaciones fuera del nivel superior " +"del código si alguno de loa módulos son específicos a la plataforma. En ese " +"caso podría, incluso, no ser posible importar todos los módulos en la parte " +"superior del fichero. Para esos casos, la importación correcta de los " +"módulos en el código correspondiente específico de la plataforma es una " +"buena opción." #: ../Doc/faq/programming.rst:328 msgid "" @@ -446,16 +625,30 @@ msgid "" "only a couple of dictionary lookups. Even if the module name has gone out " "of scope, the module is probably available in :data:`sys.modules`." msgstr "" +"Solo debes mover importaciones a un ámbito de aplicación local, como dentro " +"de la definición de una función, si es necesario resolver problemas como una " +"importación circular o al intentar reducir el tiempo de inicialización de un " +"módulo. Esta técnica es especialmente útil si muchas de las importaciones no " +"son necesarias dependiendo de cómo se ejecute el programa. También podrías " +"mover importaciones a una función si los módulos solo se usan dentro de esa " +"función. Nótese que la primera carga de un módulo puede ser costosa debido " +"al tiempo necesario para la inicialización del módulo,pero la carga de un " +"módulo múltiples veces está prácticamente libre de coste ya que solo es " +"necesario hacer búsquedas en un diccionario. Incluso si el nombre del módulo " +"ha salido del ámbito de aplicación el módulo se encuentre, probablemente, " +"en :data:`sys.modules`." #: ../Doc/faq/programming.rst:341 msgid "Why are default values shared between objects?" -msgstr "" +msgstr "¿Por qué los valores por defecto se comparten entre objetos?" #: ../Doc/faq/programming.rst:343 msgid "" "This type of bug commonly bites neophyte programmers. Consider this " "function::" msgstr "" +"Este tipo de error golpea a menudo a programadores novatos. Considera esta " +"función::" #: ../Doc/faq/programming.rst:350 msgid "" @@ -463,6 +656,10 @@ msgid "" "The second time, ``mydict`` contains two items because when ``foo()`` begins " "executing, ``mydict`` starts out with an item already in it." msgstr "" +"La primera vez que llamas a esta función, ``mydict`` solamente contiene un " +"único elemento. La segunda vez, ``mydict`` contiene dos elementos debido a " +"que cuando comienza la ejecución de ``foo()``, ``mydict`` comienza " +"conteniendo un elemento de partida." #: ../Doc/faq/programming.rst:354 msgid "" @@ -472,6 +669,11 @@ msgid "" "dictionary in this example, subsequent calls to the function will refer to " "this changed object." msgstr "" +"A menudo se esperaría que una invocación a una función cree nuevos objetos " +"para valores por defecto. Eso no es lo que realmente sucede. Los valores por " +"defecto se crean exactamente una sola vez, cuando se define la función. Se " +"se cambia el objeto, como el diccionario en este ejemplo, posteriores " +"invocaciones a la función estarán referidas al objeto cambiado." #: ../Doc/faq/programming.rst:359 msgid "" @@ -479,6 +681,9 @@ msgid "" "``None``, are safe from change. Changes to mutable objects such as " "dictionaries, lists, and class instances can lead to confusion." msgstr "" +"Por definición, los objetos inmutables como números, cadenas, tuplas y " +"``None`` están asegurados frente al cambio. Cambios en objetos mutables como " +"diccionarios, listas e instancias de clase pueden llevar a confusión." #: ../Doc/faq/programming.rst:363 msgid "" @@ -487,10 +692,15 @@ msgid "" "inside the function, check if the parameter is ``None`` and create a new " "list/dictionary/whatever if it is. For example, don't write::" msgstr "" +"Debido a esta característica es una buena práctica de programación el no " +"usar valores mutables como valores por defecto. En su lugar usa ``None`` " +"como valor por defecto dentro de la función, comprueba si el parámetro es " +"``None`` y crea una nueva lista/un nuevo diccionario/cualquier otras cosa " +"que necesites. Por ejemplo, no escribas::" #: ../Doc/faq/programming.rst:371 msgid "but::" -msgstr "" +msgstr "pero::" #: ../Doc/faq/programming.rst:377 msgid "" @@ -500,17 +710,26 @@ msgid "" "value is requested again. This is called \"memoizing\", and can be " "implemented like this::" msgstr "" +"Esta característica puede ser útil. Cuando tienes una función que es muy " +"costosa de ejecutar, una técnica común es *cachear* sus parámetros y el " +"valor resultante de cada invocación a la función y devolver el valor " +"*cacheado* si se solicita nuevamente el mismo valor. A esto se le llama " +"\"memoizing\" y se puede implementar de la siguiente forma::" #: ../Doc/faq/programming.rst:392 msgid "" "You could use a global variable containing a dictionary instead of the " "default value; it's a matter of taste." msgstr "" +"Podrías usar una variable global conteniendo un diccionario en lugar de un " +"valor por defecto; es una cuestión de gustos." #: ../Doc/faq/programming.rst:397 msgid "" "How can I pass optional or keyword parameters from one function to another?" msgstr "" +"¿Cómo puedo pasar parámetros por palabra clave u opcionales de una función a " +"otra?" #: ../Doc/faq/programming.rst:399 msgid "" @@ -519,10 +738,15 @@ msgid "" "tuple and the keyword arguments as a dictionary. You can then pass these " "arguments when calling another function by using ``*`` and ``**``::" msgstr "" +"Recopila los argumentos usando los especificadores ``*`` y ``**`` en la " +"lista de parámetros de la función; esto te proporciona los argumentos " +"posicionales como una tupla y los argumentos con palabras clave como un " +"diccionario. Puedes, entonces, pasar estos argumentos cuando invoques a " +"otra función usando ``*`` y ``**``::" #: ../Doc/faq/programming.rst:418 msgid "What is the difference between arguments and parameters?" -msgstr "" +msgstr "¿Cuál es la diferencia entre argumentos y parámetros?" #: ../Doc/faq/programming.rst:420 msgid "" @@ -532,33 +756,42 @@ msgid "" "of arguments a function can accept. For example, given the function " "definition::" msgstr "" +":term:`Parámetros ` se definen mediante los nombres que aparecen " +"en la definición de una función mientras que :term:`argumentos ` " +"son los valores que se pasan a la función cuando la invocamos. Los " +"Parámetros definen qué tipos de argumentos puede aceptar una función. por " +"ejemplo, dada la definición de la función::" #: ../Doc/faq/programming.rst:428 msgid "" "*foo*, *bar* and *kwargs* are parameters of ``func``. However, when calling " "``func``, for example::" msgstr "" +"*foo*, *bar* y *kwargs* son parámetros de ``func``. Sin embargo, cuando " +"invocamos a ``func``, por ejemplo::" #: ../Doc/faq/programming.rst:433 msgid "the values ``42``, ``314``, and ``somevar`` are arguments." -msgstr "" +msgstr "los valores ``42``, ``314`` y ``somevar`` son argumentos." #: ../Doc/faq/programming.rst:437 msgid "Why did changing list 'y' also change list 'x'?" -msgstr "" +msgstr "¿Por qué cambiando la lista 'y' cambia, también, la lista 'x'?" #: ../Doc/faq/programming.rst:439 msgid "If you wrote code like::" -msgstr "" +msgstr "Si escribes código como::" #: ../Doc/faq/programming.rst:449 msgid "" "you might be wondering why appending an element to ``y`` changed ``x`` too." msgstr "" +"te estarás preguntando porque añadir un elemento a ``y`` ha cambiado también " +"a ``x``." #: ../Doc/faq/programming.rst:451 msgid "There are two factors that produce this result:" -msgstr "" +msgstr "Hay dos factores que provocan este resultado:" #: ../Doc/faq/programming.rst:453 msgid "" @@ -567,11 +800,18 @@ msgid "" "the same object ``x`` refers to. This means that there is only one object " "(the list), and both ``x`` and ``y`` refer to it." msgstr "" +"Las variables son simplemente nombres que referencian a objetos. Haciendo " +"``y = x`` no crea una copia de la lista -- crea una nueva variable ``y`` que " +"referencia al mismo objeto al que referencia ``x`` . Esto significa que " +"solo existe un objeto (la lista) y tanto ``x`` como ``y`` hacen referencia " +"al mismo." #: ../Doc/faq/programming.rst:457 msgid "" "Lists are :term:`mutable`, which means that you can change their content." msgstr "" +"Las listas son :term:`mutable`, lo que significa que puedes cambiar su " +"contenido." #: ../Doc/faq/programming.rst:459 msgid "" @@ -579,10 +819,14 @@ msgid "" "has changed from ``[]`` to ``[10]``. Since both the variables refer to the " "same object, using either name accesses the modified value ``[10]``." msgstr "" +"Después de la invocación a :meth:`~list.append`, el contenido del objeto " +"mutable ha cambiado de ``[]`` a``[10]``. Ya que ambas variables referencian " +"al mismo objeto, el usar cualquiera de los nombres accederá al valor " +"modificado ``[10]``." #: ../Doc/faq/programming.rst:463 msgid "If we instead assign an immutable object to ``x``::" -msgstr "" +msgstr "Si, por otra parte, asignamos un objeto inmutable a ``x``::" #: ../Doc/faq/programming.rst:473 msgid "" @@ -594,6 +838,14 @@ msgid "" "objects (the ints ``6`` and ``5``) and two variables that refer to them " "(``x`` now refers to ``6`` but ``y`` still refers to ``5``)." msgstr "" +"podemos ver que ``x`` e ``y`` ya no son iguales. Esto es debido a que los " +"enteros son :term:`immutable`, y cuando hacemos ``x = x + 1`` no estamos " +"mutando el entero ``5`` incrementando su valor; en su lugar, estamos creando " +"un nuevo objeto (el entero ``6``) y se lo asignamos a ``x`` (esto es, " +"cambiando el objeto al cual referencia ``x``). Después de esta asignación " +"tenemos dos objetos (los enteros ``6`` y ``5``) y dos variables que " +"referencian a ellos (``x`` ahora referencia a ``6`` pero ``y`` todavía " +"referencia a ``5``)." #: ../Doc/faq/programming.rst:481 msgid "" @@ -606,6 +858,15 @@ msgid "" "copy of ``y``, you'll instead end up with ``None``, which will likely cause " "your program to generate an easily diagnosed error." msgstr "" +"Algunas operaciones (por ejemplo ``y.append(10)`` y ``y.sort()``) mutan al " +"objeto mientras que operaciones que podrían parecer similares (por ejemplo " +"``y = y + [10]`` y ``sorted(y)``) crean un nuevo objeto. En general, en " +"Python (y en todo momento en la biblioteca estándar) un método que muta un " +"objeto devolverá ``None`` para evitar tener dos tipos de operaciones que " +"puedan ser confusas. Por tanto, si escribes accidentalmente ``y.sort()`` " +"pensando que te devolverá una copia ordenada de ``y``, obtendrás, en su " +"lugar, ``None``, lo cual ayudará a que tu programa genera un error que pueda " +"ser diagnosticado fácilmente." #: ../Doc/faq/programming.rst:490 msgid "" @@ -616,10 +877,16 @@ msgid "" "mutates ``a_list``, whereas ``some_tuple += (1, 2, 3)`` and ``some_int += " "1`` create new objects)." msgstr "" +"Sin embargo, existe una clase de operaciones en las cuales la misma " +"operación tiene, a veces, distintos comportamientos con diferentes tipos: " +"los operadores de asignación aumentada. Por ejemplo, ``+=`` muta listas " +"pero no tuplas o enteros (``a_list += [1, 2, 3]`` es equivalente a ``a_list." +"extend([1, 2, 3])`` y muta ``a_list``, mientras que ``some_tuple += (1, 2, " +"3)`` y ``some_int += 1`` crea nuevos objetos)." #: ../Doc/faq/programming.rst:497 msgid "In other words:" -msgstr "" +msgstr "En otras palabras:" #: ../Doc/faq/programming.rst:499 msgid "" @@ -627,6 +894,9 @@ msgid "" "etc.), we can use some specific operations to mutate it and all the " "variables that refer to it will see the change." msgstr "" +"Si tenemos un objeto mutable (:class:`list`, :class:`dict`, :class:`set`, " +"etc.), podemos usar algunas operaciones específicas para mutarlo y todas las " +"variables que referencian al mismo verán el cambio reflejado." #: ../Doc/faq/programming.rst:502 msgid "" @@ -635,16 +905,24 @@ msgid "" "but operations that transform that value into a new value always return a " "new object." msgstr "" +"Si tenemos un objeto inmutable (:class:`str`, :class:`int`, :class:`tuple`, " +"etc.), todas las variables que referencian al mismo verán siempre el mismo " +"valor pero las operaciones que transforman ese valor en un nuevo valor " +"siempre retornan un nuevo objeto." #: ../Doc/faq/programming.rst:507 msgid "" "If you want to know if two variables refer to the same object or not, you " "can use the :keyword:`is` operator, or the built-in function :func:`id`." msgstr "" +"Si deseas saber si dos variables referencian o no al mismo objeto puedes " +"usar el operador :keyword:`is` o la función incorporada :func:`id`." #: ../Doc/faq/programming.rst:512 msgid "How do I write a function with output parameters (call by reference)?" msgstr "" +"¿Cómo puedo escribir una función sin parámetros (invocación mediante " +"referencia)?" #: ../Doc/faq/programming.rst:514 msgid "" @@ -653,43 +931,50 @@ msgid "" "argument name in the caller and callee, and so no call-by-reference per se. " "You can achieve the desired effect in a number of ways." msgstr "" +"Recuerda que los argumentos son pasados mediante asignación en Python. Ya " +"que las asignaciones simplemente crean referencias a objetos, no hay alias " +"entre el nombre de un argumento en el invocador y el invocado y, por tanto, " +"no hay invocación por referencia per se. Puedes obtener el mismo efecto " +"deseado de formas distintas." #: ../Doc/faq/programming.rst:519 msgid "By returning a tuple of the results::" -msgstr "" +msgstr "Mediante la devolución de una tupla de resultados::" #: ../Doc/faq/programming.rst:530 msgid "This is almost always the clearest solution." -msgstr "" +msgstr "Esta es, casi siempre, la solución más clara." #: ../Doc/faq/programming.rst:532 msgid "" "By using global variables. This isn't thread-safe, and is not recommended." msgstr "" +"Mediante el uso de variables globales. No es thread-safe y no se recomienda." #: ../Doc/faq/programming.rst:534 msgid "By passing a mutable (changeable in-place) object::" -msgstr "" +msgstr "Pasando un objeto mutable (intercambiable en el mismo sitio)::" #: ../Doc/faq/programming.rst:544 msgid "By passing in a dictionary that gets mutated::" -msgstr "" +msgstr "Pasando un diccionario que muta::" #: ../Doc/faq/programming.rst:554 msgid "Or bundle up values in a class instance::" -msgstr "" +msgstr "O empaquetar valores en una instancia de clase::" #: ../Doc/faq/programming.rst:570 msgid "There's almost never a good reason to get this complicated." -msgstr "" +msgstr "Casi nunca existe una buena razón para hacer esto tan complicado." #: ../Doc/faq/programming.rst:572 msgid "Your best choice is to return a tuple containing the multiple results." msgstr "" +"Tu mejor opción es devolver una tupla que contenga los múltiples resultados." #: ../Doc/faq/programming.rst:576 msgid "How do you make a higher order function in Python?" -msgstr "" +msgstr "¿Cómo se puede hacer una función de orden superior en Python?" #: ../Doc/faq/programming.rst:578 msgid "" @@ -698,18 +983,22 @@ msgid "" "returns a function ``f(x)`` that computes the value ``a*x+b``. Using nested " "scopes::" msgstr "" +"Tienes dos opciones: puedes usar ámbitos de aplicación anidados o puedes " +"usar objetos invocables. Por ejemplo, supón que querías definir ``linear(a," +"b)`` que devuelve una función ``f(x)`` que calcula el valor ``a*x+b``. Usar " +"ámbitos de aplicación anidados::" #: ../Doc/faq/programming.rst:587 msgid "Or using a callable object::" -msgstr "" +msgstr "O usar un objeto invocable::" #: ../Doc/faq/programming.rst:597 msgid "In both cases, ::" -msgstr "" +msgstr "En ambos casos, ::" #: ../Doc/faq/programming.rst:601 msgid "gives a callable object where ``taxes(10e6) == 0.3 * 10e6 + 2``." -msgstr "" +msgstr "nos da un objeto invocable donde ``taxes(10e6) == 0.3 * 10e6 + 2``." #: ../Doc/faq/programming.rst:603 msgid "" @@ -717,40 +1006,51 @@ msgid "" "and results in slightly longer code. However, note that a collection of " "callables can share their signature via inheritance::" msgstr "" +"El enfoque del objeto invocable tiene la desventaja que es un ligeramente " +"más lento y el resultado es un código levemente más largo. Sin embargo, " +"destacar que una colección de invocables pueden compartir su firma vía " +"herencia::" #: ../Doc/faq/programming.rst:612 msgid "Object can encapsulate state for several methods::" -msgstr "" +msgstr "Los objetos pueden encapsular el estado de varios métodos::" #: ../Doc/faq/programming.rst:630 msgid "" "Here ``inc()``, ``dec()`` and ``reset()`` act like functions which share the " "same counting variable." msgstr "" +"Aquí ``inc()``, ``dec()`` y ``reset()`` se comportan como funciones las " +"cuales comparten la misma variable de conteo." #: ../Doc/faq/programming.rst:635 msgid "How do I copy an object in Python?" -msgstr "" +msgstr "¿Cómo copio un objeto en Python?" #: ../Doc/faq/programming.rst:637 msgid "" "In general, try :func:`copy.copy` or :func:`copy.deepcopy` for the general " "case. Not all objects can be copied, but most can." msgstr "" +"En general, prueba :func:`copy.copy` o :func:`copy.deepcopy` para el caso " +"general. No todos los objetos se pueden copiar pero la mayoría sí que pueden " +"copiarse." #: ../Doc/faq/programming.rst:640 msgid "" "Some objects can be copied more easily. Dictionaries have a :meth:`~dict." "copy` method::" msgstr "" +"Algunas objetos se pueden copiar de forma más sencilla. Los diccionarios " +"disponen de un método :meth:`~dict.copy`::" #: ../Doc/faq/programming.rst:645 msgid "Sequences can be copied by slicing::" -msgstr "" +msgstr "Las secuencias se pueden copiar usando un rebanado::" #: ../Doc/faq/programming.rst:651 msgid "How can I find the methods or attributes of an object?" -msgstr "" +msgstr "¿Cómo puedo encontrar los métodos o atributos de un objeto?" #: ../Doc/faq/programming.rst:653 msgid "" @@ -758,10 +1058,14 @@ msgid "" "alphabetized list of the names containing the instance attributes and " "methods and attributes defined by its class." msgstr "" +"Para la instancia x de una clase definida por el usuario, ``dir(x)`` " +"devuelve una lista de nombres ordenados alfabéticamente que contiene los " +"atributos y métodos de la instancia y los atributos definidos mediante su " +"clase." #: ../Doc/faq/programming.rst:659 msgid "How can my code discover the name of an object?" -msgstr "" +msgstr "¿Cómo puede mi código descubrir el nombre de un objeto?" #: ../Doc/faq/programming.rst:661 msgid "" @@ -770,6 +1074,11 @@ msgid "" "``def`` and ``class`` statements, but in that case the value is a callable. " "Consider the following code::" msgstr "" +"Hablando de forma general no podrían puesto que los objetos no disponen, " +"realmente, de un nombre. Esencialmente, las asignaciones relacionan un " +"nombre con su valor; Lo mismo se cumple con las declaraciones ``def`` y " +"``class`` pero, en este caso, el valor es un invocable. Considera el " +"siguiente código::" #: ../Doc/faq/programming.rst:677 msgid "" @@ -778,6 +1087,11 @@ msgid "" "instance of class A. However, it is impossible to say whether the " "instance's name is a or b, since both names are bound to the same value." msgstr "" +"Podría decirse que la clase tiene un nombre: aunque está ligada a dos " +"nombres y se invoca a través del nombre B, la instancia creada se sigue " +"reportando como una instancia de la clase A. Sin embargo, es imposible decir " +"si el nombre de la instancia es a o b, ya que ambos nombres están ligados al " +"mismo valor." #: ../Doc/faq/programming.rst:682 msgid "" @@ -786,12 +1100,18 @@ msgid "" "introspective programs, this is usually an indication that a change of " "approach might be beneficial." msgstr "" +"En términos generales, no debería ser necesario que tu código \"conozca los " +"nombres\" de determinados valores. A menos que estés escribiendo " +"deliberadamente programas introspectivos, esto suele ser una indicación de " +"que un cambio de enfoque podría ser beneficioso." #: ../Doc/faq/programming.rst:687 msgid "" "In comp.lang.python, Fredrik Lundh once gave an excellent analogy in answer " "to this question:" msgstr "" +"En comp.lang.python, Fredrik Lundh proporcionó una vez una excelente " +"analogía en respuesta a esta pregunta:" #: ../Doc/faq/programming.rst:690 msgid "" @@ -800,30 +1120,39 @@ msgid "" "so the only way to find out what it's called is to ask all your neighbours " "(namespaces) if it's their cat (object)..." msgstr "" +"De la misma forma que obtienes el nombre de ese gato que te has encontrado " +"en tu porche el propio gato (objeto) no te puede indicar su nombre y, " +"realmente, no importa -- por tanto, la única forma de encontrar cómo se " +"llama sería preguntando a todos los vecinos (espacios de nombres) si es su " +"gato (objeto)..." #: ../Doc/faq/programming.rst:695 msgid "" "....and don't be surprised if you'll find that it's known by many names, or " "no name at all!" msgstr "" +"...y no te sorprendas si encuentras que se le conoce mediante diferentes " +"nombres o ¡nadie conoce su nombre!" #: ../Doc/faq/programming.rst:700 msgid "What's up with the comma operator's precedence?" -msgstr "" +msgstr "¿Qué ocurre con la precedencia del operador coma?" #: ../Doc/faq/programming.rst:702 msgid "Comma is not an operator in Python. Consider this session::" -msgstr "" +msgstr "La coma no es un operador en Python. Considera la sesión::" #: ../Doc/faq/programming.rst:707 msgid "" "Since the comma is not an operator, but a separator between expressions the " "above is evaluated as if you had entered::" msgstr "" +"Debido a que la coma no es un operador sino un separador entre expresiones " +"lo anterior se evalúe como se ha introducido::" #: ../Doc/faq/programming.rst:712 msgid "not::" -msgstr "" +msgstr "no::" #: ../Doc/faq/programming.rst:716 msgid "" @@ -831,20 +1160,25 @@ msgid "" "They are not truly operators but syntactic delimiters in assignment " "statements." msgstr "" +"Lo mismo sucede con varios operadores de asignación (``=``, ``+=``, etc). " +"No son realmente operadores sino delimitadores sintácticos en declaraciones " +"de asignación." #: ../Doc/faq/programming.rst:721 msgid "Is there an equivalent of C's \"?:\" ternary operator?" -msgstr "" +msgstr "¿Existe un equivalente al operador ternario de C \"?:\"?" #: ../Doc/faq/programming.rst:723 msgid "Yes, there is. The syntax is as follows::" -msgstr "" +msgstr "Sí, existe. La sintaxis es como sigue::" #: ../Doc/faq/programming.rst:730 msgid "" "Before this syntax was introduced in Python 2.5, a common idiom was to use " "logical operators::" msgstr "" +"Antes de que esta sintaxis se introdujera en Python 2.5 una expresión común " +"fue el uso de operadores lógicos::" #: ../Doc/faq/programming.rst:735 msgid "" @@ -852,24 +1186,32 @@ msgid "" "has a false boolean value. Therefore, it is always better to use the ``... " "if ... else ...`` form." msgstr "" +"Sin embargo, esa expresión no es segura ya que puede devolver valores " +"erróneos cuando *on_true* tiene un valor booleano falso. Por tanto, siempre " +"es mejor usar la forma ``... if ... else ...``." #: ../Doc/faq/programming.rst:741 msgid "Is it possible to write obfuscated one-liners in Python?" msgstr "" +"¿Es posible escribir expresiones en una línea de forma ofuscada en Python?" #: ../Doc/faq/programming.rst:743 msgid "" "Yes. Usually this is done by nesting :keyword:`lambda` within :keyword:`!" "lambda`. See the following three examples, due to Ulf Bartelt::" msgstr "" +"Sí. Normalmente se puede hacer anidando :keyword:`lambda` dentro de :" +"keyword:`!lambda`. Examina los siguientes tres ejemplos, creados por Ulf " +"Bartelt::" #: ../Doc/faq/programming.rst:770 msgid "Don't try this at home, kids!" -msgstr "" +msgstr "¡No probéis esto en casa, personitas!" #: ../Doc/faq/programming.rst:776 msgid "What does the slash(/) in the parameter list of a function mean?" msgstr "" +"¿Qué hace la barra (/) en medio de la lista de parámetros de una función?" #: ../Doc/faq/programming.rst:778 msgid "" @@ -880,6 +1222,14 @@ msgid "" "position. For example, :func:`divmod` is a function that accepts positional-" "only parameters. Its documentation looks like this::" msgstr "" +"Un *slash* en la lista de argumentos de una función denota que los " +"parámetros previos al mismo son únicamente posicionales. Parámetros " +"únicamente posicionales son aquellos cuyos nombres no son usables " +"internamente. Mediante la llamada a una función que acepta parámetros " +"únicamente posicionales, los argumentos se mapean a parámetros basados " +"únicamente en su posición. Por ejemplo, :func:`pow` es una función que " +"acepta parámetros únicamente posicionales. Su documentación es de la " +"siguiente forma::" #: ../Doc/faq/programming.rst:791 msgid "" @@ -887,14 +1237,17 @@ msgid "" "positional-only. Thus, calling :func:`divmod` with keyword arguments would " "lead to an error::" msgstr "" +"El *slash* al final de la lista de parámetros indica que los tres parámetros " +"son únicamente posicionales. Por tanto, invocar a :func:`pow` con " +"argumentos con palabra clave podría derivar en un error::" #: ../Doc/faq/programming.rst:802 msgid "Numbers and strings" -msgstr "" +msgstr "Números y cadenas" #: ../Doc/faq/programming.rst:805 msgid "How do I specify hexadecimal and octal integers?" -msgstr "" +msgstr "¿Cómo puedo especificar enteros hexadecimales y octales?" #: ../Doc/faq/programming.rst:807 msgid "" @@ -902,6 +1255,9 @@ msgid "" "lower or uppercase \"o\". For example, to set the variable \"a\" to the " "octal value \"10\" (8 in decimal), type::" msgstr "" +"Para especificar un dígito octal, prefija el valor octal con un cero y una " +"\"o\" en minúscula o mayúscula. Por ejemplo, para definir la variable \"a\" " +"con el valor octal \"10\" (8 en decimal), escribe::" #: ../Doc/faq/programming.rst:815 msgid "" @@ -909,16 +1265,22 @@ msgid "" "zero, and then a lower or uppercase \"x\". Hexadecimal digits can be " "specified in lower or uppercase. For example, in the Python interpreter::" msgstr "" +"Un hexadecimal es igual de simple. Simplemente añade un cero y una \"x\", " +"en minúscula o mayúscula, antes del número hexadecimal . Los dígitos " +"hexadecimales se pueden especificar en minúsculas o mayúsculas. Por " +"ejemplo, en el intérprete de Python::" #: ../Doc/faq/programming.rst:828 msgid "Why does -22 // 10 return -3?" -msgstr "" +msgstr "¿Por qué -22 // 10 devuelve -3?" #: ../Doc/faq/programming.rst:830 msgid "" "It's primarily driven by the desire that ``i % j`` have the same sign as " "``j``. If you want that, and also want::" msgstr "" +"Es debido, principalmente al deseo que ``i % j`` tenga el mismo signo que " +"``j``. Si quieres eso y, además, quieres::" #: ../Doc/faq/programming.rst:835 msgid "" @@ -926,6 +1288,10 @@ msgid "" "identity to hold, and then compilers that truncate ``i // j`` need to make " "``i % j`` have the same sign as ``i``." msgstr "" +"entonces la división entera debe devolver el valor base más bajo. C también " +"requiere que esa esa identidad se mantenga de tal forma que cuando los " +"compiladores truncan ``i // j`` necesitan que ``i % j`` tenga el mismo signo " +"que ``i``." #: ../Doc/faq/programming.rst:839 msgid "" @@ -935,10 +1301,15 @@ msgid "" "say 200 hours ago? ``-190 % 12 == 2`` is useful; ``-190 % 12 == -10`` is a " "bug waiting to bite." msgstr "" +"Existen unos pocos casos para ``i % j`` cuando ``j`` es negativo. Cuando " +"``j`` es positivo, existen muchos casos y, virtualmente, en todos ellos es " +"más útil para ``i % j`` que sea ``>= 0``. Si el reloj dice que ahora son " +"las 10, ¿qué dijo hace 200 horas? ``-190 % 12 == 2`` es útil; ``-190 % 12 " +"== -10`` es un error listo para morderte." #: ../Doc/faq/programming.rst:847 msgid "How do I convert a string to a number?" -msgstr "" +msgstr "¿Cómo convierto una cadena a un número?" #: ../Doc/faq/programming.rst:849 msgid "" @@ -946,6 +1317,10 @@ msgid "" "``int('144') == 144``. Similarly, :func:`float` converts to floating-point, " "e.g. ``float('144') == 144.0``." msgstr "" +"Para enteros puedes usar la función incorporada constructor de tipos :func:" +"`int`, por ejemplo ``int('144') == 144``. De forma similar, :func:`float` " +"convierte a un número de coma flotante, por ejemplo ``float('144') == " +"144.0``." #: ../Doc/faq/programming.rst:853 msgid "" @@ -956,6 +1331,13 @@ msgid "" "interpreted using Python's rules: a leading '0o' indicates octal, and '0x' " "indicates a hex number." msgstr "" +"Por defecto, estas interpretan el número como decimal de tal forma que " +"``int('0144') == 144`` y ``int('0x144')`` lanzará :exc:`ValueError`. " +"``int(string, base)`` toma la base para convertirlo desde un segundo " +"parámetro opcional, por tanto ``int('0x144', 16) == 324``. Si la base se " +"especifica como 0, el número se interpreta usando las reglas de Python's " +"rules: un prefijo '0o' indica octal y un prefijo '0x' indica un número " +"hexadecimal." #: ../Doc/faq/programming.rst:859 msgid "" @@ -966,6 +1348,12 @@ msgid "" "``__import__('os').system(\"rm -rf $HOME\")`` which would erase your home " "directory." msgstr "" +"No uses la función incorporada :func:`eval` si todo lo que necesitas es " +"convertir cadenas a números. :func:`eval` será considerablemente más lento " +"y presenta riesgos de seguridad: cualquiera podría introducir una expresión " +"Python que presentara efectos indeseados. Por ejemplo, alguien podría " +"pasar``__import__('os').system(\"rm -rf $HOME\")`` lo cual borraría el " +"directorio home al completo." #: ../Doc/faq/programming.rst:866 msgid "" @@ -973,10 +1361,14 @@ msgid "" "expressions, so that e.g. ``eval('09')`` gives a syntax error because Python " "does not allow leading '0' in a decimal number (except '0')." msgstr "" +":func:`eval` también tiene el efecto de interpretar números como expresiones " +"Python , de tal forma que, por ejemplo, ``eval('09')`` dará un error de " +"sintaxis porque Python no permite un '0' inicial en un número decimal " +"(excepto '0')." #: ../Doc/faq/programming.rst:872 msgid "How do I convert a number to a string?" -msgstr "" +msgstr "¿Cómo puedo convertir un número a una cadena?" #: ../Doc/faq/programming.rst:874 msgid "" @@ -987,10 +1379,16 @@ msgid "" "``\"{:04d}\".format(144)`` yields ``'0144'`` and ``\"{:.3f}\"." "format(1.0/3.0)`` yields ``'0.333'``." msgstr "" +"Para convertir, por ejemplo, el número 144 a la cadena '144', usa el " +"constructor de tipos incorporado :func:`str`. Si deseas una representación " +"hexadecimal o octal usa la función incorporada :func:`hex` o :func:`oct`. " +"Para un formateado elaborado puedes ver las secciones de :ref:`f-strings` y :" +"ref:`formatstrings`, por ejemplo ``\"{:04d}\".format(144)`` produce " +"``'0144'`` y ``\"{:.3f}\".format(1.0/3.0)`` produce ``'0.333'``." #: ../Doc/faq/programming.rst:883 msgid "How do I modify a string in place?" -msgstr "" +msgstr "¿Cómo puedo modificar una cadena in situ?" #: ../Doc/faq/programming.rst:885 msgid "" @@ -1000,14 +1398,19 @@ msgid "" "unicode data, try using an :class:`io.StringIO` object or the :mod:`array` " "module::" msgstr "" +"No puedes debido a que las cadenas son inmutables. En la mayoría de " +"situaciones solo deberías crear una nueva cadena a partir de varias partes " +"que quieras usar para crearla. Sin embargo, si necesitas un objeto con la " +"habilidad de modificar en el mismo lugar datos unicode prueba usando el " +"objeto :class:`io.StringIO` o el módulo :mod:`array`::" #: ../Doc/faq/programming.rst:915 msgid "How do I use strings to call functions/methods?" -msgstr "" +msgstr "¿Cómo puedo usar cadenas para invocar funciones/métodos?" #: ../Doc/faq/programming.rst:917 msgid "There are various techniques." -msgstr "" +msgstr "Existen varias técnicas." #: ../Doc/faq/programming.rst:919 msgid "" @@ -1016,24 +1419,31 @@ msgid "" "names of the functions. This is also the primary technique used to emulate " "a case construct::" msgstr "" +"Lo mejor sería usar un diccionario que mapee cadenas a funciones. La " +"principal ventaja de esta técnica es que las cadenas no necesitan ser " +"iguales que los nombres de las funciones. Esta es también la principal " +"técnica que se usa para emular un constructo *case*::" #: ../Doc/faq/programming.rst:934 msgid "Use the built-in function :func:`getattr`::" -msgstr "" +msgstr "Usa la función incorporada :func:`getattr`::" #: ../Doc/faq/programming.rst:939 msgid "" "Note that :func:`getattr` works on any object, including classes, class " "instances, modules, and so on." msgstr "" +"Nótese que :func:`getattr` funciona en cualquier objeto, incluido clases, " +"instancias de clases, módulos, etc." #: ../Doc/faq/programming.rst:942 msgid "This is used in several places in the standard library, like this::" -msgstr "" +msgstr "Esto se usa en varios lugares de la biblioteca estándar, como esto::" #: ../Doc/faq/programming.rst:955 msgid "Use :func:`locals` or :func:`eval` to resolve the function name::" msgstr "" +"Usa :func:`locals` o :func:`eval` para resolver el nombre de la función::" #: ../Doc/faq/programming.rst:968 msgid "" @@ -1041,12 +1451,17 @@ msgid "" "control over the contents of the string, someone could pass a string that " "resulted in an arbitrary function being executed." msgstr "" +"Nota: Usar :func:`eval` es lento y peligroso. Si no tienes el control " +"absoluto del contenido de la cadena cualquiera podría introducir una cadena " +"que resulte en la ejecución de código arbitrario." #: ../Doc/faq/programming.rst:973 msgid "" "Is there an equivalent to Perl's chomp() for removing trailing newlines from " "strings?" msgstr "" +"¿Existe un equivalente a chomp() en Perl para eliminar nuevas líneas al " +"final de las cadenas?" #: ../Doc/faq/programming.rst:975 msgid "" @@ -1056,20 +1471,27 @@ msgid "" "empty lines at the end, the line terminators for all the blank lines will be " "removed::" msgstr "" +"Puedes usar ``S.rstrip(\"\\r\\n\")`` para eliminar todas las ocurrencias de " +"cualquier terminación de línea desde el final de la cadena ``S`` sin " +"eliminar el resto de espacios en blanco que le siguen. Si la cadena ``S`` " +"representa más de una línea con varias líneas vacías al final, las " +"terminaciones de línea para todas las líneas vacías se eliminarán::" #: ../Doc/faq/programming.rst:987 msgid "" "Since this is typically only desired when reading text one line at a time, " "using ``S.rstrip()`` this way works well." msgstr "" +"Ya que esto solo sería deseable, típicamente, cuando lees texto línea a " +"línea, usar ``S.rstrip()`` de esta forma funcionaría bien." #: ../Doc/faq/programming.rst:992 msgid "Is there a scanf() or sscanf() equivalent?" -msgstr "" +msgstr "¿Existe un equivalente a scanf() o a sscanf() ?" #: ../Doc/faq/programming.rst:994 msgid "Not as such." -msgstr "" +msgstr "No de la misma forma." #: ../Doc/faq/programming.rst:996 msgid "" @@ -1080,58 +1502,79 @@ msgid "" "parameter which is useful if the line uses something other than whitespace " "as a separator." msgstr "" +"Para análisis sintáctico simple de la entrada, el método más sencillo es, " +"usualmente, el separar la línea en palabras delimitadas por espacios usando " +"el método :meth:`~str.split` de los objetos *string* y, posteriormente, " +"convertir cadenas decimales a valores usando :func:`int` o :func:`float`. " +"``split()`` permite un parámetro opcional \"sep\" que es útil si la línea " +"usa algo diferente a espacios en blanco como separador." #: ../Doc/faq/programming.rst:1002 msgid "" "For more complicated input parsing, regular expressions are more powerful " "than C's :c:func:`sscanf` and better suited for the task." msgstr "" +"Para análisis sintáctico de la entrada más complejo, las expresiones " +"regulares son más poderosas que :c:func:`sscanf` de C y se ajustan mejor a " +"esta tarea." #: ../Doc/faq/programming.rst:1007 msgid "What does 'UnicodeDecodeError' or 'UnicodeEncodeError' error mean?" -msgstr "" +msgstr "¿Qué significa 'UnicodeDecodeError' o 'UnicodeEncodeError'?" #: ../Doc/faq/programming.rst:1009 msgid "See the :ref:`unicode-howto`." -msgstr "" +msgstr "Ver :ref:`unicode-howto`." #: ../Doc/faq/programming.rst:1013 msgid "Performance" -msgstr "" +msgstr "Rendimiento" #: ../Doc/faq/programming.rst:1016 msgid "My program is too slow. How do I speed it up?" -msgstr "" +msgstr "Mi programa es muy lento. ¿Cómo puedo acelerarlo?" #: ../Doc/faq/programming.rst:1018 msgid "" "That's a tough one, in general. First, here are a list of things to " "remember before diving further:" msgstr "" +"Esa es una pregunta difícil, en general. Primero, aquí tienes una lista de " +"cosas a recordar antes de ir más allá:" #: ../Doc/faq/programming.rst:1021 msgid "" "Performance characteristics vary across Python implementations. This FAQ " "focuses on :term:`CPython`." msgstr "" +"Las características del rendimiento varían entre las distintas " +"implementaciones de Python. Estas preguntas frecuentes se enfocan en :term:" +"`CPython`." #: ../Doc/faq/programming.rst:1023 msgid "" "Behaviour can vary across operating systems, especially when talking about I/" "O or multi-threading." msgstr "" +"El comportamiento puede variar entre distintos sistemas operativos, " +"especialmente cuando se habla de tareas I/O o multi-tarea." #: ../Doc/faq/programming.rst:1025 msgid "" "You should always find the hot spots in your program *before* attempting to " "optimize any code (see the :mod:`profile` module)." msgstr "" +"Siempre deberías encontrar las partes importantes en tu programa *antes* de " +"intentar optimizar el código (ver el módulo :mod:`profile`)." #: ../Doc/faq/programming.rst:1027 msgid "" "Writing benchmark scripts will allow you to iterate quickly when searching " "for improvements (see the :mod:`timeit` module)." msgstr "" +"Escribir programas de comparación del rendimiento te permitirá iterar " +"rápidamente cuando te encuentres buscando mejoras (ver el módulo :mod:" +"`timeit`)." #: ../Doc/faq/programming.rst:1029 msgid "" @@ -1139,6 +1582,9 @@ msgid "" "any other technique) before potentially introducing regressions hidden in " "sophisticated optimizations." msgstr "" +"Es altamente recomendable disponer de una buena cobertura de código (a " +"partir de pruebas unitarias o cualquier otra técnica) antes de introducir " +"potenciales regresiones ocultas en sofisticadas optimizaciones." #: ../Doc/faq/programming.rst:1033 msgid "" @@ -1146,6 +1592,9 @@ msgid "" "some general principles which go a long way towards reaching acceptable " "performance levels:" msgstr "" +"Dicho lo anterior, existen muchos trucos para acelerar código Python. Aquí " +"tienes algunos principios generales que te permitirán llegar a alcanzar " +"niveles de rendimiento aceptables:" #: ../Doc/faq/programming.rst:1037 msgid "" @@ -1153,12 +1602,17 @@ msgid "" "larger benefits than trying to sprinkle micro-optimization tricks all over " "your code." msgstr "" +"El hacer más rápido tu algoritmo (o cambiarlo por alguno más rápido) puede " +"provocar mayores beneficios que intentar unos pocos trucos de micro-" +"optimización a través de todo tu código." #: ../Doc/faq/programming.rst:1041 msgid "" "Use the right data structures. Study documentation for the :ref:`bltin-" "types` and the :mod:`collections` module." msgstr "" +"Utiliza las estructuras de datos correctas. Estudia la documentación para " +"los :ref:`bltin-types` y el módulo :mod:`collections`." #: ../Doc/faq/programming.rst:1044 msgid "" @@ -1170,6 +1624,13 @@ msgid "" "do sorting (and see the :ref:`sortinghowto` for examples of moderately " "advanced usage)." msgstr "" +"Cuando la biblioteca estándar proporciona una primitiva de hacer algo, esta " +"supuestamente será (aunque no se garantiza) más rápida que cualquier otra " +"alternativa que se te ocurra. Esto es doblemente cierto si las primitivas " +"han sido escritas en C, como los *builtins* y algunos tipos extendidos. Por " +"ejemplo, asegúrate de usar el método integrado :meth:`list.sort` o la " +"función relacionada :func:`sorted` para ordenar (y ver :ref:`sortinghowto` " +"para ver ejemplos de uso moderadamente avanzados)." #: ../Doc/faq/programming.rst:1052 msgid "" @@ -1179,6 +1640,11 @@ msgid "" "especially under the form of tiny functions or methods (which are also often " "detrimental to readability)." msgstr "" +"Las abstracciones tienden a crear rodeos y fuerzan al intérprete a trabajar " +"más. Si el nivel de rodeos sobrepasa el trabajo útil realizado tu programa " +"podría ser más lento. Deberías evitar abstracciones excesivas, " +"especialmente, en forma de pequeñas funciones o métodos (que también va en " +"detrimento de la legibilidad)." #: ../Doc/faq/programming.rst:1058 msgid "" @@ -1191,16 +1657,28 @@ msgid "" "skills, you can also :ref:`write a C extension module ` " "yourself." msgstr "" +"Si has alcanzado el límite de lo que permite el uso de Python puro, existen " +"otras herramientas que te permiten ir más allá. Por ejemplo, `Cython " +"`_ puede compilar una versión ligeramente modificada del " +"código Python en una extensión en C y se podría usar en muchas plataformas " +"diferentes. Cython puede obtener ventaja de la compilación (y anotaciones " +"de tipos opcionales) para hacer que tu código sea significativamente más " +"rápido cuando se ejecuta. Si confías en tus habilidades de programar en C " +"también puedes escribir :ref:`un módulo de extensión en C ` " +"tú mismo." #: ../Doc/faq/programming.rst:1068 msgid "" "The wiki page devoted to `performance tips `_." msgstr "" +"La página de la wiki dedicada a `trucos de rendimiento `_." #: ../Doc/faq/programming.rst:1074 msgid "What is the most efficient way to concatenate many strings together?" msgstr "" +"¿Cuál es la forma más eficiente de concatenar muchas cadenas conjuntamente?" #: ../Doc/faq/programming.rst:1076 msgid "" @@ -1209,16 +1687,25 @@ msgid "" "creates a new object. In the general case, the total runtime cost is " "quadratic in the total string length." msgstr "" +"Los objetos :class:`str` y :class:`bytes` son inmutables, por tanto, " +"concatenar muchas cadenas en una sola es ineficiente debido a que cada " +"concatenación crea un nuevo objeto. En el caso más general, el coste total " +"en tiempo de ejecución es cuadrático en relación a la longitud de la cadena " +"final." #: ../Doc/faq/programming.rst:1081 msgid "" "To accumulate many :class:`str` objects, the recommended idiom is to place " "them into a list and call :meth:`str.join` at the end::" msgstr "" +"Para acumular muchos objetos :class:`str`, la forma recomendada sería " +"colocarlos en una lista y llamar al método :meth:`str.join` al final::" #: ../Doc/faq/programming.rst:1089 msgid "(another reasonably efficient idiom is to use :class:`io.StringIO`)" msgstr "" +"(otra forma que sería razonable en términos de eficiencia sería usar :class:" +"`io.StringIO`)" #: ../Doc/faq/programming.rst:1091 msgid "" @@ -1226,20 +1713,26 @@ msgid "" "extend a :class:`bytearray` object using in-place concatenation (the ``+=`` " "operator)::" msgstr "" +"Para acumular muchos objetos :class:`bytes`, la forma recomendada sería " +"extender un objeto :class:`bytearray` usando el operador de concatenación " +"in situ (el operador ``+=``)::" #: ../Doc/faq/programming.rst:1100 msgid "Sequences (Tuples/Lists)" -msgstr "" +msgstr "Secuencias (Tuplas/Listas)" #: ../Doc/faq/programming.rst:1103 msgid "How do I convert between tuples and lists?" -msgstr "" +msgstr "¿Cómo convertir entre tuplas y listas?" #: ../Doc/faq/programming.rst:1105 msgid "" "The type constructor ``tuple(seq)`` converts any sequence (actually, any " "iterable) into a tuple with the same items in the same order." msgstr "" +"El constructor ``tuple(seq)`` convierte cualquier secuencia (en realidad, " +"cualquier iterable) en una tupla con los mismos elementos y en el mismo " +"orden." #: ../Doc/faq/programming.rst:1108 msgid "" @@ -1248,6 +1741,11 @@ msgid "" "copy but returns the same object, so it is cheap to call :func:`tuple` when " "you aren't sure that an object is already a tuple." msgstr "" +"Por ejemplo, ``tuple([1, 2, 3])`` lo convierte en ``(1, 2, 3)`` y " +"``tuple('abc')`` lo convierte en ``('a', 'b', 'c')``. Si el argumento es " +"una tupla no creará una nueva copia y devolverá el mismo objeto, por tanto, " +"llamar a :func:`tuple` no tendrá mucho coste si no estás seguro si un objeto " +"ya es una tupla." #: ../Doc/faq/programming.rst:1113 msgid "" @@ -1256,10 +1754,15 @@ msgid "" "3))`` yields ``[1, 2, 3]`` and ``list('abc')`` yields ``['a', 'b', 'c']``. " "If the argument is a list, it makes a copy just like ``seq[:]`` would." msgstr "" +"El constructor ``list(seq)`` convierte cualquier secuencia o iterable en una " +"lista con los mismos elementos y en el mismo orden. Por ejemplo, ``list((1, " +"2, 3))`` lo convierte a ``[1, 2, 3]`` y ``list('abc')`` lo convierte a " +"``['a', 'b', 'c']``. Si el argumento es una lista, hará una copia como lo " +"haría ``seq[:]``." #: ../Doc/faq/programming.rst:1120 msgid "What's a negative index?" -msgstr "" +msgstr "¿Qué es un índice negativo?" #: ../Doc/faq/programming.rst:1122 msgid "" @@ -1269,6 +1772,10 @@ msgid "" "(next to last) index and so forth. Think of ``seq[-n]`` as the same as " "``seq[len(seq)-n]``." msgstr "" +"Las secuencias en Python están indexadas con números positivos y negativos. " +"Para los números positivos el 0 será el primer índice, el 1 el segundo y " +"así en adelante. Para los índices negativos el -1 el último índice, el -2 " +"el penúltimo, etc. Piensa en ``seq[-n]`` como si fuera ``seq[len(seq)-n]``." #: ../Doc/faq/programming.rst:1127 msgid "" @@ -1276,63 +1783,78 @@ msgid "" "all of the string except for its last character, which is useful for " "removing the trailing newline from a string." msgstr "" +"El uso de índices negativos puede ser muy conveniente. Por ejemplo " +"``S[:-1]`` se usa para todo la cadena excepto para su último carácter, lo " +"cual es útil para eliminar el salto de línea final de una cadena." #: ../Doc/faq/programming.rst:1133 msgid "How do I iterate over a sequence in reverse order?" -msgstr "" +msgstr "¿Cómo puedo iterar sobre una secuencia en orden inverso?" #: ../Doc/faq/programming.rst:1135 msgid "" "Use the :func:`reversed` built-in function, which is new in Python 2.4::" msgstr "" +"Usa la función incorporada :func:`reversed`, la cual se introdujo en la " +"versión de 2.4 de Python::" #: ../Doc/faq/programming.rst:1140 msgid "" "This won't touch your original sequence, but build a new copy with reversed " "order to iterate over." msgstr "" +"Esto no transformará la secuencia original sino que creará una nueva copia " +"en orden inverso por la que se puede iterar." #: ../Doc/faq/programming.rst:1143 msgid "With Python 2.3, you can use an extended slice syntax::" -msgstr "" +msgstr "Desde Python 2.3 puedes usar la sintaxis extendida de rebanado::" #: ../Doc/faq/programming.rst:1150 msgid "How do you remove duplicates from a list?" -msgstr "" +msgstr "¿Cómo eliminar duplicados de una lista?" #: ../Doc/faq/programming.rst:1152 msgid "See the Python Cookbook for a long discussion of many ways to do this:" msgstr "" +"Puedes echar un vistazo al recetario de Python para ver una gran discusión " +"mostrando muchas formas de hacer esto:" #: ../Doc/faq/programming.rst:1154 msgid "https://code.activestate.com/recipes/52560/" -msgstr "" +msgstr "https://code.activestate.com/recipes/52560/" #: ../Doc/faq/programming.rst:1156 msgid "" "If you don't mind reordering the list, sort it and then scan from the end of " "the list, deleting duplicates as you go::" msgstr "" +"Si no te preocupa que la lista se reordene la puedes ordenar y, después, y " +"después escanearla desde el final borrando duplicados a medida que avanzas::" #: ../Doc/faq/programming.rst:1168 msgid "" "If all elements of the list may be used as set keys (i.e. they are all :term:" "`hashable`) this is often faster ::" msgstr "" +"Si todos los elementos de la lista pueden ser usados como claves (por " +"ejemplo son todos :term:`hashable`) esto será, en general, más rápido ::" #: ../Doc/faq/programming.rst:1173 msgid "" "This converts the list into a set, thereby removing duplicates, and then " "back into a list." msgstr "" +"Esto convierte la lista en un conjunto eliminando, por tanto, los duplicados " +"y, posteriormente, puedes volver a una lista." #: ../Doc/faq/programming.rst:1178 msgid "How do you make an array in Python?" -msgstr "" +msgstr "¿Cómo se puede hacer un array en Python?" #: ../Doc/faq/programming.rst:1180 msgid "Use a list::" -msgstr "" +msgstr "Usa una lista::" #: ../Doc/faq/programming.rst:1184 msgid "" @@ -1340,6 +1862,9 @@ msgid "" "primary difference is that a Python list can contain objects of many " "different types." msgstr "" +"Las listas son equivalentes en complejidad temporal a arrays en C o Pascal; " +"La principal diferencia es que una lista en Python puede contener objetos de " +"diferentes tipos." #: ../Doc/faq/programming.rst:1187 msgid "" @@ -1348,11 +1873,17 @@ msgid "" "lists. Also note that the Numeric extensions and others define array-like " "structures with various characteristics as well." msgstr "" +"El módulo ``array`` proporciona, también, métodos para crear arrays de tipo " +"fijo con representaciones compactas pero son más lentos de indexar que las " +"listas. Además, debes tener en cuenta que las extensiones Numeric y otras " +"permiten definen estructuras de tipo array con diversas características." #: ../Doc/faq/programming.rst:1192 msgid "" "To get Lisp-style linked lists, you can emulate cons cells using tuples::" msgstr "" +"Para obtener listas enlazadas al estilo de las de Lisp, puedes emular celdas " +"cons usando tuplas::" #: ../Doc/faq/programming.rst:1196 msgid "" @@ -1361,22 +1892,29 @@ msgid "" "``lisp_list[1]``. Only do this if you're sure you really need to, because " "it's usually a lot slower than using Python lists." msgstr "" +"Si deseas que haya mutabilidad podrías usar listas en lugar de tuplas. El " +"análogo a un car de Lisp es ``lisp_list[0]`` y al análogo a cdr es " +"``lisp_list[1]``. Haz esto solo si estás seguro que es lo que necesitas " +"debido a que, normalmente, será bastante más lento que el usar listas " +"Python." #: ../Doc/faq/programming.rst:1205 msgid "How do I create a multidimensional list?" -msgstr "" +msgstr "¿Cómo puedo crear una lista multidimensional?" #: ../Doc/faq/programming.rst:1207 msgid "You probably tried to make a multidimensional array like this::" msgstr "" +"Seguramente hayas intentado crear un array multidimensional de la siguiente " +"forma::" #: ../Doc/faq/programming.rst:1211 msgid "This looks correct if you print it:" -msgstr "" +msgstr "Esto parece correcto si lo muestras en pantalla:" #: ../Doc/faq/programming.rst:1222 msgid "But when you assign a value, it shows up in multiple places:" -msgstr "" +msgstr "Pero cuando asignas un valor, se muestra en múltiples sitios:" #: ../Doc/faq/programming.rst:1234 msgid "" @@ -1385,37 +1923,50 @@ msgid "" "containing 3 references to the same list of length two. Changes to one row " "will show in all rows, which is almost certainly not what you want." msgstr "" +"La razón es que replicar una lista con ``*`` no crea copias, solo crea " +"referencias a los objetos existentes. El ``*3`` crea una lista conteniendo " +"3 referencias a la misma lista de longitud dos. Cambios a una fila se " +"mostrarán en todas las filas, lo cual, seguramente, no es lo que deseas." #: ../Doc/faq/programming.rst:1239 msgid "" "The suggested approach is to create a list of the desired length first and " "then fill in each element with a newly created list::" msgstr "" +"El enfoque recomendado sería crear, primero, una lista de la longitud " +"deseada y, después, rellenar cada elemento con una lista creada en ese " +"momento::" #: ../Doc/faq/programming.rst:1246 msgid "" "This generates a list containing 3 different lists of length two. You can " "also use a list comprehension::" msgstr "" +"Esto genera una lista conteniendo 3 listas distintas de longitud dos. " +"También puedes usar una comprensión de lista::" #: ../Doc/faq/programming.rst:1252 msgid "" "Or, you can use an extension that provides a matrix datatype; `NumPy `_ is the best known." msgstr "" +"O puedes usar una extensión que proporcione un tipo de dato para matrices; " +"`NumPy `_ es la más conocida." #: ../Doc/faq/programming.rst:1257 msgid "How do I apply a method to a sequence of objects?" -msgstr "" +msgstr "¿Cómo puedo aplicar un método a una secuencia de objetos?" #: ../Doc/faq/programming.rst:1259 msgid "Use a list comprehension::" -msgstr "" +msgstr "Usa una comprensión de listas::" #: ../Doc/faq/programming.rst:1266 msgid "" "Why does a_tuple[i] += ['item'] raise an exception when the addition works?" msgstr "" +"¿Por qué hacer lo siguiente, ``a_tuple[i] += ['item']``, lanza una excepción " +"cuando la suma funciona?" #: ../Doc/faq/programming.rst:1268 msgid "" @@ -1423,6 +1974,9 @@ msgid "" "operators are *assignment* operators, and the difference between mutable and " "immutable objects in Python." msgstr "" +"Esto es debido a la combinación del hecho de que un operador de asignación " +"aumentada es un operador de *asignación* y a la diferencia entre objetos " +"mutables e inmutable en Python." #: ../Doc/faq/programming.rst:1272 msgid "" @@ -1430,10 +1984,13 @@ msgid "" "applied to elements of a tuple that point to mutable objects, but we'll use " "a ``list`` and ``+=`` as our exemplar." msgstr "" +"Esta discusión aplica, en general, cuando los operadores de asignación " +"aumentada se aplican a elementos de una tupla que apuntan a objetos " +"mutables. Pero vamos a usar una ``lista`` y ``+=`` para el ejemplo." #: ../Doc/faq/programming.rst:1276 msgid "If you wrote::" -msgstr "" +msgstr "Si escribes::" #: ../Doc/faq/programming.rst:1284 msgid "" @@ -1443,28 +2000,39 @@ msgid "" "to element ``0`` of the tuple, we get an error because we can't change what " "an element of a tuple points to." msgstr "" +"La razón por la que se produce la excepción debería ser evidente: ``1`` se " +"añade al objeto ``a_tuple[0]`` que apunta a (``1``), creando el objeto " +"resultante, ``2``, pero cuando intentamos asignar el resultado del cálculo, " +"``2``, al elemento ``0`` de la tupla, obtenemos un error debido a que no " +"podemos cambiar el elemento al que apunta la tupla." #: ../Doc/faq/programming.rst:1290 msgid "" "Under the covers, what this augmented assignment statement is doing is " "approximately this::" msgstr "" +"En realidad, lo que esta declaración de asignación aumentada está haciendo " +"es, aproximadamente, lo siguiente::" #: ../Doc/faq/programming.rst:1299 msgid "" "It is the assignment part of the operation that produces the error, since a " "tuple is immutable." msgstr "" +"Es la parte de asignación de la operación la que provoca el error, debido a " +"que una tupla es inmutable." #: ../Doc/faq/programming.rst:1302 msgid "When you write something like::" -msgstr "" +msgstr "Cuando escribes algo como lo siguiente::" #: ../Doc/faq/programming.rst:1310 msgid "" "The exception is a bit more surprising, and even more surprising is the fact " "that even though there was an error, the append worked::" msgstr "" +"La excepción es un poco más sorprendente e, incluso, más sorprendente es el " +"hecho que aunque hubo un error, la agregación funcionó::" #: ../Doc/faq/programming.rst:1316 msgid "" @@ -1475,10 +2043,16 @@ msgid "" "calling ``extend`` on the list and returning the list. That's why we say " "that for lists, ``+=`` is a \"shorthand\" for ``list.extend``::" msgstr "" +"Para ver lo que sucede necesitas saber que (a) si un objeto implementa un " +"método mágico ``__iadd__`` , se le llama cuando se ejecuta la asignación " +"aumentada ``+=`` y el valor devuelto es lo que se usa en la declaración de " +"asignación; y (b) para listas, ``__iadd__`` es equivalente a llamar a " +"``extend`` en la lista y devolver la lista. Es por esto que decimos que " +"para listas, ``+=`` es un atajo para ``list.extend``::" #: ../Doc/faq/programming.rst:1328 msgid "This is equivalent to::" -msgstr "" +msgstr "Esto es equivalente a ::" #: ../Doc/faq/programming.rst:1333 msgid "" @@ -1487,10 +2061,16 @@ msgid "" "assignment is a no-op, since it is a pointer to the same object that " "``a_list`` was previously pointing to, but the assignment still happens." msgstr "" +"El objeto al que apunta a_list ha mutado y el puntero al objeto mutado es " +"asignado de vuelta a ``a_list``. El resultado final de la asignación no es " +"opción debido a que es un puntero al mismo objeto al que estaba apuntando " +"``a_list`` pero la asignación sí que ocurre." #: ../Doc/faq/programming.rst:1338 msgid "Thus, in our tuple example what is happening is equivalent to::" msgstr "" +"Por tanto, en nuestro ejemplo con tupla lo que está pasando es equivalente " +"a::" #: ../Doc/faq/programming.rst:1346 msgid "" @@ -1499,12 +2079,18 @@ msgid "" "that final assignment still results in an error, because tuples are " "immutable." msgstr "" +"El ``__iadd__`` se realiza con éxito y la lista se extiende pero, incluso " +"aunque ``result`` apunta al mismo objeto al que ya está apuntando " +"``a_tuple[0]`` la asignación final sigue resultando en un error, debido a " +"que las tuplas son inmutables." #: ../Doc/faq/programming.rst:1352 msgid "" "I want to do a complicated sort: can you do a Schwartzian Transform in " "Python?" msgstr "" +"Quiero hacer una ordenación compleja: ¿Puedes hacer una transformada " +"Schwartziana (Schwartzian Transform) en Python?" #: ../Doc/faq/programming.rst:1354 msgid "" @@ -1513,20 +2099,26 @@ msgid "" "value\". In Python, use the ``key`` argument for the :meth:`list.sort` " "method::" msgstr "" +"La técnica, atribuida a Randal Schwartz, miembro de la comunidad Perl, " +"ordena los elementos de una lista mediante una métrica que mapea cada " +"elemento a su \"valor orden\". En Python, usa el argumento ``key`` par el " +"método :meth:`list.sort`::" #: ../Doc/faq/programming.rst:1363 msgid "How can I sort one list by values from another list?" -msgstr "" +msgstr "¿Cómo puedo ordenar una lista a partir de valores de otra lista?" #: ../Doc/faq/programming.rst:1365 msgid "" "Merge them into an iterator of tuples, sort the resulting list, and then " "pick out the element you want. ::" msgstr "" +"Las puedes unir en un iterador de tuplas, ordena la lista resultando y " +"después extrae el elemento que deseas. ::" #: ../Doc/faq/programming.rst:1379 msgid "An alternative for the last step is::" -msgstr "" +msgstr "Una alternativa para el último paso es::" #: ../Doc/faq/programming.rst:1384 msgid "" @@ -1538,14 +2130,22 @@ msgid "" "\"result.append\" requires an extra attribute lookup, and third, there's a " "speed reduction from having to make all those function calls." msgstr "" +"Si encuentras esto más legible, podrías preferir usar esto en lugar de una " +"comprensión de lista final. Sin embargo, es casi el doble de lento para " +"listas largas. ¿Por qué? Primero, la operación ``append()`` necesita " +"reasignar memoria y, aunque usa algunos trucos para evitar hacerlo en todo " +"momento, sigue teniéndolo que hacer ocasionalmente y eso tiene un poco de " +"coste. Segundo, la expresión \"result.append\" requiere una búsqueda " +"adicional de atributos y, tercero, hay una reducción de velocidad de tener " +"que hacer todas esas llamadas a funciones." #: ../Doc/faq/programming.rst:1394 msgid "Objects" -msgstr "" +msgstr "Objetos" #: ../Doc/faq/programming.rst:1397 msgid "What is a class?" -msgstr "" +msgstr "¿Qué es una clase?" #: ../Doc/faq/programming.rst:1399 msgid "" @@ -1554,6 +2154,10 @@ msgid "" "which embody both the data (attributes) and code (methods) specific to a " "datatype." msgstr "" +"Una clase es un tipo de objeto particular creado mediante la ejecución de la " +"declaración class. Los objetos class se usan como plantillas para crear " +"instancias de objetos que son tanto los datos (atributos) como el código " +"(métodos) específicos para un tipo de dato." #: ../Doc/faq/programming.rst:1403 msgid "" @@ -1564,10 +2168,17 @@ msgid "" "for a mailbox, and subclasses such as ``MboxMailbox``, ``MaildirMailbox``, " "``OutlookMailbox`` that handle various specific mailbox formats." msgstr "" +"Una clase puede estar basada en una o más clases diferentes, llamadas su(s) " +"clase(s). Hereda los atributos y métodos de sus clases base. Esto permite " +"que se pueda refinar un objeto modelo de forma sucesiva mediante herencia. " +"Puedes tener una clase genérica ``Mailbox`` que proporciona métodos de " +"acceso básico para un buzón de correo y subclases como ``MboxMailbox``, " +"``MaildirMailbox``, ``OutlookMailbox`` que gestionan distintos formatos " +"específicos de buzón de correos." #: ../Doc/faq/programming.rst:1412 msgid "What is a method?" -msgstr "" +msgstr "¿Qué es un método?" #: ../Doc/faq/programming.rst:1414 msgid "" @@ -1575,10 +2186,13 @@ msgid "" "name(arguments...)``. Methods are defined as functions inside the class " "definition::" msgstr "" +"Un método es una función de un objeto ``x`` que puedes llamar, normalmente, " +"de la forma ``x.name(arguments...)``. Los métodos se definen como " +"funciones dentro de la definición de la clase::" #: ../Doc/faq/programming.rst:1424 msgid "What is self?" -msgstr "" +msgstr "¿Qué es self?" #: ../Doc/faq/programming.rst:1426 msgid "" @@ -1587,16 +2201,23 @@ msgid "" "c)`` for some instance ``x`` of the class in which the definition occurs; " "the called method will think it is called as ``meth(x, a, b, c)``." msgstr "" +"Self es, básicamente, un nombre que se usa de forma convencional como primer " +"argumento de un método. Un método definido como ``meth(self, a, b, c)`` se " +"le llama como ``x.meth(a, b, c)`` para una instancia ``x`` de la clase es " +"que se definió; el método invocado pensará que se le ha invocado como " +"``meth(x, a, b, c)``." #: ../Doc/faq/programming.rst:1431 msgid "See also :ref:`why-self`." -msgstr "" +msgstr "Ver también :ref:`why-self`." #: ../Doc/faq/programming.rst:1435 msgid "" "How do I check if an object is an instance of a given class or of a subclass " "of it?" msgstr "" +"¿Cómo puedo comprobar si un objeto es una instancia de una clase dada o de " +"una subclase de la misma?" #: ../Doc/faq/programming.rst:1437 msgid "" @@ -1606,6 +2227,12 @@ msgid "" "and can also check whether an object is one of Python's built-in types, e.g. " "``isinstance(obj, str)`` or ``isinstance(obj, (int, float, complex))``." msgstr "" +"Usa la función incorporada ``isinstance(obj, cls)``. Puedes comprobar si un " +"objeto es una instancia de cualquier número de clases proporcionando una " +"tupla en lugar de una sola clase, por ejemplo ``isinstance(obj, (class1, " +"class2, ...))`` y, también, puedes comprobar si un objeto es uno de los " +"tipos incorporados por ejemplo ``isinstance(obj, str)`` o ``isinstance(obj, " +"(int, float, complex))``." #: ../Doc/faq/programming.rst:1443 msgid "" @@ -1616,16 +2243,24 @@ msgid "" "and doing a different thing based on what class it is. For example, if you " "have a function that does something::" msgstr "" +"Destacar que muchos programas no necesitan usar :func:`isinstance` de forma " +"frecuente en clases definidas por el usuario. Si estás desarrollando clases " +"un mejor estilo orientado a objetos sería el de definir los métodos en las " +"clases que encapsulan un comportamiento en particular en lugar de ir " +"comprobando la clase del objeto e ir haciendo cosas en base a la clase que " +"es. Por ejemplo, si tienes una función que hace lo siguiente::" #: ../Doc/faq/programming.rst:1457 msgid "" "A better approach is to define a ``search()`` method on all the classes and " "just call it::" msgstr "" +"Un enfoque más adecuado sería definir un método ``search()`` en todas las " +"clases e invocarlo::" #: ../Doc/faq/programming.rst:1472 msgid "What is delegation?" -msgstr "" +msgstr "¿Qué es la delegación?" #: ../Doc/faq/programming.rst:1474 msgid "" @@ -1635,6 +2270,11 @@ msgid "" "implementation of the method you're interested in changing and delegates all " "other methods to the corresponding method of ``x``." msgstr "" +"La delegación es una técnica orientada a objetos (también llamado un patrón " +"de diseño). Digamos que tienes un objeto ``x`` y deseas cambiar el " +"comportamiento de solo uno de sus métodos. Puedes crear una nueva clase que " +"proporciona una nueva implementación del método que te interesa cambiar y " +"delega el resto de métodos al método correspondiente de ``x``." #: ../Doc/faq/programming.rst:1480 msgid "" @@ -1642,6 +2282,10 @@ msgid "" "following class implements a class that behaves like a file but converts all " "written data to uppercase::" msgstr "" +"Los programadores Python pueden implementar la delegación de forma muy " +"sencilla. Por ejemplo, la siguiente clase implementa una clase que se " +"comporta como un fichero pero convierte todos los datos escritos a " +"mayúsculas::" #: ../Doc/faq/programming.rst:1495 msgid "" @@ -1652,6 +2296,12 @@ msgid "" "method; consult :ref:`the language reference ` for more " "information about controlling attribute access." msgstr "" +"Aquí, la clase ``UpperOut`` redefine el método ``write()`` para convertir " +"la cadena del argumento a mayúscula antes de invocar al método ``self." +"_outfile.write()``. El resto de métodos han sido delegados al objeto ``self." +"_outfile``. La delegación se consigue mediante el método ``__getattr__``; " +"consulta :ref:`la referencia del lenguaje ` para obtener " +"más información sobre cómo controlar el acceso a atributos." #: ../Doc/faq/programming.rst:1502 msgid "" @@ -1661,22 +2311,32 @@ msgid "" "implementation of :meth:`__setattr__` is roughly equivalent to the " "following::" msgstr "" +"Ten en cuenta que para casos más generales la delegación puede ser algo más " +"complicada. Cuando los atributos se deben colocar y recuperar la clase debe " +"definir, también, un método :meth:`__setattr__` y hay que hacerlo con " +"cuidado. La implementación básica de :meth:`__setattr__` es, " +"aproximadamente, equivalente a lo siguiente::" #: ../Doc/faq/programming.rst:1513 msgid "" "Most :meth:`__setattr__` implementations must modify ``self.__dict__`` to " "store local state for self without causing an infinite recursion." msgstr "" +"Muchas implementaciones de :meth:`__setattr__` deben modificar ``self." +"__dict__`` para almacenar el estado local para self sin provocar una " +"recursión infinita." #: ../Doc/faq/programming.rst:1518 msgid "" "How do I call a method defined in a base class from a derived class that " "overrides it?" msgstr "" +"¿Cómo invoco a un método definido en una clase base desde una clase derivada " +"que lo ha sobreescrito?" #: ../Doc/faq/programming.rst:1520 msgid "Use the built-in :func:`super` function::" -msgstr "" +msgstr "Usa la función incorporada :func:`super`::" #: ../Doc/faq/programming.rst:1526 msgid "" @@ -1686,10 +2346,17 @@ msgid "" "meth(self, arguments...)``. Here, ``Base.meth`` is an unbound method, so " "you need to provide the ``self`` argument." msgstr "" +"Para versiones anteriores a la 3.0, puedes usar clases clásicas: Para la " +"definición de una clase como ``class Derived(Base): ...`` puedes invocar el " +"método ``meth()`` definido en ``Base`` (o una de las clases base de " +"``Base``) como ``Base.meth(self, arguments...)``. Aquí, ``Base.meth`` es un " +"método no ligado y, por tanto, debes proporcionar el argumento ``self``." #: ../Doc/faq/programming.rst:1534 msgid "How can I organize my code to make it easier to change the base class?" msgstr "" +"¿Cómo puedo organizar mi código para hacer que sea más sencillo modificar la " +"clase base?" #: ../Doc/faq/programming.rst:1536 msgid "" @@ -1700,22 +2367,34 @@ msgid "" "g. depending on availability of resources) which base class to use. " "Example::" msgstr "" +"Puedes definir un alias para la clase base, asignar la clase base real al " +"alias antes de la definición de tu clase y usar el alias a lo largo de toda " +"la clase. Entonces, lo único que tienes que cambiar es el valor asignado al " +"alias. Sin pretenderlo, este truco también es útil si desear decidir de " +"forma dinámica (por ejemplo dependiendo de la disponibilidad de recursos) " +"qué clase base usar. Ejemplo::" #: ../Doc/faq/programming.rst:1551 msgid "How do I create static class data and static class methods?" msgstr "" +"¿Cómo puedo crear datos estáticos de clase y métodos estáticos de clase?" #: ../Doc/faq/programming.rst:1553 msgid "" "Both static data and static methods (in the sense of C++ or Java) are " "supported in Python." msgstr "" +"Tanto los datos estáticos como los métodos estáticos (en el sentido de C++ o " +"Java) están permitidos en Python." #: ../Doc/faq/programming.rst:1556 msgid "" "For static data, simply define a class attribute. To assign a new value to " "the attribute, you have to explicitly use the class name in the assignment::" msgstr "" +"Para datos estáticos simplemente define un atributo de clase. Para asignar " +"un nuevo valor al atributo debes usar de forma explícita el nombre de la " +"clase en la asignación::" #: ../Doc/faq/programming.rst:1568 msgid "" @@ -1723,6 +2402,10 @@ msgid "" "``isinstance(c, C)`` holds, unless overridden by ``c`` itself or by some " "class on the base-class search path from ``c.__class__`` back to ``C``." msgstr "" +"``c.count`` también se refiere a ``C.count`` para cualquier ``c`` de tal " +"forma que se cumpla ``isinstance(c, C)``, a no ser que ``c`` sea " +"sobreescrita por si misma o por alguna clase contenida en la búsqueda de " +"clases base desde``c.__class__`` hasta ``C``." #: ../Doc/faq/programming.rst:1572 msgid "" @@ -1731,58 +2414,76 @@ msgid "" "dict. Rebinding of a class-static data name must always specify the class " "whether inside a method or not::" msgstr "" +"Debes tener cuidado: dentro de un método de C, una asignación como ``self." +"count = 42`` creará una nueva instancia sin relación con la original que se " +"llamará \"count\" en el propio diccionario de ``self``. El reunificar el " +"nombre de datos estáticos de una clase debería llevar, siempre, a " +"especificar la clase tanto si se produce desde dentro de un método como si " +"no::" #: ../Doc/faq/programming.rst:1579 msgid "Static methods are possible::" -msgstr "" +msgstr "Los métodos estáticos son posibles::" #: ../Doc/faq/programming.rst:1587 msgid "" "However, a far more straightforward way to get the effect of a static method " "is via a simple module-level function::" msgstr "" +"Sin embargo, una forma más directa de obtener el efecto de un método " +"estático sería mediante una simple función a nivel de módulo::" #: ../Doc/faq/programming.rst:1593 msgid "" "If your code is structured so as to define one class (or tightly related " "class hierarchy) per module, this supplies the desired encapsulation." msgstr "" +"Si has estructurado tu código para definir una clase única (o una jerarquía " +"de clases altamente relacionadas) por módulo, esto proporcionará la " +"encapsulación deseada." #: ../Doc/faq/programming.rst:1598 msgid "How can I overload constructors (or methods) in Python?" -msgstr "" +msgstr "¿Como puedo sobrecargar constructores (o métodos) en Python?" #: ../Doc/faq/programming.rst:1600 msgid "" "This answer actually applies to all methods, but the question usually comes " "up first in the context of constructors." msgstr "" +"Esta respuesta es aplicable, en realidad, a todos los métodos pero la " +"pregunta suele surgir primero en el contexto de los constructores." #: ../Doc/faq/programming.rst:1603 msgid "In C++ you'd write" -msgstr "" +msgstr "En C++ deberías escribir" #: ../Doc/faq/programming.rst:1612 msgid "" "In Python you have to write a single constructor that catches all cases " "using default arguments. For example::" msgstr "" +"En Python solo debes escribir un único constructor que tenga en cuenta todos " +"los casos usando los argumentos por defecto. Por ejemplo::" #: ../Doc/faq/programming.rst:1622 msgid "This is not entirely equivalent, but close enough in practice." msgstr "" +"Esto no es totalmente equivalente pero, en la práctica, es muy similar." #: ../Doc/faq/programming.rst:1624 msgid "You could also try a variable-length argument list, e.g. ::" msgstr "" +"Podrías intentar, también una lista de argumentos de longitud variable, por " +"ejemplo ::" #: ../Doc/faq/programming.rst:1629 msgid "The same approach works for all method definitions." -msgstr "" +msgstr "El mismo enfoque funciona para todas las definiciones de métodos." #: ../Doc/faq/programming.rst:1633 msgid "I try to use __spam and I get an error about _SomeClassName__spam." -msgstr "" +msgstr "Intento usar __spam y obtengo un error sobre _SomeClassName__spam." #: ../Doc/faq/programming.rst:1635 msgid "" @@ -1793,6 +2494,12 @@ msgid "" "``classname`` is the current class name with any leading underscores " "stripped." msgstr "" +"Nombres de variable con doble guion prefijado se convierten, con una " +"modificación de nombres, para proporcionar una forma simple pero efectiva de " +"definir variables de clase privadas. Cualquier identificador de la forma " +"``__spam`` (como mínimo dos guiones bajos como prefijo, como máximo un guion " +"bajo como sufijo) se reemplaza con ``_classname__spam``, donde ``classname`` " +"es el nombre de la clase eliminando cualquier guion bajo prefijado." #: ../Doc/faq/programming.rst:1641 msgid "" @@ -1801,14 +2508,19 @@ msgid "" "the object's ``__dict__``. Many Python programmers never bother to use " "private variable names at all." msgstr "" +"Esto no garantiza la privacidad: un usuario externo puede acceder, de forma " +"deliberada y si así lo desea, al atributo \"_classname__spam\", y los " +"valores privados son visibles en el ``__dict__`` del objeto. Muchos " +"programadores Python no se suelen molestar en usar nombres privados de " +"variables." #: ../Doc/faq/programming.rst:1648 msgid "My class defines __del__ but it is not called when I delete the object." -msgstr "" +msgstr "Mi clase define __del__ pero no se le invoca cuando borro el objeto." #: ../Doc/faq/programming.rst:1650 msgid "There are several possible reasons for this." -msgstr "" +msgstr "Existen varias razones posibles para que suceda así." #: ../Doc/faq/programming.rst:1652 msgid "" @@ -1816,6 +2528,9 @@ msgid "" "decrements the object's reference count, and if this reaches zero :meth:" "`__del__` is called." msgstr "" +"La declaración del no invoca, necesariamente, al método :meth:`__del__` -- " +"simplemente reduce el conteo de referencias del objeto y, si se reduce a " +"cero entonces es cuando se invoca a :meth:`__del__`." #: ../Doc/faq/programming.rst:1656 msgid "" @@ -1830,6 +2545,18 @@ msgid "" "run :func:`gc.collect` to force a collection, but there *are* pathological " "cases where objects will never be collected." msgstr "" +"Si tus estructuras de datos contienen enlaces circulares (por ejemplo un " +"árbol en el cual cada hijo tiene una referencia al padre y cada padre tiene " +"una lista de hijos) el conteo de referencias no alcanzará nunca el valor de " +"cero. De vez en cuando, Python ejecuta un algoritmo para detectar esos " +"ciclos pero el recolector de basura debe ejecutarse un rato después de que " +"se desvanezca la última referencia a tu estructura de datos, de tal forma " +"que tu método :meth:`__del__` se pueda invocar en un momento aleatorio que " +"no resulte inconveniente. Esto no es conveniente si estás intentando " +"reproducir un problema. Peor aún, el orden en el que se ejecutan los " +"métodos :meth:`__del__` del objeto es arbitrario. Puedes ejecutar :func:`gc." +"collect` para forzar una recolección pero *existen* casos patológicos en los " +"cuales los objetos nunca serán recolectados." #: ../Doc/faq/programming.rst:1667 msgid "" @@ -1840,6 +2567,13 @@ msgid "" "``close()`` and ``close()`` should make sure that it can be called more than " "once for the same object." msgstr "" +"A pesar del recolector de ciclos, siempre será buena idea definir un método " +"``close()`` de forma explícita en objetos que debe ser llamado en el momento " +"que has terminado con ellos. El método ``close()`` puede, en ese momento, " +"eliminar atributos que se refieren a subobjetos. No invoques directamente " +"a :meth:`__del__` -- :meth:`__del__` debe invocar a ``close()`` y " +"``close()`` debe asegurarse que puede ser invocado más de una vez en el " +"mismo objeto." #: ../Doc/faq/programming.rst:1674 msgid "" @@ -1848,16 +2582,24 @@ msgid "" "reference count. Tree data structures, for instance, should use weak " "references for their parent and sibling references (if they need them!)." msgstr "" +"Otra forma de evitar referencias cíclicas sería usando el módulo :mod:" +"`weakref`, que permite apuntar hacia objetos sin incrementar su conteo de " +"referencias. Las estructuras de datos en árbol, por ejemplo, deberían usar " +"referencias débiles para las referencias del padre y hermanos (¡si es que " +"las necesitan!)." #: ../Doc/faq/programming.rst:1687 msgid "" "Finally, if your :meth:`__del__` method raises an exception, a warning " "message is printed to :data:`sys.stderr`." msgstr "" +"Finalmente, si tu método :meth:`__del__` lanza una excepción, se manda un " +"mensaje de alerta a :data:`sys.stderr`." #: ../Doc/faq/programming.rst:1692 msgid "How do I get a list of all instances of a given class?" msgstr "" +"¿Cómo puedo obtener una lista de todas las instancias de una clase dada?" #: ../Doc/faq/programming.rst:1694 msgid "" @@ -1865,10 +2607,14 @@ msgid "" "type). You can program the class's constructor to keep track of all " "instances by keeping a list of weak references to each instance." msgstr "" +"Python no hace seguimiento de todas las instancias de una clase (o de los " +"tipos incorporados). Puedes programar el constructor de una clase para que " +"haga seguimiento de todas sus instancias manteniendo una lista de " +"referencias débiles a cada instancia." #: ../Doc/faq/programming.rst:1700 msgid "Why does the result of ``id()`` appear to be not unique?" -msgstr "" +msgstr "¿Por qué el resultado de ``id()`` no parece ser único?" #: ../Doc/faq/programming.rst:1702 msgid "" @@ -1878,6 +2624,12 @@ msgid "" "memory, the next freshly created object is allocated at the same position in " "memory. This is illustrated by this example:" msgstr "" +"La función incorporada :func:`id` devuelve un entero que se garantiza que " +"sea único durante la vida del objeto. Debido a que en CPython esta es la " +"dirección en memoria del objeto, sucede que, frecuentemente, después de que " +"un objeto se elimina de la memoria el siguiente objeto recién creado se " +"localiza en la misma posición en memoria. Esto se puede ver ilustrado en " +"este ejemplo:" #: ../Doc/faq/programming.rst:1713 msgid "" @@ -1886,14 +2638,18 @@ msgid "" "objects whose id you want to examine are still alive, create another " "reference to the object:" msgstr "" +"Las dos ids pertenecen a dos objetos 'entero' diferentes que se crean antes " +"y se eliminan inmediatamente después de la ejecución de la invocación a " +"``id()``. Para estar seguro que los objetos cuya id quieres examinar siguen " +"vivos crea otra referencia al objeto:" #: ../Doc/faq/programming.rst:1726 msgid "Modules" -msgstr "" +msgstr "Módulos" #: ../Doc/faq/programming.rst:1729 msgid "How do I create a .pyc file?" -msgstr "" +msgstr "¿Cómo creo un fichero .pyc?" #: ../Doc/faq/programming.rst:1731 msgid "" @@ -1905,6 +2661,14 @@ msgid "" "file, and ends with ``.pyc``, with a middle component that depends on the " "particular ``python`` binary that created it. (See :pep:`3147` for details.)" msgstr "" +"Cuando se importa un módulo por primera vez (o cuando el código fuente ha " +"cambiado desde que el fichero compilado se creó) un fichero ``.pyc`` que " +"contiene el código compilado se debería crear en la subcarpeta " +"``__pycache__`` del directorio que contiene al fichero``.py``. El fichero " +"``.pyc`` tendrá un nombre que empezará con el mismo nombre que el del " +"fichero ``.py`` y terminará con ``.pyc``, con un componente intermedio que " +"dependerá del binario ``python`` en particular que lo creó. (Ver :pep:" +"`3147` para detalles.)" #: ../Doc/faq/programming.rst:1739 msgid "" @@ -1914,6 +2678,11 @@ msgid "" "example, if you develop as one user but run as another, such as if you are " "testing with a web server." msgstr "" +"Una razón por la que no se cree un fichero ``.pyc`` podría ser debido a un " +"problema de permisos del directorio que contiene al fichero fuente, lo que " +"significa que el subdirectorio ``__pycache__`` no se puede crear. Esto puede " +"suceder, por ejemplo, si desarrollas como un usuario pero lo ejecutas como " +"otro, como si estuvieras probando en un servidor web." #: ../Doc/faq/programming.rst:1744 msgid "" @@ -1923,6 +2692,11 @@ msgid "" "``__pycache__`` subdirectory and write the compiled module to that " "subdirectory." msgstr "" +"Hasta que no definas la variable de entorno :envvar:" +"`PYTHONDONTWRITEBYTECODE`, la creación de un fichero .pyc se hará " +"automáticamente si importas un módulo y Python dispone de la habilidad " +"(permisos, espacio libre, etc...) para crear un subdirectorio " +"``__pycache__`` y escribir un módulo compilado en ese subdirectorio." #: ../Doc/faq/programming.rst:1749 msgid "" @@ -1933,6 +2707,12 @@ msgid "" "``xyz`` because ``xyz`` is imported, but no ``.pyc`` file will be created " "for ``foo`` since ``foo.py`` isn't being imported." msgstr "" +"La ejecución de un script principal Python no se considera una importación y " +"no se crea el fichero ``.pyc``. Por ejemplo, Si tienes un módulo principal " +"``foo.py`` que importa a otro módulo ``xyz.py``, cuando ejecutas ``foo`` " +"(mediante un comando de la shell ``python foo.py``), se creará un fichero ``." +"pyc`` para ``xyz`` porque ``xyz`` ha sido importado, pero no se creará un " +"fichero ``.pyc`` para ``foo`` ya que ``foo.py`` no ha sido importado." #: ../Doc/faq/programming.rst:1756 msgid "" @@ -1940,12 +2720,18 @@ msgid "" "pyc`` file for a module that is not imported -- you can, using the :mod:" "`py_compile` and :mod:`compileall` modules." msgstr "" +"Si necesitas crear un fichero ``.pyc`` también para ``foo`` -- es decir, " +"crear un fichero ``.pyc`` para un módulo que no ha sido importado -- puedes " +"usar los módulos :mod:`py_compile` y :mod:`compileall`." #: ../Doc/faq/programming.rst:1760 msgid "" "The :mod:`py_compile` module can manually compile any module. One way is to " "use the ``compile()`` function in that module interactively::" msgstr "" +"El módulo :mod:`py_compile` puede compilar manualmente cualquier módulo. " +"Una forma sería usando la función ``compile()`` de ese módulo de forma " +"interactiva::" #: ../Doc/faq/programming.rst:1766 msgid "" @@ -1953,6 +2739,9 @@ msgid "" "location as ``foo.py`` (or you can override that with the optional parameter " "``cfile``)." msgstr "" +"Esto escribirá ``.pyc`` en el subdirectorio ``__pycache__`` en la misma " +"localización en la que se encuentre ``foo.py`` (o, puedes sobreescribir ese " +"comportamiento con el parámetro opcional ``cfile``)." #: ../Doc/faq/programming.rst:1770 msgid "" @@ -1961,10 +2750,14 @@ msgid "" "running ``compileall.py`` and providing the path of a directory containing " "Python files to compile::" msgstr "" +"Puedes compilar automáticamente todos los ficheros en un directorio o " +"directorios usando el módulo :mod:`compileall`. Lo puedes hacer desde la " +"línea de comandos ejecutando ``compileall.py`` y proporcionando una ruta al " +"directorio que contiene los ficheros Python a compilar::" #: ../Doc/faq/programming.rst:1779 msgid "How do I find the current module name?" -msgstr "" +msgstr "¿Cómo puedo encontrar el nombre del módulo en uso?" #: ../Doc/faq/programming.rst:1781 msgid "" @@ -1974,75 +2767,88 @@ msgid "" "importing them also provide a command-line interface or a self-test, and " "only execute this code after checking ``__name__``::" msgstr "" +"Un módulo puede encontrar su propio nombre mirando en la variable global " +"predeterminada ``__name__``. Si tiene el valor ``'__main__'``, el programa " +"se está ejecutando como un script. Muchos módulos que se usan, " +"generalmente, importados en otro script proporcionan, además, una interfaz " +"para la línea de comandos o para probarse a si mismos y solo ejecutan código " +"después de comprobar ``__name__``::" #: ../Doc/faq/programming.rst:1796 msgid "How can I have modules that mutually import each other?" -msgstr "" +msgstr "¿Cómo podría tener módulos que se importan mutuamente entre ellos?" #: ../Doc/faq/programming.rst:1798 msgid "Suppose you have the following modules:" -msgstr "" +msgstr "Supón que tienes los siguientes módulos:" #: ../Doc/faq/programming.rst:1800 msgid "foo.py::" -msgstr "" +msgstr "foo.py::" #: ../Doc/faq/programming.rst:1805 msgid "bar.py::" -msgstr "" +msgstr "bar.py::" #: ../Doc/faq/programming.rst:1810 msgid "The problem is that the interpreter will perform the following steps:" -msgstr "" +msgstr "El problema es que el intérprete realizará los siguientes pasos:" #: ../Doc/faq/programming.rst:1812 msgid "main imports foo" -msgstr "" +msgstr "main importa a foo" #: ../Doc/faq/programming.rst:1813 msgid "Empty globals for foo are created" -msgstr "" +msgstr "Se crea un *globals* vacío para foo" #: ../Doc/faq/programming.rst:1814 msgid "foo is compiled and starts executing" -msgstr "" +msgstr "foo se compila y se comienza a ejecutar" #: ../Doc/faq/programming.rst:1815 msgid "foo imports bar" -msgstr "" +msgstr "foo importa a bar" #: ../Doc/faq/programming.rst:1816 msgid "Empty globals for bar are created" -msgstr "" +msgstr "Se crea un *globals* vacío para bar" #: ../Doc/faq/programming.rst:1817 msgid "bar is compiled and starts executing" -msgstr "" +msgstr "bar se compila y se comienza a ejecutar" #: ../Doc/faq/programming.rst:1818 msgid "" "bar imports foo (which is a no-op since there already is a module named foo)" msgstr "" +"bar importa a foo (lo cual no es una opción ya que ya hay un módulo que se " +"llama foo)" #: ../Doc/faq/programming.rst:1819 msgid "bar.foo_var = foo.foo_var" -msgstr "" +msgstr "bar.foo_var = foo.foo_var" #: ../Doc/faq/programming.rst:1821 msgid "" "The last step fails, because Python isn't done with interpreting ``foo`` yet " "and the global symbol dictionary for ``foo`` is still empty." msgstr "" +"El último paso falla debido a que Python todavía no ha terminado de " +"interpretar a ``foo`` y el diccionario de símbolos global para ``foo`` " +"todavía se encuentra vacío." #: ../Doc/faq/programming.rst:1824 msgid "" "The same thing happens when you use ``import foo``, and then try to access " "``foo.foo_var`` in global code." msgstr "" +"Lo mismo ocurre cuando usas ``import foo`` y luego tratas de acceder a ``foo." +"foo_var`` en un código global." #: ../Doc/faq/programming.rst:1827 msgid "There are (at least) three possible workarounds for this problem." -msgstr "" +msgstr "Existen (al menos) tres posibles soluciones para este problema." #: ../Doc/faq/programming.rst:1829 msgid "" @@ -2052,58 +2858,77 @@ msgid "" "only. This means everything from an imported module is referenced as " "``.``." msgstr "" +"Guido van Rossum recomienda evitar todos los usos de ``from " +"import ...``, y colocar todo el código dentro de funciones. La " +"inicialización de variables globales y variables de clase debería usar " +"únicamente constantes o funciones incorporadas . Esto significa que todo se " +"referenciará como ``.`` desde un módulo importado." #: ../Doc/faq/programming.rst:1834 msgid "" "Jim Roskind suggests performing steps in the following order in each module:" msgstr "" +"Jim Roskind sugiere realizar los siguientes pasos en el siguiente orden en " +"cada módulo:" #: ../Doc/faq/programming.rst:1836 msgid "" "exports (globals, functions, and classes that don't need imported base " "classes)" msgstr "" +"exportar (*globals*, funciones y clases que no necesitan clases bases " +"importadas)" #: ../Doc/faq/programming.rst:1838 msgid "``import`` statements" -msgstr "" +msgstr "``import`` declaraciones" #: ../Doc/faq/programming.rst:1839 msgid "" "active code (including globals that are initialized from imported values)." msgstr "" +"código activo (incluyendo *globals* que han sido inicializados desde valores " +"importados)." #: ../Doc/faq/programming.rst:1841 msgid "" "van Rossum doesn't like this approach much because the imports appear in a " "strange place, but it does work." msgstr "" +"este enfoque no le gusta mucho a van Rossum debido a que los import aparecen " +"en lugares extraños, pero funciona." #: ../Doc/faq/programming.rst:1844 msgid "" "Matthias Urlichs recommends restructuring your code so that the recursive " "import is not necessary in the first place." msgstr "" +"Matthias Urlichs recomienda reestructurar tu código de tal forma que un " +"import recursivo no sea necesario." #: ../Doc/faq/programming.rst:1847 msgid "These solutions are not mutually exclusive." -msgstr "" +msgstr "Estas soluciones no son mutuamente excluyentes." #: ../Doc/faq/programming.rst:1851 msgid "__import__('x.y.z') returns ; how do I get z?" -msgstr "" +msgstr "__import__('x.y.z') devuelve ; ¿cómo puedo obtener z?" #: ../Doc/faq/programming.rst:1853 msgid "" "Consider using the convenience function :func:`~importlib.import_module` " "from :mod:`importlib` instead::" msgstr "" +"Considera, en su lugar, usa la función de conveniencia :func:`~importlib." +"import_module` de :mod:`importlib`::" #: ../Doc/faq/programming.rst:1860 msgid "" "When I edit an imported module and reimport it, the changes don't show up. " "Why does this happen?" msgstr "" +"Cuando edito un módulo importado y lo reimporto los cambios no tienen " +"efecto. ¿Por qué sucede esto?" #: ../Doc/faq/programming.rst:1862 msgid "" @@ -2113,6 +2938,12 @@ msgid "" "module, the basic module would be parsed and re-parsed many times. To force " "re-reading of a changed module, do this::" msgstr "" +"Por razones de eficiencia además de por consistencia, Python solo lee el " +"fichero del módulo la primera vez que el módulo se importa. Si no lo " +"hiciera así, un programa escrito en muchos módulos donde cada módulo importa " +"al mismo módulo básico estaría analizando sintácticamente el mismo módulo " +"básico muchas veces. Para forzar una relectura de un módulo que ha sido " +"modificado haz lo siguiente::" #: ../Doc/faq/programming.rst:1872 #, python-format @@ -2120,6 +2951,8 @@ msgid "" "Warning: this technique is not 100% fool-proof. In particular, modules " "containing statements like ::" msgstr "" +"Alerta: esta técnica no es 100% segura. En particular, los módulos que " +"contienen declaraciones como ::" #: ../Doc/faq/programming.rst:1877 msgid "" @@ -2128,9 +2961,15 @@ msgid "" "updated to use the new class definition. This can result in the following " "paradoxical behaviour::" msgstr "" +"continuarán funcionando con la versión antigua de los objetos importados. " +"Si el módulo contiene definiciones de clase, instancias de clase ya " +"existentes *no* se actualizarán para usar la nueva definición de la clase. " +"Esto podría resultar en el comportamiento paradójico siguiente::" #: ../Doc/faq/programming.rst:1890 msgid "" "The nature of the problem is made clear if you print out the \"identity\" of " "the class objects::" msgstr "" +"La naturaleza del problema se hace evidente si muestras la \"identity\" de " +"los objetos clase::"