@@ -6,7 +6,7 @@ msgstr ""
6
6
"Project-Id-Version : Python 3\n "
7
7
"Report-Msgid-Bugs-To : \n "
8
8
"POT-Creation-Date : 2020-08-24 09:01+0200\n "
9
- "PO-Revision-Date : 2020-10-01 16:26 +0200\n "
9
+ "PO-Revision-Date : 2020-10-01 20:20 +0200\n "
10
10
"Last-Translator : Julien Palard <julien@palard.fr>\n "
11
11
"Language-Team : FRENCH <traductions@lists.afpy.org>\n "
12
12
"Language : fr\n "
@@ -54,7 +54,6 @@ msgstr ""
54
54
"chapitres suivants."
55
55
56
56
#: extending/extending.rst:25
57
- #, fuzzy
58
57
msgid ""
59
58
"The C extension interface is specific to CPython, and extension modules do "
60
59
"not work on other Python implementations. In many cases, it is possible to "
@@ -72,9 +71,9 @@ msgstr ""
72
71
"et ainsi préserver la portabilité vers d'autres implémentations. Par "
73
72
"exemple, si vous devez appeler une fonction de la bibliothèque C ou faire un "
74
73
"appel système, vous devriez envisager d'utiliser le module :mod:`ctypes` ou "
75
- "d'utiliser la bibliothèque * cffi* ` <https://cffi.readthedocs.io>`_ plutôt "
76
- "que d'écrire du code C sur mesure. Ces modules vous permettent d'écrire du "
77
- "code Python s'interfaçant avec le code C et sont plus portables entre les "
74
+ "d'utiliser la bibliothèque ` cffi <https://cffi.readthedocs.io/ >`_ plutôt que "
75
+ "d'écrire du code C sur mesure. Ces modules vous permettent d'écrire du code "
76
+ "Python s'interfaçant avec le code C et sont plus portables entre les "
78
77
"implémentations de Python que l'écriture et la compilation d'une d'extension "
79
78
"C."
80
79
@@ -83,7 +82,6 @@ msgid "A Simple Example"
83
82
msgstr "Un exemple simple"
84
83
85
84
#: extending/extending.rst:42
86
- #, fuzzy
87
85
msgid ""
88
86
"Let's create an extension module called ``spam`` (the favorite food of Monty "
89
87
"Python fans...) and let's say we want to create a Python interface to the C "
@@ -92,11 +90,11 @@ msgid ""
92
90
"this function to be callable from Python as follows:"
93
91
msgstr ""
94
92
"Créons un module d'extension appelé ``spam`` (la nourriture préférée de fans "
95
- "des *Monty Python* ... ) et disons que nous voulons créer une interface "
96
- "Python à la fonction de la bibliothèque C :c:func:`system` [#]_. Cette "
97
- "fonction prend une chaîne de caractères à terminaison nulle comme argument "
98
- "et renvoie un entier. Nous voulons que cette fonction soit appelable à "
99
- "partir de Python comme suit :"
93
+ "des *Monty Python* … ) et disons que nous voulons créer une interface Python "
94
+ "à la fonction de la bibliothèque C :c:func:`system` [#]_. Cette fonction "
95
+ "prend une chaîne de caractères à terminaison nulle comme argument et renvoie "
96
+ "un entier. Nous voulons que cette fonction soit appelable à partir de Python "
97
+ "comme suit :"
100
98
101
99
#: extending/extending.rst:53
102
100
msgid ""
@@ -296,7 +294,6 @@ msgstr ""
296
294
"c:func:`Py_INCREF` aux objets transmis à ces fonctions."
297
295
298
296
#: extending/extending.rst:154
299
- #, fuzzy
300
297
msgid ""
301
298
"You can test non-destructively whether an exception has been set with :c:"
302
299
"func:`PyErr_Occurred`. This returns the current exception object, or "
@@ -306,10 +303,10 @@ msgid ""
306
303
msgstr ""
307
304
"Vous pouvez tester de manière non destructive si une exception a été levée "
308
305
"avec :c:func:`PyErr_Occurred`. Cela renvoie l'objet exception actuel, ou "
309
- "* NULL* si aucune exception n'a eu lieu. Cependant, vous ne devriez pas avoir "
310
- "besoin d'appeler :c:func:`PyErr_Occurred` pour voir si une erreur est "
306
+ "`` NULL`` si aucune exception n'a eu lieu. Cependant, vous ne devriez pas "
307
+ "avoir besoin d'appeler :c:func:`PyErr_Occurred` pour voir si une erreur est "
311
308
"survenue durant l'appel d'une fonction, puisque vous devriez être en mesure "
312
- "de le déterminer à partir de la valeur de retour ."
309
+ "de le déterminer à partir de la valeur renvoyée ."
313
310
314
311
#: extending/extending.rst:160
315
312
#, fuzzy
@@ -480,7 +477,7 @@ msgid ""
480
477
"this sample."
481
478
msgstr ""
482
479
"Nous traiterons de l'utilisation de ``PyMODINIT_FUNC`` comme un type de "
483
- "retour de fonction plus tard dans cette section."
480
+ "renvoi de fonction plus tard dans cette section."
484
481
485
482
#: extending/extending.rst:250
486
483
msgid ""
@@ -636,7 +633,7 @@ msgid ""
636
633
"`PyInit_name`, where *name* is the name of the module, and should be the "
637
634
"only non-\\ ``static`` item defined in the module file::"
638
635
msgstr ""
639
- "Cette structure, à son tour, doit être transmise à l'interprète dans la "
636
+ "Cette structure, à son tour, doit être transmise à l'interpréteur dans la "
640
637
"fonction d'initialisation du module. La fonction d'initialisation doit être "
641
638
"nommée :c:func:`PyInit_name`, où *nom* est le nom du module, et doit être le "
642
639
"seul élément non ``static`` défini dans le fichier du module ::"
@@ -700,6 +697,11 @@ msgid ""
700
697
"``PyInit_spam``, and creation of the module is left to the import machinery. "
701
698
"For details on multi-phase initialization, see :PEP:`489`."
702
699
msgstr ""
700
+ "Contrairement à notre exemple de ``spam``, ``xxmodule`` utilise une "
701
+ "*initialisation multi-phase* (nouveau en Python 3.5), où une structure "
702
+ "*PyModuleDef* est renvoyée à partir de ``PyInit_spam``, et la création du "
703
+ "module est laissée à la machine d'importation. Pour plus de détails sur "
704
+ "l'initialisation multi-phase, voir :PEP:`489`."
703
705
704
706
#: extending/extending.rst:448
705
707
msgid "Compilation and Linkage"
@@ -781,6 +783,10 @@ msgid ""
781
783
"c:func:`PyArg_ParseTuple` function and its arguments are documented in "
782
784
"section :ref:`parsetuple`."
783
785
msgstr ""
786
+ "Cette fonction doit être enregistrée avec l'interpréteur en utilisant le "
787
+ "drapeau :const:`METH_VARARGS` ; ceci est décrit dans la section :ref:"
788
+ "`methodtable`. La fonction :c:func:`PyArg_ParseTuple` et ses arguments sont "
789
+ "documentés dans la section :ref:`parsetuple`."
784
790
785
791
#: extending/extending.rst:536
786
792
msgid ""
@@ -789,6 +795,11 @@ msgid ""
789
795
"pointers (but note that *temp* will not be ``NULL`` in this context). More "
790
796
"info on them in section :ref:`refcounts`."
791
797
msgstr ""
798
+ "Les macros :c:func:`Py_XINCREF` et :c:func:`Py_XDECREF` incrémentent/"
799
+ "décrémentent le comptage des références d'un objet et sont sûres quant à la "
800
+ "présence de pointeurs ``NULL`` (mais notez que *temp* ne sera pas ``NULL`` "
801
+ "dans ce contexte). Plus d'informations à ce sujet dans la section :ref:"
802
+ "`refcounts`."
792
803
793
804
#: extending/extending.rst:543
794
805
msgid ""
@@ -830,6 +841,15 @@ msgid ""
830
841
"handle the exception. If this is not possible or desirable, the exception "
831
842
"should be cleared by calling :c:func:`PyErr_Clear`. For example::"
832
843
msgstr ""
844
+ "Mais avant de le faire, il est important de vérifier que la valeur renvoyée "
845
+ "n'est pas ``NULL``. Si c'est le cas, la fonction Python s'est terminée par "
846
+ "la levée d'une exception. Si le code C qui a appelé :c:func:"
847
+ "`PyObject_CallObject` est appelé depuis Python, il devrait maintenant "
848
+ "renvoyer une indication d'erreur à son appelant Python, afin que "
849
+ "l'interpréteur puisse imprimer un tracé de pile, ou que le code Python "
850
+ "appelant puisse gérer l'exception. Si cela n'est pas possible ou "
851
+ "souhaitable, l'exception doit être effacée en appelant :c:func:"
852
+ "`PyErr_Clear`. Par exemple ::"
833
853
834
854
#: extending/extending.rst:589
835
855
msgid ""
@@ -857,6 +877,10 @@ msgid ""
857
877
"`PyObject_Call`, which supports arguments and keyword arguments. As in the "
858
878
"above example, we use :c:func:`Py_BuildValue` to construct the dictionary. ::"
859
879
msgstr ""
880
+ "Vous pouvez également appeler une fonction avec des arguments de mots-clés "
881
+ "en utilisant :c:func:`PyObject_Call`, qui supporte les arguments et les "
882
+ "arguments de mots-clés. Comme dans l'exemple ci-dessus, nous utilisons :c:"
883
+ "func:`Py_BuildValue` pour construire le dictionnaire. ::"
860
884
861
885
#: extending/extending.rst:630
862
886
msgid "Extracting Parameters in Extension Functions"
@@ -917,6 +941,14 @@ msgid ""
917
941
"`PyArg_ParseTupleAndKeywords` returns true, otherwise it returns false and "
918
942
"raises an appropriate exception."
919
943
msgstr ""
944
+ "Les paramètres *arg* et *format* sont identiques à ceux de la fonction :c:"
945
+ "func:`PyArg_ParseTuple`. Le paramètre *kwdict* est le dictionnaire de mots-"
946
+ "clés reçu comme troisième paramètre du *runtime* Python. Le paramètre "
947
+ "*kwlist* est une liste de chaînes de caractères terminée par ``NULL`` qui "
948
+ "identifie les paramètres ; les noms sont mis en correspondance, de gauche à "
949
+ "droite, avec les informations de type de *format*. En cas de succès du "
950
+ "processus, :c:func:`PyArg_ParseTupleAndKeywords` renvoie vrai, sinon il "
951
+ "renvoie faux et lève une exception appropriée."
920
952
921
953
#: extending/extending.rst:741
922
954
msgid ""
@@ -930,6 +962,8 @@ msgid ""
930
962
"Here is an example module which uses keywords, based on an example by Geoff "
931
963
"Philbrick (philbrick@hks.com)::"
932
964
msgstr ""
965
+ "Voici un exemple de module qui utilise des mots-clés, basé sur un exemple de "
966
+ "*Geoff Philbrick* (philbrick@hks.com) ::"
933
967
934
968
#: extending/extending.rst:802
935
969
msgid "Building Arbitrary Values"
@@ -962,6 +996,15 @@ msgid ""
962
996
"that format unit. To force it to return a tuple of size 0 or one, "
963
997
"parenthesize the format string."
964
998
msgstr ""
999
+ "Une différence par rapport à :c:func:`PyArg_ParseTuple` : alors que ce "
1000
+ "dernier nécessite que son premier argument soit un n-uplet (puisque les "
1001
+ "listes d'arguments Python sont toujours représentées par des n-uplets en "
1002
+ "interne), :c:func:`Py_BuildValue` ne construit pas toujours un n-uplet. Il "
1003
+ "n'en construit un que si sa chaîne formatée contient deux unités formatées "
1004
+ "ou plus. Si la chaîne formatée est vide, il renvoie ``None`` ; s'il contient "
1005
+ "exactement une unité formatée, il renvoie tout objet décrit par cette unité "
1006
+ "formatée. Pour le forcer à renvoyer un n-uplet de taille 0 ou 1, mettez la "
1007
+ "chaîne formatée entre parenthèses."
965
1008
966
1009
#: extending/extending.rst:822
967
1010
msgid ""
@@ -1054,6 +1097,18 @@ msgid ""
1054
1097
"in a reference cycle, or referenced from the objects in the cycle, even "
1055
1098
"though there are no further references to the cycle itself."
1056
1099
msgstr ""
1100
+ "Bien que Python utilise l'implémentation traditionnelle de comptage de "
1101
+ "référence, il propose également un détecteur de cycles qui fonctionne pour "
1102
+ "détecter les cycles de référence. Cela permet aux applications de ne pas se "
1103
+ "soucier de la création de références circulaires directes ou indirectes ; ce "
1104
+ "sont les faiblesses du ramasse-miettes mis en œuvre en utilisant uniquement "
1105
+ "le comptage de référence. Les cycles de référence sont constitués d'objets "
1106
+ "qui contiennent des références (éventuellement indirectes) à eux-mêmes, de "
1107
+ "sorte que chaque objet du cycle a un comptage de référence qui n'est pas "
1108
+ "nul. Les implémentations typiques de comptage de référence ne sont pas "
1109
+ "capables de récupérer la mémoire appartenant à des objets dans un cycle de "
1110
+ "référence, ou référencés à partir des objets dans le cycle, même s'il n'y a "
1111
+ "pas d'autres références au cycle lui-même."
1057
1112
1058
1113
#: extending/extending.rst:911
1059
1114
msgid ""
@@ -1081,8 +1136,16 @@ msgid ""
1081
1136
"this purpose (and others), every object also contains a pointer to its type "
1082
1137
"object."
1083
1138
msgstr ""
1139
+ "Il existe deux macros, ``Py_INCREF(x)`` et ``Py_DECREF(x)``, qui gèrent "
1140
+ "l'incrémentation et la décrémentation du comptage de référence. :c:func:"
1141
+ "`Py_DECREF` libère également l'objet lorsque le comptage atteint zéro. Pour "
1142
+ "plus de flexibilité, il n'appelle pas :c:func:`free` directement — plutôt, "
1143
+ "il fait un appel à travers un pointeur de fonction dans l'objet :dfn:`type "
1144
+ "objet` de l'objet. À cette fin (et pour d'autres), chaque objet contient "
1145
+ "également un pointeur vers son objet type."
1084
1146
1085
1147
#: extending/extending.rst:934
1148
+ #, fuzzy
1086
1149
msgid ""
1087
1150
"The big question now remains: when to use ``Py_INCREF(x)`` and "
1088
1151
"``Py_DECREF(x)``? Let's first introduce some terms. Nobody \" owns\" an "
@@ -1094,6 +1157,17 @@ msgid ""
1094
1157
"on, store it, or call :c:func:`Py_DECREF`. Forgetting to dispose of an owned "
1095
1158
"reference creates a memory leak."
1096
1159
msgstr ""
1160
+ "La grande question demeure maintenant : quand utiliser ``Py_INCREF(x)`` et "
1161
+ "``Py_DECREF(x)`` ? Commençons par définir quelques termes. Personne ne "
1162
+ "\" possède\" un objet ; cependant, vous pouvez vous approprier une référence "
1163
+ "à un objet par :dfn:`own . Le comptage de références d'un objet est "
1164
+ "maintenant défini comme le étant le nombre de références à cet objet dont on "
1165
+ "est propriétaire . Le propriétaire d'une référence est responsable "
1166
+ "d'appeler :c:func:`Py_DECREF` lorsque la référence n'est plus nécessaire. La "
1167
+ "propriété d'une référence peut être transférée. Il y a trois façons de "
1168
+ "disposer d'une référence propriétaire : la transmettre, la stocker, ou "
1169
+ "appeler :c:func:`Py_DECREF`. Oublier de se débarrasser d'une référence "
1170
+ "propriétaire crée une fuite de mémoire."
1097
1171
1098
1172
#: extending/extending.rst:943
1099
1173
msgid ""
@@ -1114,6 +1188,14 @@ msgid ""
1114
1188
"code a borrowed reference can be used after the owner from which it was "
1115
1189
"borrowed has in fact disposed of it."
1116
1190
msgstr ""
1191
+ "L'avantage d'emprunter, plutôt qu'être propriétaire d'une référence est que "
1192
+ "vous n'avez pas à vous soucier de disposer de la référence sur tous les "
1193
+ "chemins possibles dans le code — en d'autres termes, avec une référence "
1194
+ "empruntée, vous ne courez pas le risque de fuites lors d'une sortie "
1195
+ "prématurée. L'inconvénient de l'emprunt par rapport à la possession est "
1196
+ "qu'il existe certaines situations subtiles où, dans un code apparemment "
1197
+ "correct, une référence empruntée peut être utilisée après que le "
1198
+ "propriétaire auquel elle a été empruntée l'a en fait éliminée."
1117
1199
1118
1200
#: extending/extending.rst:957
1119
1201
msgid ""
@@ -1206,6 +1288,10 @@ msgid ""
1206
1288
"invocations of the interpreter, which can cause the owner of a reference to "
1207
1289
"dispose of it."
1208
1290
msgstr ""
1291
+ "Il existe quelques situations où l'utilisation apparemment inoffensive d'une "
1292
+ "référence empruntée peut entraîner des problèmes. Tous ces problèmes sont en "
1293
+ "lien avec des invocations implicites de l’interpréteur, et peuvent amener le "
1294
+ "propriétaire d'une référence à s'en défaire."
1209
1295
1210
1296
#: extending/extending.rst:1020
1211
1297
msgid ""
@@ -1232,6 +1318,7 @@ msgid ""
1232
1318
msgstr ""
1233
1319
1234
1320
#: extending/extending.rst:1043
1321
+ #, fuzzy
1235
1322
msgid ""
1236
1323
"Since it is written in Python, the :meth:`__del__` method can execute "
1237
1324
"arbitrary Python code. Could it perhaps do something to invalidate the "
@@ -1241,6 +1328,13 @@ msgid ""
1241
1328
"this was the last reference to that object, it would free the memory "
1242
1329
"associated with it, thereby invalidating ``item``."
1243
1330
msgstr ""
1331
+ "Comme elle est écrite en Python, la méthode :meth:`__del__` peut exécuter du "
1332
+ "code Python arbitraire. Pourrait-elle faire quelque chose pour invalider la "
1333
+ "référence à ``item`` dans :c:func:`bug' ? Bien sûr ! En supposant que la "
1334
+ "liste passée dans :c:func:`bug` est accessible à la méthode :meth:`__del__`, "
1335
+ "elle pourrait exécuter une instruction à l'effet de ``del list[0]``, et en "
1336
+ "supposant que ce soit la dernière référence à cet objet, elle libérerait la "
1337
+ "mémoire qui lui est associée, invalidant ainsi ``item``."
1244
1338
1245
1339
#: extending/extending.rst:1051
1246
1340
msgid ""
@@ -1283,6 +1377,16 @@ msgid ""
1283
1377
"``NULL``, there would be a lot of redundant tests and the code would run "
1284
1378
"more slowly."
1285
1379
msgstr ""
1380
+ "En général, les fonctions qui prennent des références d'objets comme "
1381
+ "arguments ne sont pas conçues pour recevoir des pointeurs ``NULL``, et si "
1382
+ "vous en donnez comme arguments, elles videront la mémoire vive (ou "
1383
+ "provoqueront des vidages ultérieurs de mémoire). Les fonctions qui "
1384
+ "renvoient des références d'objets renvoient généralement ``NULL`` uniquement "
1385
+ "pour indiquer qu'une exception s'est produite. La raison pour laquelle les "
1386
+ "arguments ``NULL`` ne sont pas testés est que les fonctions passent souvent "
1387
+ "les objets qu'elles reçoivent à d'autres fonctions --- si chaque fonction "
1388
+ "devait tester pour ``NULL``, il y aurait beaucoup de tests redondants et le "
1389
+ "code s'exécuterait plus lentement."
1286
1390
1287
1391
#: extending/extending.rst:1102
1288
1392
msgid ""
@@ -1367,6 +1471,20 @@ msgid ""
1367
1471
"if symbols are globally visible, the module whose functions one wishes to "
1368
1472
"call might not have been loaded yet!"
1369
1473
msgstr ""
1474
+ "À première vue, cela semble facile : il suffit d'écrire les fonctions (sans "
1475
+ "les déclarer \" statiques\" , bien sûr), de fournir un fichier d'en-tête "
1476
+ "approprié et de documenter l'API C. Et en fait, cela fonctionnerait si tous "
1477
+ "les modules d'extension étaient toujours liés statiquement avec "
1478
+ "l'interpréteur Python. Cependant, lorsque les modules sont utilisés comme "
1479
+ "des bibliothèques partagées, les symboles définis dans un module peuvent ne "
1480
+ "pas être visibles par un autre module. Les détails de la visibilité "
1481
+ "dépendent du système d'exploitation ; certains systèmes utilisent un espace "
1482
+ "de noms global pour l'interpréteur Python et tous les modules d'extension "
1483
+ "(Windows, par exemple), tandis que d'autres exigent une liste explicite des "
1484
+ "symboles importés au moment de la liaison des modules (AIX en est un "
1485
+ "exemple), ou offrent un choix de stratégies différentes (la plupart des "
1486
+ "*Unices*). Et même si les symboles sont globalement visibles, le module dont "
1487
+ "on souhaite appeler les fonctions n'est peut-être pas encore chargé !"
1370
1488
1371
1489
#: extending/extending.rst:1172
1372
1490
msgid ""
@@ -1444,6 +1562,13 @@ msgid ""
1444
1562
"complicated in reality (such as adding \" spam\" to every command). This "
1445
1563
"function :c:func:`PySpam_System` is also exported to other extension modules."
1446
1564
msgstr ""
1565
+ "Le module d'exportation est une modification du module :mod:`spam` de la "
1566
+ "section :ref:`extending-simpleexample`. La fonction :func:`spam.system` "
1567
+ "n'appelle pas directement la fonction de la bibliothèque C :c:func:`system`, "
1568
+ "mais une fonction :c:func:`PySpam_System`, qui ferait bien sûr quelque chose "
1569
+ "de plus compliqué en réalité (comme ajouter du *spam* à chaque commande). "
1570
+ "Cette fonction :c:func:`PySpam_System` est également exportée vers d'autres "
1571
+ "modules d'extension."
1447
1572
1448
1573
#: extending/extending.rst:1225
1449
1574
msgid ""
@@ -1476,6 +1601,8 @@ msgid ""
1476
1601
"Note that ``PySpam_API`` is declared ``static``; otherwise the pointer array "
1477
1602
"would disappear when :func:`PyInit_spam` terminates!"
1478
1603
msgstr ""
1604
+ "Notez que ``PySpam_API`` est déclaré ``statique`` ; sinon le tableau de "
1605
+ "pointeurs disparaîtrait lorsque :func:`PyInit_spam`` se finit !"
1479
1606
1480
1607
#: extending/extending.rst:1290
1481
1608
msgid ""
@@ -1524,13 +1651,18 @@ msgid ""
1524
1651
"The metaphor of \" borrowing\" a reference is not completely correct: the "
1525
1652
"owner still has a copy of the reference."
1526
1653
msgstr ""
1654
+ "L'expression \" emprunter une référence\" n'est pas tout à fait correcte, car "
1655
+ "le propriétaire a toujours une copie de la référence."
1527
1656
1528
1657
#: extending/extending.rst:1378
1529
1658
msgid ""
1530
1659
"Checking that the reference count is at least 1 **does not work** --- the "
1531
1660
"reference count itself could be in freed memory and may thus be reused for "
1532
1661
"another object!"
1533
1662
msgstr ""
1663
+ "Vérifier que le comptage de référence est d'au moins 1 **ne fonctionne pas** "
1664
+ "--- le compte de référence lui-même pourrait être en mémoire libérée et peut "
1665
+ "donc être réutilisé pour un autre objet !"
1534
1666
1535
1667
#: extending/extending.rst:1382
1536
1668
msgid ""
0 commit comments