/
extending.po
2018 lines (1860 loc) · 106 KB
/
extending.po
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
# Copyright (C) 2001-2020, Python Software Foundation
# This file is distributed under the same license as the Python package.
# Maintained by the python-doc-es workteam.
# docs-es@python.org /
# https://mail.python.org/mailman3/lists/docs-es.python.org/
# Check https://github.com/python/python-docs-es/blob/3.8/TRANSLATORS to
# get the list of volunteers
#
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: 2020-06-26 16:26+0200\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"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"Last-Translator: Cristián Maureira-Fredes <cmaureirafredes@gmail.com>\n"
"Language: es\n"
"X-Generator: Poedit 2.3\n"
#: ../Doc/extending/extending.rst:8
msgid "Extending Python with C or C++"
msgstr "Extendiendo Python con C o C++"
#: ../Doc/extending/extending.rst:10
msgid ""
"It is quite easy to add new built-in modules to Python, if you know how to "
"program in C. Such :dfn:`extension modules` can do two things that can't be "
"done directly in Python: they can implement new built-in object types, and "
"they can call C library functions and system calls."
msgstr ""
"Es muy fácil agregar nuevos módulos incorporados a Python, si sabe cómo "
"programar en C. Tales como :dfn:`módulos de extensión` pueden hacer dos "
"cosas que no se pueden hacer directamente en Python: pueden implementar "
"nuevos tipos objetos incorporados, y pueden llamar a funciones de biblioteca "
"C y llamadas de sistema."
#: ../Doc/extending/extending.rst:15
msgid ""
"To support extensions, the Python API (Application Programmers Interface) "
"defines a set of functions, macros and variables that provide access to most "
"aspects of the Python run-time system. The Python API is incorporated in a "
"C source file by including the header ``\"Python.h\"``."
msgstr ""
"Para admitir extensiones, la API de Python (interfaz de programadores de "
"aplicaciones) define un conjunto de funciones, macros y variables que "
"proporcionan acceso a la mayoría de los aspectos del sistema de tiempo de "
"ejecución de Python. La API de Python se incorpora en un archivo fuente C "
"incluyendo el encabezado ``\"Python.h\"``."
#: ../Doc/extending/extending.rst:20
msgid ""
"The compilation of an extension module depends on its intended use as well "
"as on your system setup; details are given in later chapters."
msgstr ""
"La compilación de un módulo de extensión depende de su uso previsto, así "
"como de la configuración de su sistema; los detalles se dan en capítulos "
"posteriores."
#: ../Doc/extending/extending.rst:25
msgid ""
"The C extension interface is specific to CPython, and extension modules do "
"not work on other Python implementations. In many cases, it is possible to "
"avoid writing C extensions and preserve portability to other "
"implementations. For example, if your use case is calling C library "
"functions or system calls, you should consider using the :mod:`ctypes` "
"module or the `cffi <https://cffi.readthedocs.io/>`_ library rather than "
"writing custom C code. These modules let you write Python code to interface "
"with C code and are more portable between implementations of Python than "
"writing and compiling a C extension module."
msgstr ""
"La interfaz de extensión C es específica de CPython, y los módulos de "
"extensión no funcionan en otras implementaciones de Python. En muchos casos, "
"es posible evitar escribir extensiones C y preservar la portabilidad a otras "
"implementaciones. Por ejemplo, si su caso de uso es llamar a funciones de "
"biblioteca C o llamadas de sistema, debería considerar usar el módulo :mod:"
"`ctypes` o la biblioteca `cffi <https://cffi.readthedocs.io/>`_ en lugar de "
"escribir código personalizado C. Estos módulos le permiten escribir código "
"Python para interactuar con el código C y son más portátiles entre las "
"implementaciones de Python que escribir y compilar un módulo de extensión C."
#: ../Doc/extending/extending.rst:40
msgid "A Simple Example"
msgstr "Un ejemplo simple"
#: ../Doc/extending/extending.rst:42
msgid ""
"Let's create an extension module called ``spam`` (the favorite food of Monty "
"Python fans...) and let's say we want to create a Python interface to the C "
"library function :c:func:`system` [#]_. This function takes a null-"
"terminated character string as argument and returns an integer. We want "
"this function to be callable from Python as follows:"
msgstr ""
"Creemos un módulo de extensión llamado ``spam`` (la comida favorita de los "
"fanáticos de Monty Python ...) y digamos que queremos crear una interfaz de "
"Python para la función de biblioteca C :c:func:`system` [#]_ . Esta función "
"toma una cadena de caracteres con terminación nula como argumento y retorna "
"un entero. Queremos que esta función se pueda llamar desde Python de la "
"siguiente manera:"
#: ../Doc/extending/extending.rst:53
msgid ""
"Begin by creating a file :file:`spammodule.c`. (Historically, if a module "
"is called ``spam``, the C file containing its implementation is called :file:"
"`spammodule.c`; if the module name is very long, like ``spammify``, the "
"module name can be just :file:`spammify.c`.)"
msgstr ""
"Comience creando un archivo :file:`spammodule.c`. (Históricamente, si un "
"módulo se llama ``spam``, el archivo C que contiene su implementación se "
"llama :file:`spammodule.c`; si el nombre del módulo es muy largo, como "
"``spammify``, el nombre del módulo puede sea solo :file:`spammify.c`.)"
#: ../Doc/extending/extending.rst:58
msgid "The first two lines of our file can be::"
msgstr "Las dos primeras líneas de nuestro archivo pueden ser::"
#: ../Doc/extending/extending.rst:63
msgid ""
"which pulls in the Python API (you can add a comment describing the purpose "
"of the module and a copyright notice if you like)."
msgstr ""
"que extrae la API de Python (puede agregar un comentario que describa el "
"propósito del módulo y un aviso de copyright si lo desea)."
#: ../Doc/extending/extending.rst:68
msgid ""
"Since Python may define some pre-processor definitions which affect the "
"standard headers on some systems, you *must* include :file:`Python.h` before "
"any standard headers are included."
msgstr ""
"Dado que Python puede definir algunas definiciones de preprocesador que "
"afectan los encabezados estándar en algunos sistemas, *debe* incluir :file:"
"`Python.h` antes de incluir encabezados estándar."
#: ../Doc/extending/extending.rst:72
msgid ""
"It is recommended to always define ``PY_SSIZE_T_CLEAN`` before including "
"``Python.h``. See :ref:`parsetuple` for a description of this macro."
msgstr ""
"Se recomienda definir siempre ``PY_SSIZE_T_CLEAN`` antes de incluir ``Python."
"h``. Consulte :ref:`parsetuple` para obtener una descripción de esta macro."
#: ../Doc/extending/extending.rst:75
msgid ""
"All user-visible symbols defined by :file:`Python.h` have a prefix of ``Py`` "
"or ``PY``, except those defined in standard header files. For convenience, "
"and since they are used extensively by the Python interpreter, ``\"Python.h"
"\"`` includes a few standard header files: ``<stdio.h>``, ``<string.h>``, "
"``<errno.h>``, and ``<stdlib.h>``. If the latter header file does not exist "
"on your system, it declares the functions :c:func:`malloc`, :c:func:`free` "
"and :c:func:`realloc` directly."
msgstr ""
"Todos los símbolos visibles para el usuario definidos por :file:`Python.h` "
"tienen un prefijo ``Py`` o ``PY``, excepto los definidos en los archivos de "
"encabezado estándar. Por conveniencia, y dado que el intérprete de Python "
"los usa ampliamente, ``\"Python.h\"`` incluye algunos archivos de encabezado "
"estándar: ``<stdio.h>``, ``<string.h>``, ``<errno.h>``, y ``<stdlib.h>``. Si "
"el último archivo de encabezado no existe en su sistema, declara las "
"funciones :c:func:`malloc`, :c:func:`free` y :c:func:`realloc` directamente."
#: ../Doc/extending/extending.rst:83
msgid ""
"The next thing we add to our module file is the C function that will be "
"called when the Python expression ``spam.system(string)`` is evaluated "
"(we'll see shortly how it ends up being called)::"
msgstr ""
"Lo siguiente que agregamos a nuestro archivo de módulo es la función C que "
"se llamará cuando se evalúe la expresión Python ``spam.system(string)`` "
"(veremos en breve cómo termina siendo llamado)::"
#: ../Doc/extending/extending.rst:99
msgid ""
"There is a straightforward translation from the argument list in Python (for "
"example, the single expression ``\"ls -l\"``) to the arguments passed to the "
"C function. The C function always has two arguments, conventionally named "
"*self* and *args*."
msgstr ""
"Hay una traducción directa de la lista de argumentos en Python (por ejemplo, "
"la única expresión ``\"ls -l\"``) a los argumentos pasados a la función C. "
"La función C siempre tiene dos argumentos, llamados convencionalmente *self* "
"y *args*."
#: ../Doc/extending/extending.rst:104
msgid ""
"The *self* argument points to the module object for module-level functions; "
"for a method it would point to the object instance."
msgstr ""
"El argumento *self* apunta al objeto del módulo para funciones a nivel de "
"módulo; para un método apuntaría a la instancia del objeto."
#: ../Doc/extending/extending.rst:107
msgid ""
"The *args* argument will be a pointer to a Python tuple object containing "
"the arguments. Each item of the tuple corresponds to an argument in the "
"call's argument list. The arguments are Python objects --- in order to do "
"anything with them in our C function we have to convert them to C values. "
"The function :c:func:`PyArg_ParseTuple` in the Python API checks the "
"argument types and converts them to C values. It uses a template string to "
"determine the required types of the arguments as well as the types of the C "
"variables into which to store the converted values. More about this later."
msgstr ""
"El argumento *args* será un puntero a un objeto de tupla de Python que "
"contiene los argumentos. Cada elemento de la tupla corresponde a un "
"argumento en la lista de argumentos de la llamada. Los argumentos son "
"objetos de Python --- para hacer algo con ellos en nuestra función C tenemos "
"que convertirlos a valores C. La función :c:func:`PyArg_ParseTuple` en la "
"API de Python verifica los tipos de argumento y los convierte a valores C. "
"Utiliza una cadena de plantilla para determinar los tipos requeridos de los "
"argumentos, así como los tipos de las variables C en las que almacenar los "
"valores convertidos. Más sobre esto más tarde."
#: ../Doc/extending/extending.rst:116
msgid ""
":c:func:`PyArg_ParseTuple` returns true (nonzero) if all arguments have the "
"right type and its components have been stored in the variables whose "
"addresses are passed. It returns false (zero) if an invalid argument list "
"was passed. In the latter case it also raises an appropriate exception so "
"the calling function can return ``NULL`` immediately (as we saw in the "
"example)."
msgstr ""
":c:func:`PyArg_ParseTuple` retorna verdadero (distinto de cero) si todos los "
"argumentos tienen el tipo correcto y sus componentes se han almacenado en "
"las variables cuyas direcciones se pasan. Retorna falso (cero) si se pasó "
"una lista de argumentos no válidos. En el último caso, también genera una "
"excepción apropiada para que la función de llamada pueda retornar ``NULL`` "
"inmediatamente (como vimos en el ejemplo)."
#: ../Doc/extending/extending.rst:126
msgid "Intermezzo: Errors and Exceptions"
msgstr "Intermezzo: errores y excepciones"
#: ../Doc/extending/extending.rst:128
msgid ""
"An important convention throughout the Python interpreter is the following: "
"when a function fails, it should set an exception condition and return an "
"error value (usually a ``NULL`` pointer). Exceptions are stored in a static "
"global variable inside the interpreter; if this variable is ``NULL`` no "
"exception has occurred. A second global variable stores the \"associated "
"value\" of the exception (the second argument to :keyword:`raise`). A third "
"variable contains the stack traceback in case the error originated in Python "
"code. These three variables are the C equivalents of the result in Python "
"of :meth:`sys.exc_info` (see the section on module :mod:`sys` in the Python "
"Library Reference). It is important to know about them to understand how "
"errors are passed around."
msgstr ""
"Una convención importante en todo el intérprete de Python es la siguiente: "
"cuando una función falla, debe establecer una condición de excepción y "
"retornar un valor de error (generalmente un puntero ``NULL``). Las "
"excepciones se almacenan en una variable global estática dentro del "
"intérprete; Si esta variable es ``NULL``, no se ha producido ninguna "
"excepción. Una segunda variable global almacena el \"valor asociado\" de la "
"excepción (el segundo argumento para :keyword:`raise`). Una tercera variable "
"contiene el seguimiento de la pila en caso de que el error se origine en el "
"código Python. Estas tres variables son los equivalentes en C del resultado "
"en Python de :meth:`sys.exc_info` (consulte la sección sobre el módulo :mod:"
"`sys` en la Referencia de la biblioteca de Python). Es importante conocerlos "
"para comprender cómo se transmiten los errores."
#: ../Doc/extending/extending.rst:139
msgid ""
"The Python API defines a number of functions to set various types of "
"exceptions."
msgstr ""
"La API de Python define una serie de funciones para establecer varios tipos "
"de excepciones."
#: ../Doc/extending/extending.rst:141
msgid ""
"The most common one is :c:func:`PyErr_SetString`. Its arguments are an "
"exception object and a C string. The exception object is usually a "
"predefined object like :c:data:`PyExc_ZeroDivisionError`. The C string "
"indicates the cause of the error and is converted to a Python string object "
"and stored as the \"associated value\" of the exception."
msgstr ""
"El más común es :c:func:`PyErr_SetString`. Sus argumentos son un objeto de "
"excepción y una cadena C. El objeto de excepción suele ser un objeto "
"predefinido como :c:data:`PyExc_ZeroDivisionError`. La cadena C indica la "
"causa del error y se convierte en un objeto de cadena Python y se almacena "
"como el \"valor asociado\" de la excepción."
#: ../Doc/extending/extending.rst:147
msgid ""
"Another useful function is :c:func:`PyErr_SetFromErrno`, which only takes an "
"exception argument and constructs the associated value by inspection of the "
"global variable :c:data:`errno`. The most general function is :c:func:"
"`PyErr_SetObject`, which takes two object arguments, the exception and its "
"associated value. You don't need to :c:func:`Py_INCREF` the objects passed "
"to any of these functions."
msgstr ""
"Otra función útil es :c:func:`PyErr_SetFromErrno`, que solo toma un "
"argumento de excepción y construye el valor asociado mediante la inspección "
"de la variable global :c:data:`errno`. La función más general es :c:func:"
"`PyErr_SetObject`, que toma dos argumentos de objeto, la excepción y su "
"valor asociado. No necesita :c:func:`Py_INCREF` los objetos pasados a "
"cualquiera de estas funciones."
#: ../Doc/extending/extending.rst:154
msgid ""
"You can test non-destructively whether an exception has been set with :c:"
"func:`PyErr_Occurred`. This returns the current exception object, or "
"``NULL`` if no exception has occurred. You normally don't need to call :c:"
"func:`PyErr_Occurred` to see whether an error occurred in a function call, "
"since you should be able to tell from the return value."
msgstr ""
"Puede probar de forma no destructiva si se ha establecido una excepción con :"
"c:func:`PyErr_Occurred`. Esto retorna el objeto de excepción actual o "
"``NULL`` si no se ha producido ninguna excepción. Normalmente no necesita "
"llamar a :c:func:`PyErr_Occurred` para ver si se produjo un error en una "
"llamada a la función, ya que debería poder distinguir el valor de retorno."
#: ../Doc/extending/extending.rst:160
msgid ""
"When a function *f* that calls another function *g* detects that the latter "
"fails, *f* should itself return an error value (usually ``NULL`` or "
"``-1``). It should *not* call one of the :c:func:`PyErr_\\*` functions --- "
"one has already been called by *g*. *f*'s caller is then supposed to also "
"return an error indication to *its* caller, again *without* calling :c:func:"
"`PyErr_\\*`, and so on --- the most detailed cause of the error was already "
"reported by the function that first detected it. Once the error reaches the "
"Python interpreter's main loop, this aborts the currently executing Python "
"code and tries to find an exception handler specified by the Python "
"programmer."
msgstr ""
"Cuando una función *f* que llama a otra función *g* detecta que la última "
"falla, *f* debería retornar un valor de error (generalmente ``NULL`` o "
"``-1``). Debería *no* llamar a una de las funciones :c:func:`PyErr_\\*` --- "
"una ya ha sido llamada por *g*. Se supone que la persona que llama *f* "
"también debe retornar una indicación de error a *su* persona que llama, de "
"nuevo *sin* llamar :c:func:`PyErr_\\*`, y así sucesivamente --- la causa más "
"detallada del error ya fue informado por la función que lo detectó por "
"primera vez. Una vez que el error llega al bucle principal del intérprete de "
"Python, esto anula el código de Python que se está ejecutando actualmente e "
"intenta encontrar un controlador de excepción especificado por el "
"programador de Python."
#: ../Doc/extending/extending.rst:170
msgid ""
"(There are situations where a module can actually give a more detailed error "
"message by calling another :c:func:`PyErr_\\*` function, and in such cases "
"it is fine to do so. As a general rule, however, this is not necessary, and "
"can cause information about the cause of the error to be lost: most "
"operations can fail for a variety of reasons.)"
msgstr ""
"(Hay situaciones en las que un módulo puede dar un mensaje de error más "
"detallado llamando a otra función :c:func:`PyErr_\\*`, y en tales casos está "
"bien hacerlo. Como regla general, sin embargo, esto es no es necesario y "
"puede causar que se pierda información sobre la causa del error: la mayoría "
"de las operaciones pueden fallar por varias razones.)"
#: ../Doc/extending/extending.rst:176
msgid ""
"To ignore an exception set by a function call that failed, the exception "
"condition must be cleared explicitly by calling :c:func:`PyErr_Clear`. The "
"only time C code should call :c:func:`PyErr_Clear` is if it doesn't want to "
"pass the error on to the interpreter but wants to handle it completely by "
"itself (possibly by trying something else, or pretending nothing went wrong)."
msgstr ""
"Para ignorar una excepción establecida por una llamada de función que falló, "
"la condición de excepción debe borrarse explícitamente llamando a :c:func:"
"`PyErr_Clear`. La única vez que el código C debe llamar :c:func:"
"`PyErr_Clear` es si no quiere pasar el error al intérprete pero quiere "
"manejarlo completamente por sí mismo (posiblemente probando algo más o "
"pretendiendo que nada salió mal) )"
#: ../Doc/extending/extending.rst:182
msgid ""
"Every failing :c:func:`malloc` call must be turned into an exception --- the "
"direct caller of :c:func:`malloc` (or :c:func:`realloc`) must call :c:func:"
"`PyErr_NoMemory` and return a failure indicator itself. All the object-"
"creating functions (for example, :c:func:`PyLong_FromLong`) already do this, "
"so this note is only relevant to those who call :c:func:`malloc` directly."
msgstr ""
"Cada llamada fallida a :c:func:`malloc` debe convertirse en una excepción "
"--- la persona que llama directamente de :c:func:`malloc` (o :c:func:"
"`realloc`) debe llamar :c:func:`PyErr_NoMemory` y retorna un indicador de "
"falla en sí mismo. Todas las funciones de creación de objetos (por ejemplo, :"
"c:func:`PyLong_FromLong`) ya hacen esto, por lo que esta nota solo es "
"relevante para aquellos que llaman :c:func:`malloc` directamente."
#: ../Doc/extending/extending.rst:188
msgid ""
"Also note that, with the important exception of :c:func:`PyArg_ParseTuple` "
"and friends, functions that return an integer status usually return a "
"positive value or zero for success and ``-1`` for failure, like Unix system "
"calls."
msgstr ""
"También tenga en cuenta que, con la importante excepción de :c:func:"
"`PyArg_ParseTuple` y sus amigos, las funciones que retornan un estado entero "
"generalmente retornan un valor positivo o cero para el éxito y ``-1`` para "
"el fracaso, como las llamadas al sistema Unix."
#: ../Doc/extending/extending.rst:192
msgid ""
"Finally, be careful to clean up garbage (by making :c:func:`Py_XDECREF` or :"
"c:func:`Py_DECREF` calls for objects you have already created) when you "
"return an error indicator!"
msgstr ""
"Finalmente, tenga cuidado de limpiar la basura (haciendo :c:func:"
"`Py_XDECREF` o :c:func:`Py_DECREF` requiere objetos que ya ha creado) cuando "
"retorna un indicador de error!"
#: ../Doc/extending/extending.rst:196
msgid ""
"The choice of which exception to raise is entirely yours. There are "
"predeclared C objects corresponding to all built-in Python exceptions, such "
"as :c:data:`PyExc_ZeroDivisionError`, which you can use directly. Of course, "
"you should choose exceptions wisely --- don't use :c:data:`PyExc_TypeError` "
"to mean that a file couldn't be opened (that should probably be :c:data:"
"`PyExc_IOError`). If something's wrong with the argument list, the :c:func:"
"`PyArg_ParseTuple` function usually raises :c:data:`PyExc_TypeError`. If "
"you have an argument whose value must be in a particular range or must "
"satisfy other conditions, :c:data:`PyExc_ValueError` is appropriate."
msgstr ""
"La elección de qué excepción lanzar es totalmente suya. Hay objetos C "
"declarados previamente que corresponden a todas las excepciones de Python "
"incorporadas, como :c:data:`PyExc_ZeroDivisionError`, que puede usar "
"directamente. Por supuesto, debe elegir sabiamente las excepciones --- no "
"use :c:data:`PyExc_TypeError` para significar que no se puede abrir un "
"archivo (probablemente debería ser :c:data:`PyExc_IOError`). Si algo anda "
"mal con la lista de argumentos, la función :c:func:`PyArg_ParseTuple` "
"generalmente genera :c:data:`PyExc_TypeError`. Si tiene un argumento cuyo "
"valor debe estar en un rango particular o debe satisfacer otras "
"condiciones, :c:data:`PyExc_ValueError` es apropiado."
#: ../Doc/extending/extending.rst:206
msgid ""
"You can also define a new exception that is unique to your module. For this, "
"you usually declare a static object variable at the beginning of your file::"
msgstr ""
"También puede definir una nueva excepción que sea exclusiva de su módulo. "
"Para esto, generalmente declara una variable de objeto estático al comienzo "
"de su archivo::"
#: ../Doc/extending/extending.rst:211
msgid ""
"and initialize it in your module's initialization function (:c:func:"
"`PyInit_spam`) with an exception object::"
msgstr ""
"y lo inicializa en la función de inicialización de su módulo (:c:func:"
"`PyInit_spam`) con un objeto de excepción::"
#: ../Doc/extending/extending.rst:235
msgid ""
"Note that the Python name for the exception object is :exc:`spam.error`. "
"The :c:func:`PyErr_NewException` function may create a class with the base "
"class being :exc:`Exception` (unless another class is passed in instead of "
"``NULL``), described in :ref:`bltin-exceptions`."
msgstr ""
"Tenga en cuenta que el nombre de Python para el objeto de excepción es :exc:"
"`spam.error`. La función :c:func:`PyErr_NewException` puede crear una clase "
"con la clase base siendo :exc:`Exception` (a menos que se pase otra clase en "
"lugar de ``NULL``), descrita en :ref:`bltin-exceptions`."
#: ../Doc/extending/extending.rst:240
msgid ""
"Note also that the :c:data:`SpamError` variable retains a reference to the "
"newly created exception class; this is intentional! Since the exception "
"could be removed from the module by external code, an owned reference to the "
"class is needed to ensure that it will not be discarded, causing :c:data:"
"`SpamError` to become a dangling pointer. Should it become a dangling "
"pointer, C code which raises the exception could cause a core dump or other "
"unintended side effects."
msgstr ""
"Tenga en cuenta también que la variable :c:data:`SpamError` retiene una "
"referencia a la clase de excepción recién creada; esto es intencional! Como "
"la excepción podría eliminarse del módulo mediante un código externo, se "
"necesita una referencia propia de la clase para garantizar que no se "
"descarte, lo que hace que :c:data:`SpamError` se convierta en un puntero "
"colgante. Si se convierte en un puntero colgante, el código C que genera la "
"excepción podría causar un volcado del núcleo u otros efectos secundarios no "
"deseados."
#: ../Doc/extending/extending.rst:247
msgid ""
"We discuss the use of ``PyMODINIT_FUNC`` as a function return type later in "
"this sample."
msgstr ""
"Discutimos el uso de ``PyMODINIT_FUNC`` como un tipo de retorno de función "
"más adelante en esta muestra."
#: ../Doc/extending/extending.rst:250
msgid ""
"The :exc:`spam.error` exception can be raised in your extension module using "
"a call to :c:func:`PyErr_SetString` as shown below::"
msgstr ""
"La excepción :exc:`spam.error` se puede generar en su módulo de extensión "
"mediante una llamada a :c:func:`PyErr_SetString` como se muestra a "
"continuación::"
#: ../Doc/extending/extending.rst:273
msgid "Back to the Example"
msgstr "De vuelta al ejemplo"
#: ../Doc/extending/extending.rst:275
msgid ""
"Going back to our example function, you should now be able to understand "
"this statement::"
msgstr ""
"Volviendo a nuestra función de ejemplo, ahora debería poder comprender esta "
"declaración::"
#: ../Doc/extending/extending.rst:281
msgid ""
"It returns ``NULL`` (the error indicator for functions returning object "
"pointers) if an error is detected in the argument list, relying on the "
"exception set by :c:func:`PyArg_ParseTuple`. Otherwise the string value of "
"the argument has been copied to the local variable :c:data:`command`. This "
"is a pointer assignment and you are not supposed to modify the string to "
"which it points (so in Standard C, the variable :c:data:`command` should "
"properly be declared as ``const char *command``)."
msgstr ""
"Retorna ``NULL`` (el indicador de error para las funciones que retornan "
"punteros de objeto) si se detecta un error en la lista de argumentos, "
"basándose en la excepción establecida por :c:func:`PyArg_ParseTuple`. De lo "
"contrario, el valor de cadena del argumento se ha copiado en la variable "
"local :c:data:`command`. Esta es una asignación de puntero y no se supone "
"que modifique la cadena a la que apunta (por lo tanto, en el Estándar C, la "
"variable :c:data:`command` debería declararse correctamente como ``const "
"char * command``)."
#: ../Doc/extending/extending.rst:289
msgid ""
"The next statement is a call to the Unix function :c:func:`system`, passing "
"it the string we just got from :c:func:`PyArg_ParseTuple`::"
msgstr ""
"La siguiente declaración es una llamada a la función Unix :c:func:`system`, "
"pasándole la cadena que acabamos de obtener de :c:func:`PyArg_ParseTuple`::"
#: ../Doc/extending/extending.rst:294
msgid ""
"Our :func:`spam.system` function must return the value of :c:data:`sts` as a "
"Python object. This is done using the function :c:func:`PyLong_FromLong`. ::"
msgstr ""
"Nuestra función :func:`spam.system` debe retornar el valor de :c:data:`sts` "
"como un objeto Python. Esto se hace usando la función :c:func:"
"`PyLong_FromLong`. ::"
#: ../Doc/extending/extending.rst:299
msgid ""
"In this case, it will return an integer object. (Yes, even integers are "
"objects on the heap in Python!)"
msgstr ""
"En este caso, retornará un objeto entero. (Sí, ¡incluso los enteros son "
"objetos en el montículo (*heap*) en Python!)"
#: ../Doc/extending/extending.rst:302
msgid ""
"If you have a C function that returns no useful argument (a function "
"returning :c:type:`void`), the corresponding Python function must return "
"``None``. You need this idiom to do so (which is implemented by the :c:"
"macro:`Py_RETURN_NONE` macro)::"
msgstr ""
"Si tiene una función C que no retorna ningún argumento útil (una función que "
"retorna :c:type:`void`), la función Python correspondiente debe retornar "
"``None``. Necesita este modismo para hacerlo (que se implementa mediante la "
"macro :c:macro:`Py_RETURN_NONE`)::"
#: ../Doc/extending/extending.rst:310
msgid ""
":c:data:`Py_None` is the C name for the special Python object ``None``. It "
"is a genuine Python object rather than a ``NULL`` pointer, which means "
"\"error\" in most contexts, as we have seen."
msgstr ""
":c:data:`Py_None` es el nombre C para el objeto especial de Python ``None``. "
"Es un objeto genuino de Python en lugar de un puntero ``NULL``, que "
"significa \"error\" en la mayoría de los contextos, como hemos visto."
#: ../Doc/extending/extending.rst:318
msgid "The Module's Method Table and Initialization Function"
msgstr "La tabla de métodos del módulo y la función de inicialización"
#: ../Doc/extending/extending.rst:320
msgid ""
"I promised to show how :c:func:`spam_system` is called from Python programs. "
"First, we need to list its name and address in a \"method table\"::"
msgstr ""
"Prometí mostrar cómo :c:func:`spam_system` se llama desde los programas de "
"Python. Primero, necesitamos enumerar su nombre y dirección en una \"tabla "
"de métodos\"::"
#: ../Doc/extending/extending.rst:331
msgid ""
"Note the third entry (``METH_VARARGS``). This is a flag telling the "
"interpreter the calling convention to be used for the C function. It should "
"normally always be ``METH_VARARGS`` or ``METH_VARARGS | METH_KEYWORDS``; a "
"value of ``0`` means that an obsolete variant of :c:func:`PyArg_ParseTuple` "
"is used."
msgstr ""
"Tenga en cuenta la tercera entrada (``METH_VARARGS``). Esta es una bandera "
"que le dice al intérprete la convención de llamada que se utilizará para la "
"función C. Normalmente debería ser siempre ``METH_VARARGS`` o ``METH_VARARGS "
"| METH_KEYWORDS``; un valor de ``0`` significa que se usa una variante "
"obsoleta de :c:func:`PyArg_ParseTuple`."
#: ../Doc/extending/extending.rst:336
msgid ""
"When using only ``METH_VARARGS``, the function should expect the Python-"
"level parameters to be passed in as a tuple acceptable for parsing via :c:"
"func:`PyArg_ParseTuple`; more information on this function is provided below."
msgstr ""
"Cuando se usa solo ``METH_VARARGS``, la función debe esperar que los "
"parámetros a nivel de Python se pasen como una tupla aceptable para el "
"análisis mediante :c:func:`PyArg_ParseTuple`; A continuación se proporciona "
"más información sobre esta función."
#: ../Doc/extending/extending.rst:340
msgid ""
"The :const:`METH_KEYWORDS` bit may be set in the third field if keyword "
"arguments should be passed to the function. In this case, the C function "
"should accept a third ``PyObject *`` parameter which will be a dictionary of "
"keywords. Use :c:func:`PyArg_ParseTupleAndKeywords` to parse the arguments "
"to such a function."
msgstr ""
"El bit :const:`METH_KEYWORDS` se puede establecer en el tercer campo si se "
"deben pasar argumentos de palabras clave a la función. En este caso, la "
"función C debería aceptar un tercer parámetro ``PyObject *`` que será un "
"diccionario de palabras clave. Use :c:func:`PyArg_ParseTupleAndKeywords` "
"para analizar los argumentos de dicha función."
#: ../Doc/extending/extending.rst:346
msgid ""
"The method table must be referenced in the module definition structure::"
msgstr ""
"La tabla de métodos debe ser referenciada en la estructura de definición del "
"módulo::"
#: ../Doc/extending/extending.rst:357
msgid ""
"This structure, in turn, must be passed to the interpreter in the module's "
"initialization function. The initialization function must be named :c:func:"
"`PyInit_name`, where *name* is the name of the module, and should be the "
"only non-\\ ``static`` item defined in the module file::"
msgstr ""
"Esta estructura, a su vez, debe pasarse al intérprete en la función de "
"inicialización del módulo. La función de inicialización debe llamarse :c:"
"func:`PyInit_name`, donde *name* es el nombre del módulo y debe ser el único "
"elemento no ``static`` definido en el archivo del módulo::"
#: ../Doc/extending/extending.rst:368
msgid ""
"Note that PyMODINIT_FUNC declares the function as ``PyObject *`` return "
"type, declares any special linkage declarations required by the platform, "
"and for C++ declares the function as ``extern \"C\"``."
msgstr ""
"Tenga en cuenta que PyMODINIT_FUNC declara la función como ``PyObject *`` "
"tipo de retorno, declara cualquier declaración de vinculación especial "
"requerida por la plataforma, y para C++ declara la función como ``extern \"C"
"\"``."
#: ../Doc/extending/extending.rst:372
msgid ""
"When the Python program imports module :mod:`spam` for the first time, :c:"
"func:`PyInit_spam` is called. (See below for comments about embedding "
"Python.) It calls :c:func:`PyModule_Create`, which returns a module object, "
"and inserts built-in function objects into the newly created module based "
"upon the table (an array of :c:type:`PyMethodDef` structures) found in the "
"module definition. :c:func:`PyModule_Create` returns a pointer to the module "
"object that it creates. It may abort with a fatal error for certain errors, "
"or return ``NULL`` if the module could not be initialized satisfactorily. "
"The init function must return the module object to its caller, so that it "
"then gets inserted into ``sys.modules``."
msgstr ""
"Cuando el programa Python importa el módulo :mod:`spam` por primera vez, se "
"llama :c:func:`PyInit_spam`. (Consulte a continuación los comentarios sobre "
"la incorporación de Python). Llama a :c:func:`PyModule_Create`, que retorna "
"un objeto de módulo e inserta objetos de función incorporados en el módulo "
"recién creado en función de la tabla (un arreglo de estructuras :c:type:"
"`PyMethodDef`) encontradas en la definición del módulo. :c:func:"
"`PyModule_Create` retorna un puntero al objeto del módulo que crea. Puede "
"abortar con un error fatal para ciertos errores, o retornar ``NULL`` si el "
"módulo no se pudo inicializar satisfactoriamente. La función *init* debe "
"retornar el objeto del módulo a su llamador, para que luego se inserte en "
"``sys.modules``."
#: ../Doc/extending/extending.rst:383
msgid ""
"When embedding Python, the :c:func:`PyInit_spam` function is not called "
"automatically unless there's an entry in the :c:data:`PyImport_Inittab` "
"table. To add the module to the initialization table, use :c:func:"
"`PyImport_AppendInittab`, optionally followed by an import of the module::"
msgstr ""
"Al incrustar Python, la función :c:func:`PyInit_spam` no se llama "
"automáticamente a menos que haya una entrada en la tabla :c:data:"
"`PyImport_Inittab`. Para agregar el módulo a la tabla de inicialización, "
"use :c:func:`PyImport_AppendInittab`, seguido opcionalmente por una "
"importación del módulo::"
#: ../Doc/extending/extending.rst:427
msgid ""
"Removing entries from ``sys.modules`` or importing compiled modules into "
"multiple interpreters within a process (or following a :c:func:`fork` "
"without an intervening :c:func:`exec`) can create problems for some "
"extension modules. Extension module authors should exercise caution when "
"initializing internal data structures."
msgstr ""
"Eliminar entradas de ``sys.modules`` o importar módulos compilados en "
"múltiples intérpretes dentro de un proceso (o seguir un :c:func:`fork` sin "
"una intervención :c:func:`exec`) puede crear problemas para algunas "
"extensiones de módulos. Los autores de módulos de extensiones deben tener "
"precaución al inicializar estructuras de datos internas."
#: ../Doc/extending/extending.rst:433
msgid ""
"A more substantial example module is included in the Python source "
"distribution as :file:`Modules/xxmodule.c`. This file may be used as a "
"template or simply read as an example."
msgstr ""
"Se incluye un módulo de ejemplo más sustancial en la distribución fuente de "
"Python como :file:`Modules/xxmodule.c`. Este archivo puede usarse como "
"plantilla o simplemente leerse como ejemplo."
#: ../Doc/extending/extending.rst:439
msgid ""
"Unlike our ``spam`` example, ``xxmodule`` uses *multi-phase initialization* "
"(new in Python 3.5), where a PyModuleDef structure is returned from "
"``PyInit_spam``, and creation of the module is left to the import machinery. "
"For details on multi-phase initialization, see :PEP:`489`."
msgstr ""
"A diferencia de nuestro ejemplo de ``spam``, ``xxmodule`` usa "
"*inicialización de múltiples fases* (nuevo en Python 3.5), donde se retorna "
"una estructura PyModuleDef de ``PyInit_spam``, y la creación del módulo se "
"deja al maquinaria de importación. Para obtener detalles sobre la "
"inicialización múltiples fases, consulte :PEP:`489`."
#: ../Doc/extending/extending.rst:448
msgid "Compilation and Linkage"
msgstr "Compilación y Enlazamiento"
#: ../Doc/extending/extending.rst:450
msgid ""
"There are two more things to do before you can use your new extension: "
"compiling and linking it with the Python system. If you use dynamic "
"loading, the details may depend on the style of dynamic loading your system "
"uses; see the chapters about building extension modules (chapter :ref:"
"`building`) and additional information that pertains only to building on "
"Windows (chapter :ref:`building-on-windows`) for more information about this."
msgstr ""
"Hay dos cosas más que hacer antes de que pueda usar su nueva extensión: "
"compilarla y vincularla con el sistema Python. Si usa carga dinámica, los "
"detalles pueden depender del estilo de carga dinámica que usa su sistema; "
"Para obtener más información al respecto, consulte los capítulos sobre la "
"creación de módulos de extensión (capítulo :ref:`building`) e información "
"adicional que se refiere solo a la construcción en Windows (capítulo :ref:"
"`building-on-windows`)."
#: ../Doc/extending/extending.rst:457
msgid ""
"If you can't use dynamic loading, or if you want to make your module a "
"permanent part of the Python interpreter, you will have to change the "
"configuration setup and rebuild the interpreter. Luckily, this is very "
"simple on Unix: just place your file (:file:`spammodule.c` for example) in "
"the :file:`Modules/` directory of an unpacked source distribution, add a "
"line to the file :file:`Modules/Setup.local` describing your file:"
msgstr ""
"Si no puede utilizar la carga dinámica, o si desea que su módulo sea una "
"parte permanente del intérprete de Python, tendrá que cambiar la "
"configuración (*setup*) y reconstruir el intérprete. Afortunadamente, esto "
"es muy simple en Unix: simplemente coloque su archivo (:file:`spammodule.c` "
"por ejemplo) en el directorio :file:`Modules/ ` de una distribución fuente "
"desempaquetada, agregue una línea al archivo :file:`Modules/Setup.local` que "
"describe su archivo:"
#: ../Doc/extending/extending.rst:468
msgid ""
"and rebuild the interpreter by running :program:`make` in the toplevel "
"directory. You can also run :program:`make` in the :file:`Modules/` "
"subdirectory, but then you must first rebuild :file:`Makefile` there by "
"running ':program:`make` Makefile'. (This is necessary each time you change "
"the :file:`Setup` file.)"
msgstr ""
"y reconstruya el intérprete ejecutando :program:`make` en el directorio de "
"nivel superior. También puede ejecutar :program:`make` en el subdirectorio :"
"file:`Modules/`, pero primero debe reconstruir :file:`Makefile` ejecutando ':"
"program:`make` Makefile'. (Esto es necesario cada vez que cambia el archivo :"
"file:`Configuración`)."
#: ../Doc/extending/extending.rst:474
msgid ""
"If your module requires additional libraries to link with, these can be "
"listed on the line in the configuration file as well, for instance:"
msgstr ""
"Si su módulo requiere bibliotecas adicionales para vincular, también se "
"pueden enumerar en la línea del archivo de configuración, por ejemplo:"
#: ../Doc/extending/extending.rst:485
msgid "Calling Python Functions from C"
msgstr "Llamando funciones Python desde C"
#: ../Doc/extending/extending.rst:487
msgid ""
"So far we have concentrated on making C functions callable from Python. The "
"reverse is also useful: calling Python functions from C. This is especially "
"the case for libraries that support so-called \"callback\" functions. If a "
"C interface makes use of callbacks, the equivalent Python often needs to "
"provide a callback mechanism to the Python programmer; the implementation "
"will require calling the Python callback functions from a C callback. Other "
"uses are also imaginable."
msgstr ""
"Hasta ahora nos hemos concentrado en hacer que las funciones de C puedan "
"llamarse desde Python. Lo contrario también es útil: llamar a las funciones "
"de Python desde C. Este es especialmente el caso de las bibliotecas que "
"admiten las llamadas funciones de \"retrollamada\". Si una interfaz C "
"utiliza retrollamadas, el Python equivalente a menudo necesita proporcionar "
"un mecanismo de retrollamada al programador de Python; la implementación "
"requerirá llamar a las funciones de retrollamada de Python desde una "
"retrollamada en C. Otros usos también son imaginables."
#: ../Doc/extending/extending.rst:495
msgid ""
"Fortunately, the Python interpreter is easily called recursively, and there "
"is a standard interface to call a Python function. (I won't dwell on how to "
"call the Python parser with a particular string as input --- if you're "
"interested, have a look at the implementation of the :option:`-c` command "
"line option in :file:`Modules/main.c` from the Python source code.)"
msgstr ""
"Afortunadamente, el intérprete de Python se llama fácilmente de forma "
"recursiva, y hay una interfaz estándar para llamar a una función de Python. "
"(No me detendré en cómo llamar al analizador Python con una cadena "
"particular como entrada --- si está interesado, eche un vistazo a la "
"implementación de la opción de línea de comando :option:`-c` en :file:"
"`Modules/main.c` del código fuente de Python.)"
#: ../Doc/extending/extending.rst:501
msgid ""
"Calling a Python function is easy. First, the Python program must somehow "
"pass you the Python function object. You should provide a function (or some "
"other interface) to do this. When this function is called, save a pointer "
"to the Python function object (be careful to :c:func:`Py_INCREF` it!) in a "
"global variable --- or wherever you see fit. For example, the following "
"function might be part of a module definition::"
msgstr ""
"Llamar a una función de Python es fácil. Primero, el programa Python debe de "
"alguna manera pasar el objeto de función Python. Debe proporcionar una "
"función (o alguna otra interfaz) para hacer esto. Cuando se llama a esta "
"función, guarde un puntero en el objeto de la función Python (tenga cuidado "
"de usar :c:func:`Py_INCREF`) En una variable global --- o donde mejor le "
"parezca. Por ejemplo, la siguiente función podría ser parte de una "
"definición de módulo::"
#: ../Doc/extending/extending.rst:531
msgid ""
"This function must be registered with the interpreter using the :const:"
"`METH_VARARGS` flag; this is described in section :ref:`methodtable`. The :"
"c:func:`PyArg_ParseTuple` function and its arguments are documented in "
"section :ref:`parsetuple`."
msgstr ""
"Esta función debe registrarse con el intérprete utilizando el indicador :"
"const:`METH_VARARGS`; esto se describe en la sección :ref:`methodtable`. La "
"función :c:func:`PyArg_ParseTuple` y sus argumentos están documentados en la "
"sección :ref:`parsetuple`."
#: ../Doc/extending/extending.rst:536
msgid ""
"The macros :c:func:`Py_XINCREF` and :c:func:`Py_XDECREF` increment/decrement "
"the reference count of an object and are safe in the presence of ``NULL`` "
"pointers (but note that *temp* will not be ``NULL`` in this context). More "
"info on them in section :ref:`refcounts`."
msgstr ""
"Las macros :c:func:`Py_XINCREF` y :c:func:`Py_XDECREF` incrementan/"
"disminuyen el recuento de referencia de un objeto y son seguros en presencia "
"de punteros ``NULL`` (pero tenga en cuenta que *temp* no lo hará ser "
"``NULL`` en este contexto). Más información sobre ellos en la sección :ref:"
"`refcounts`."
#: ../Doc/extending/extending.rst:543
msgid ""
"Later, when it is time to call the function, you call the C function :c:func:"
"`PyObject_CallObject`. This function has two arguments, both pointers to "
"arbitrary Python objects: the Python function, and the argument list. The "
"argument list must always be a tuple object, whose length is the number of "
"arguments. To call the Python function with no arguments, pass in ``NULL``, "
"or an empty tuple; to call it with one argument, pass a singleton tuple. :c:"
"func:`Py_BuildValue` returns a tuple when its format string consists of zero "
"or more format codes between parentheses. For example::"
msgstr ""
"Más tarde, cuando es hora de llamar a la función, llama a la función C :c:"
"func:`PyObject_CallObject`. Esta función tiene dos argumentos, ambos "
"punteros a objetos arbitrarios de Python: la función Python y la lista de "
"argumentos. La lista de argumentos siempre debe ser un objeto de tupla, cuya "
"longitud es el número de argumentos. Para llamar a la función Python sin "
"argumentos, pase ``NULL`` o una tupla vacía; para llamarlo con un argumento, "
"pasa una tupla singleton. :c:func:`Py_BuildValue` retorna una tupla cuando "
"su cadena de formato consta de cero o más códigos de formato entre "
"paréntesis. Por ejemplo::"
#: ../Doc/extending/extending.rst:563
msgid ""
":c:func:`PyObject_CallObject` returns a Python object pointer: this is the "
"return value of the Python function. :c:func:`PyObject_CallObject` is "
"\"reference-count-neutral\" with respect to its arguments. In the example a "
"new tuple was created to serve as the argument list, which is :c:func:"
"`Py_DECREF`\\ -ed immediately after the :c:func:`PyObject_CallObject` call."
msgstr ""
":c:func:`PyObject_CallObject` retorna un puntero de objeto Python: este es "
"el valor de retorno de la función Python. :c:func:`PyObject_CallObject` es "
"\"recuento-referencia-neutral\" con respecto a sus argumentos. En el "
"ejemplo, se creó una nueva tupla para servir como lista de argumentos, a la "
"cual se le llama :c:func:`Py_DECREF` inmediatamente después de la llamada :c:"
"func:`PyObject_CallObject`."
#: ../Doc/extending/extending.rst:570
msgid ""
"The return value of :c:func:`PyObject_CallObject` is \"new\": either it is a "
"brand new object, or it is an existing object whose reference count has been "
"incremented. So, unless you want to save it in a global variable, you "
"should somehow :c:func:`Py_DECREF` the result, even (especially!) if you are "
"not interested in its value."
msgstr ""
"El valor de retorno de :c:func:`PyObject_CallObject` es \"nuevo\": o bien es "
"un objeto nuevo o es un objeto existente cuyo recuento de referencias se ha "
"incrementado. Por lo tanto, a menos que desee guardarlo en una variable "
"global, debería de alguna manera :c:func:`Py_DECREF` el resultado, incluso "
"(¡especialmente!) Si no está interesado en su valor."
#: ../Doc/extending/extending.rst:576
msgid ""
"Before you do this, however, it is important to check that the return value "
"isn't ``NULL``. If it is, the Python function terminated by raising an "
"exception. If the C code that called :c:func:`PyObject_CallObject` is called "
"from Python, it should now return an error indication to its Python caller, "
"so the interpreter can print a stack trace, or the calling Python code can "
"handle the exception. If this is not possible or desirable, the exception "
"should be cleared by calling :c:func:`PyErr_Clear`. For example::"
msgstr ""
"Sin embargo, antes de hacer esto, es importante verificar que el valor de "
"retorno no sea ``NULL``. Si es así, la función de Python terminó generando "
"una excepción. Si el código C que llamó :c:func:`PyObject_CallObject` se "
"llama desde Python, ahora debería retornar una indicación de error a su "
"llamador de Python, para que el intérprete pueda imprimir un seguimiento de "
"la pila, o el código de Python que llama puede manejar la excepción. Si esto "
"no es posible o deseable, la excepción se debe eliminar llamando a :c:func:"
"`PyErr_Clear`. Por ejemplo::"
#: ../Doc/extending/extending.rst:589
msgid ""
"Depending on the desired interface to the Python callback function, you may "
"also have to provide an argument list to :c:func:`PyObject_CallObject`. In "
"some cases the argument list is also provided by the Python program, through "
"the same interface that specified the callback function. It can then be "
"saved and used in the same manner as the function object. In other cases, "
"you may have to construct a new tuple to pass as the argument list. The "
"simplest way to do this is to call :c:func:`Py_BuildValue`. For example, if "
"you want to pass an integral event code, you might use the following code::"
msgstr ""
"Dependiendo de la interfaz deseada para la función de retrollamada de "
"Python, es posible que también deba proporcionar una lista de argumentos "
"para :c:func:`PyObject_CallObject`. En algunos casos, el programa Python "
"también proporciona la lista de argumentos, a través de la misma interfaz "
"que especificó la función de retrollamada. Luego se puede guardar y usar de "
"la misma manera que el objeto de función. En otros casos, puede que tenga "
"que construir una nueva tupla para pasarla como lista de argumentos. La "
"forma más sencilla de hacer esto es llamar a :c:func:`Py_BuildValue`. Por "
"ejemplo, si desea pasar un código de evento integral, puede usar el "
"siguiente código::"
#: ../Doc/extending/extending.rst:608
msgid ""
"Note the placement of ``Py_DECREF(arglist)`` immediately after the call, "
"before the error check! Also note that strictly speaking this code is not "
"complete: :c:func:`Py_BuildValue` may run out of memory, and this should be "
"checked."
msgstr ""
"¡Observe la ubicación de ``Py_DECREF(arglist)`` inmediatamente después de la "
"llamada, antes de la verificación de errores! También tenga en cuenta que, "
"estrictamente hablando, este código no está completo: :c:func:"
"`Py_BuildValue` puede quedarse sin memoria, y esto debe verificarse."
#: ../Doc/extending/extending.rst:612
msgid ""
"You may also call a function with keyword arguments by using :c:func:"
"`PyObject_Call`, which supports arguments and keyword arguments. As in the "
"above example, we use :c:func:`Py_BuildValue` to construct the dictionary. ::"
msgstr ""
"También puede llamar a una función con argumentos de palabras clave "
"utilizando :c:func:`PyObject_Call`, que admite argumentos y argumentos de "
"palabras clave. Como en el ejemplo anterior, usamos :c:func:`Py_BuildValue` "
"para construir el diccionario. ::"
#: ../Doc/extending/extending.rst:630
msgid "Extracting Parameters in Extension Functions"
msgstr "Extracción de parámetros en funciones de extensión"
#: ../Doc/extending/extending.rst:634
msgid "The :c:func:`PyArg_ParseTuple` function is declared as follows::"
msgstr ""
"La función :c:func:`PyArg_ParseTuple` se declara de la siguiente manera::"
#: ../Doc/extending/extending.rst:638
msgid ""
"The *arg* argument must be a tuple object containing an argument list passed "
"from Python to a C function. The *format* argument must be a format string, "
"whose syntax is explained in :ref:`arg-parsing` in the Python/C API "
"Reference Manual. The remaining arguments must be addresses of variables "
"whose type is determined by the format string."
msgstr ""
"El argumento *arg* debe ser un objeto de tupla que contenga una lista de "