forked from AFPy/python-docs-fr
2443 lines
94 KiB
Plaintext
2443 lines
94 KiB
Plaintext
# SOME DESCRIPTIVE TITLE.
|
||
# Copyright (C) 2001-2016, Python Software Foundation
|
||
# This file is distributed under the same license as the Python package.
|
||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||
#
|
||
msgid ""
|
||
msgstr ""
|
||
"Project-Id-Version: Python 3.6\n"
|
||
"Report-Msgid-Bugs-To: \n"
|
||
"POT-Creation-Date: 2018-06-10 11:27+0200\n"
|
||
"PO-Revision-Date: 2017-10-27 17:41+0200\n"
|
||
"Last-Translator: \n"
|
||
"Language-Team: \n"
|
||
"Language: fr\n"
|
||
"MIME-Version: 1.0\n"
|
||
"Content-Type: text/plain; charset=UTF-8\n"
|
||
"Content-Transfer-Encoding: 8bit\n"
|
||
"X-Generator: Poedit 2.0.4\n"
|
||
|
||
#: ../Doc/faq/programming.rst:5
|
||
msgid "Programming FAQ"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:8
|
||
msgid "Contents"
|
||
msgstr "Sommaire"
|
||
|
||
#: ../Doc/faq/programming.rst:12
|
||
msgid "General Questions"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:15
|
||
msgid ""
|
||
"Is there a source code level debugger with breakpoints, single-stepping, "
|
||
"etc.?"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:17 ../Doc/faq/programming.rst:60
|
||
msgid "Yes."
|
||
msgstr "Oui."
|
||
|
||
#: ../Doc/faq/programming.rst:19
|
||
msgid ""
|
||
"The pdb module is a simple but adequate console-mode debugger for Python. It "
|
||
"is part of the standard Python library, and is :mod:`documented in the "
|
||
"Library Reference Manual <pdb>`. You can also write your own debugger by "
|
||
"using the code for pdb as an example."
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:24
|
||
msgid ""
|
||
"The IDLE interactive development environment, which is part of the standard "
|
||
"Python distribution (normally available as Tools/scripts/idle), includes a "
|
||
"graphical debugger."
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:28
|
||
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 "
|
||
"`Python for Windows Extensions <https://sourceforge.net/projects/pywin32/"
|
||
">`__ project and as a part of the ActivePython distribution (see https://www."
|
||
"activestate.com/activepython\\ )."
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:35
|
||
msgid ""
|
||
"`Boa Constructor <http://boa-constructor.sourceforge.net/>`_ is an IDE and "
|
||
"GUI builder that uses wxWidgets. It offers visual frame creation and "
|
||
"manipulation, an object inspector, many views on the source like object "
|
||
"browsers, inheritance hierarchies, doc string generated html documentation, "
|
||
"an advanced debugger, integrated help, and Zope support."
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:41
|
||
msgid ""
|
||
"`Eric <http://eric-ide.python-projects.org/>`_ is an IDE built on PyQt and "
|
||
"the Scintilla editing component."
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:44
|
||
msgid ""
|
||
"Pydb is a version of the standard Python debugger pdb, modified for use with "
|
||
"DDD (Data Display Debugger), a popular graphical debugger front end. Pydb "
|
||
"can be found at http://bashdb.sourceforge.net/pydb/ and DDD can be found at "
|
||
"https://www.gnu.org/software/ddd."
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:49
|
||
msgid ""
|
||
"There are a number of commercial Python IDEs that include graphical "
|
||
"debuggers. They include:"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:52
|
||
msgid "Wing IDE (https://wingware.com/)"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:53
|
||
msgid "Komodo IDE (https://komodoide.com/)"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:54
|
||
msgid "PyCharm (https://www.jetbrains.com/pycharm/)"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:58
|
||
msgid "Is there a tool to help find bugs or perform static analysis?"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:62
|
||
msgid ""
|
||
"PyChecker is a static analysis tool that finds bugs in Python source code "
|
||
"and warns about code complexity and style. You can get PyChecker from "
|
||
"http://pychecker.sourceforge.net/."
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:66
|
||
msgid ""
|
||
"`Pylint <https://www.pylint.org/>`_ is another tool that checks if a module "
|
||
"satisfies a coding standard, and also makes it possible to write plug-ins to "
|
||
"add a custom feature. In addition to the bug checking that PyChecker "
|
||
"performs, Pylint offers some additional features such as checking line "
|
||
"length, whether variable names are well-formed according to your coding "
|
||
"standard, whether declared interfaces are fully implemented, and more. "
|
||
"https://docs.pylint.org/ provides a full list of Pylint's features."
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:76
|
||
msgid "How can I create a stand-alone binary from a Python script?"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:78
|
||
msgid ""
|
||
"You don't need the ability to compile Python to C code if all you want is a "
|
||
"stand-alone program that users can download and run without having to "
|
||
"install the Python distribution first. There are a number of tools that "
|
||
"determine the set of modules required by a program and bind these modules "
|
||
"together with a Python binary to produce a single executable."
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:84
|
||
msgid ""
|
||
"One is to use the freeze tool, which is included in the Python source tree "
|
||
"as ``Tools/freeze``. It converts Python byte code to C arrays; a C compiler "
|
||
"you can embed all your modules into a new program, which is then linked with "
|
||
"the standard Python modules."
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:89
|
||
msgid ""
|
||
"It works by scanning your source recursively for import statements (in both "
|
||
"forms) and looking for the modules in the standard Python path as well as in "
|
||
"the source directory (for built-in modules). It then turns the bytecode for "
|
||
"modules written in Python into C code (array initializers that can be turned "
|
||
"into code objects using the marshal module) and creates a custom-made config "
|
||
"file that only contains those built-in modules which are actually used in "
|
||
"the program. It then compiles the generated C code and links it with the "
|
||
"rest of the Python interpreter to form a self-contained binary which acts "
|
||
"exactly like your script."
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:98
|
||
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 ""
|
||
|
||
#: ../Doc/faq/programming.rst:101
|
||
msgid "http://www.py2exe.org/"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:103
|
||
msgid ""
|
||
"Another tool is Anthony Tuininga's `cx_Freeze <http://cx-freeze.sourceforge."
|
||
"net/>`_."
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:107
|
||
msgid "Are there coding standards or a style guide for Python programs?"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:109
|
||
msgid ""
|
||
"Yes. The coding style required for standard library modules is documented "
|
||
"as :pep:`8`."
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:114
|
||
msgid "Core Language"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:117
|
||
msgid "Why am I getting an UnboundLocalError when the variable has a value?"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:119
|
||
msgid ""
|
||
"It can be a surprise to get the UnboundLocalError in previously working code "
|
||
"when it is modified by adding an assignment statement somewhere in the body "
|
||
"of a function."
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:123
|
||
msgid "This code:"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:131
|
||
msgid "works, but this code:"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:138
|
||
msgid "results in an UnboundLocalError:"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:145
|
||
msgid ""
|
||
"This is because when you make an assignment to a variable in a scope, that "
|
||
"variable becomes local to that scope and shadows any similarly named "
|
||
"variable in the outer scope. Since the last statement in foo assigns a new "
|
||
"value to ``x``, the compiler recognizes it as a local variable. "
|
||
"Consequently when the earlier ``print(x)`` attempts to print the "
|
||
"uninitialized local variable and an error results."
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:152
|
||
msgid ""
|
||
"In the example above you can access the outer scope variable by declaring it "
|
||
"global:"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:163
|
||
msgid ""
|
||
"This explicit declaration is required in order to remind you that (unlike "
|
||
"the superficially analogous situation with class and instance variables) you "
|
||
"are actually modifying the value of the variable in the outer scope:"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:170
|
||
msgid ""
|
||
"You can do a similar thing in a nested scope using the :keyword:`nonlocal` "
|
||
"keyword:"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:187
|
||
msgid "What are the rules for local and global variables in Python?"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:189
|
||
msgid ""
|
||
"In Python, variables that are only referenced inside a function are "
|
||
"implicitly global. If a variable is assigned a value anywhere within the "
|
||
"function's body, it's assumed to be a local unless explicitly declared as "
|
||
"global."
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:193
|
||
msgid ""
|
||
"Though a bit surprising at first, a moment's consideration explains this. "
|
||
"On one hand, requiring :keyword:`global` for assigned variables provides a "
|
||
"bar against unintended side-effects. On the other hand, if ``global`` was "
|
||
"required for all global references, you'd be using ``global`` all the time. "
|
||
"You'd have to declare as global every reference to a built-in function or to "
|
||
"a component of an imported module. This clutter would defeat the usefulness "
|
||
"of the ``global`` declaration for identifying side-effects."
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:203
|
||
msgid ""
|
||
"Why do lambdas defined in a loop with different values all return the same "
|
||
"result?"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:205
|
||
msgid ""
|
||
"Assume you use a for loop to define a few different lambdas (or even plain "
|
||
"functions), e.g.::"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:212
|
||
msgid ""
|
||
"This gives you a list that contains 5 lambdas that calculate ``x**2``. You "
|
||
"might expect that, when called, they would return, respectively, ``0``, "
|
||
"``1``, ``4``, ``9``, and ``16``. However, when you actually try you will "
|
||
"see that they all return ``16``::"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:222
|
||
msgid ""
|
||
"This happens because ``x`` is not local to the lambdas, but is defined in "
|
||
"the outer scope, and it is accessed when the lambda is called --- not when "
|
||
"it is defined. At the end of the loop, the value of ``x`` is ``4``, so all "
|
||
"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 ""
|
||
|
||
#: ../Doc/faq/programming.rst:232
|
||
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 ""
|
||
|
||
#: ../Doc/faq/programming.rst:239
|
||
msgid ""
|
||
"Here, ``n=x`` creates a new variable ``n`` local to the lambda and computed "
|
||
"when the lambda is defined so that it has the same value that ``x`` had at "
|
||
"that point in the loop. This means that the value of ``n`` will be ``0`` in "
|
||
"the first lambda, ``1`` in the second, ``2`` in the third, and so on. "
|
||
"Therefore each lambda will now return the correct result::"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:250
|
||
msgid ""
|
||
"Note that this behaviour is not peculiar to lambdas, but applies to regular "
|
||
"functions too."
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:255
|
||
msgid "How do I share global variables across modules?"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:257
|
||
msgid ""
|
||
"The canonical way to share information across modules within a single "
|
||
"program is to create a special module (often called config or cfg). Just "
|
||
"import the config module in all modules of your application; the module then "
|
||
"becomes available as a global name. Because there is only one instance of "
|
||
"each module, any changes made to the module object get reflected "
|
||
"everywhere. For example:"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:263
|
||
msgid "config.py::"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:267
|
||
msgid "mod.py::"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:272
|
||
msgid "main.py::"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:278
|
||
msgid ""
|
||
"Note that using a module is also the basis for implementing the Singleton "
|
||
"design pattern, for the same reason."
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:283
|
||
msgid "What are the \"best practices\" for using import in a module?"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:285
|
||
msgid ""
|
||
"In general, don't use ``from modulename import *``. Doing so clutters the "
|
||
"importer's namespace, and makes it much harder for linters to detect "
|
||
"undefined names."
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:289
|
||
msgid ""
|
||
"Import modules at the top of a file. Doing so makes it clear what other "
|
||
"modules your code requires and avoids questions of whether the module name "
|
||
"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 ""
|
||
|
||
#: ../Doc/faq/programming.rst:294
|
||
msgid "It's good practice if you import modules in the following order:"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:296
|
||
msgid "standard library modules -- e.g. ``sys``, ``os``, ``getopt``, ``re``"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:297
|
||
msgid ""
|
||
"third-party library modules (anything installed in Python's site-packages "
|
||
"directory) -- e.g. mx.DateTime, ZODB, PIL.Image, etc."
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:299
|
||
msgid "locally-developed modules"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:301
|
||
msgid ""
|
||
"It is sometimes necessary to move imports to a function or class to avoid "
|
||
"problems with circular imports. Gordon McMillan says:"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:304
|
||
msgid ""
|
||
"Circular imports are fine where both modules use the \"import <module>\" "
|
||
"form of import. They fail when the 2nd module wants to grab a name out of "
|
||
"the first (\"from module import name\") and the import is at the top level. "
|
||
"That's because names in the 1st are not yet available, because the first "
|
||
"module is busy importing the 2nd."
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:310
|
||
msgid ""
|
||
"In this case, if the second module is only used in one function, then the "
|
||
"import can easily be moved into that function. By the time the import is "
|
||
"called, the first module will have finished initializing, and the second "
|
||
"module can do its import."
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:315
|
||
msgid ""
|
||
"It may also be necessary to move imports out of the top level of code if "
|
||
"some of the modules are platform-specific. In that case, it may not even be "
|
||
"possible to import all of the modules at the top of the file. In this case, "
|
||
"importing the correct modules in the corresponding platform-specific code is "
|
||
"a good option."
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:320
|
||
msgid ""
|
||
"Only move imports into a local scope, such as inside a function definition, "
|
||
"if it's necessary to solve a problem such as avoiding a circular import or "
|
||
"are trying to reduce the initialization time of a module. This technique is "
|
||
"especially helpful if many of the imports are unnecessary depending on how "
|
||
"the program executes. You may also want to move imports into a function if "
|
||
"the modules are only ever used in that function. Note that loading a module "
|
||
"the first time may be expensive because of the one time initialization of "
|
||
"the module, but loading a module multiple times is virtually free, costing "
|
||
"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 ""
|
||
|
||
#: ../Doc/faq/programming.rst:333
|
||
msgid "Why are default values shared between objects?"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:335
|
||
msgid ""
|
||
"This type of bug commonly bites neophyte programmers. Consider this "
|
||
"function::"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:342
|
||
msgid ""
|
||
"The first time you call this function, ``mydict`` contains a single item. "
|
||
"The second time, ``mydict`` contains two items because when ``foo()`` begins "
|
||
"executing, ``mydict`` starts out with an item already in it."
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:346
|
||
msgid ""
|
||
"It is often expected that a function call creates new objects for default "
|
||
"values. This is not what happens. Default values are created exactly once, "
|
||
"when the function is defined. If that object is changed, like the "
|
||
"dictionary in this example, subsequent calls to the function will refer to "
|
||
"this changed object."
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:351
|
||
msgid ""
|
||
"By definition, immutable objects such as numbers, strings, tuples, and "
|
||
"``None``, are safe from change. Changes to mutable objects such as "
|
||
"dictionaries, lists, and class instances can lead to confusion."
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:355
|
||
msgid ""
|
||
"Because of this feature, it is good programming practice to not use mutable "
|
||
"objects as default values. Instead, use ``None`` as the default value and "
|
||
"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 ""
|
||
|
||
#: ../Doc/faq/programming.rst:363
|
||
msgid "but::"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:369
|
||
msgid ""
|
||
"This feature can be useful. When you have a function that's time-consuming "
|
||
"to compute, a common technique is to cache the parameters and the resulting "
|
||
"value of each call to the function, and return the cached value if the same "
|
||
"value is requested again. This is called \"memoizing\", and can be "
|
||
"implemented like this::"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:384
|
||
msgid ""
|
||
"You could use a global variable containing a dictionary instead of the "
|
||
"default value; it's a matter of taste."
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:389
|
||
msgid ""
|
||
"How can I pass optional or keyword parameters from one function to another?"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:391
|
||
msgid ""
|
||
"Collect the arguments using the ``*`` and ``**`` specifiers in the "
|
||
"function's parameter list; this gives you the positional arguments as a "
|
||
"tuple and the keyword arguments as a dictionary. You can then pass these "
|
||
"arguments when calling another function by using ``*`` and ``**``::"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:410
|
||
msgid "What is the difference between arguments and parameters?"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:412
|
||
msgid ""
|
||
":term:`Parameters <parameter>` are defined by the names that appear in a "
|
||
"function definition, whereas :term:`arguments <argument>` are the values "
|
||
"actually passed to a function when calling it. Parameters define what types "
|
||
"of arguments a function can accept. For example, given the function "
|
||
"definition::"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:420
|
||
msgid ""
|
||
"*foo*, *bar* and *kwargs* are parameters of ``func``. However, when calling "
|
||
"``func``, for example::"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:425
|
||
msgid "the values ``42``, ``314``, and ``somevar`` are arguments."
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:429
|
||
msgid "Why did changing list 'y' also change list 'x'?"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:431
|
||
msgid "If you wrote code like::"
|
||
msgstr "Si vous avez écrit du code comme : ::"
|
||
|
||
#: ../Doc/faq/programming.rst:441
|
||
msgid ""
|
||
"you might be wondering why appending an element to ``y`` changed ``x`` too."
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:443
|
||
msgid "There are two factors that produce this result:"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:445
|
||
msgid ""
|
||
"Variables are simply names that refer to objects. Doing ``y = x`` doesn't "
|
||
"create a copy of the list -- it creates a new variable ``y`` that refers to "
|
||
"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 ""
|
||
|
||
#: ../Doc/faq/programming.rst:449
|
||
msgid ""
|
||
"Lists are :term:`mutable`, which means that you can change their content."
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:451
|
||
msgid ""
|
||
"After the call to :meth:`~list.append`, the content of the mutable object "
|
||
"has changed from ``[]`` to ``[10]``. Since both the variables refer to the "
|
||
"same object, using either name accesses the modified value ``[10]``."
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:455
|
||
msgid "If we instead assign an immutable object to ``x``::"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:465
|
||
msgid ""
|
||
"we can see that in this case ``x`` and ``y`` are not equal anymore. This is "
|
||
"because integers are :term:`immutable`, and when we do ``x = x + 1`` we are "
|
||
"not mutating the int ``5`` by incrementing its value; instead, we are "
|
||
"creating a new object (the int ``6``) and assigning it to ``x`` (that is, "
|
||
"changing which object ``x`` refers to). After this assignment we have two "
|
||
"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 ""
|
||
|
||
#: ../Doc/faq/programming.rst:473
|
||
msgid ""
|
||
"Some operations (for example ``y.append(10)`` and ``y.sort()``) mutate the "
|
||
"object, whereas superficially similar operations (for example ``y = y + "
|
||
"[10]`` and ``sorted(y)``) create a new object. In general in Python (and in "
|
||
"all cases in the standard library) a method that mutates an object will "
|
||
"return ``None`` to help avoid getting the two types of operations confused. "
|
||
"So if you mistakenly write ``y.sort()`` thinking it will give you a sorted "
|
||
"copy of ``y``, you'll instead end up with ``None``, which will likely cause "
|
||
"your program to generate an easily diagnosed error."
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:482
|
||
msgid ""
|
||
"However, there is one class of operations where the same operation sometimes "
|
||
"has different behaviors with different types: the augmented assignment "
|
||
"operators. For example, ``+=`` mutates lists but not tuples or ints "
|
||
"(``a_list += [1, 2, 3]`` is equivalent to ``a_list.extend([1, 2, 3])`` and "
|
||
"mutates ``a_list``, whereas ``some_tuple += (1, 2, 3)`` and ``some_int += "
|
||
"1`` create new objects)."
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:489
|
||
msgid "In other words:"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:491
|
||
msgid ""
|
||
"If we have a mutable object (:class:`list`, :class:`dict`, :class:`set`, "
|
||
"etc.), we can use some specific operations to mutate it and all the "
|
||
"variables that refer to it will see the change."
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:494
|
||
msgid ""
|
||
"If we have an immutable object (:class:`str`, :class:`int`, :class:`tuple`, "
|
||
"etc.), all the variables that refer to it will always see the same value, "
|
||
"but operations that transform that value into a new value always return a "
|
||
"new object."
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:499
|
||
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 ""
|
||
|
||
#: ../Doc/faq/programming.rst:504
|
||
msgid "How do I write a function with output parameters (call by reference)?"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:506
|
||
msgid ""
|
||
"Remember that arguments are passed by assignment in Python. Since "
|
||
"assignment just creates references to objects, there's no alias between an "
|
||
"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 ""
|
||
|
||
#: ../Doc/faq/programming.rst:511
|
||
msgid "By returning a tuple of the results::"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:522
|
||
msgid "This is almost always the clearest solution."
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:524
|
||
msgid ""
|
||
"By using global variables. This isn't thread-safe, and is not recommended."
|
||
msgstr ""
|
||
"En utilisant des variables globales. Ce qui n'est pas thread-safe, et n'est "
|
||
"donc pas recommandé."
|
||
|
||
#: ../Doc/faq/programming.rst:526
|
||
msgid "By passing a mutable (changeable in-place) object::"
|
||
msgstr "En passant un objet muable (modifiable sur place) ::"
|
||
|
||
#: ../Doc/faq/programming.rst:536
|
||
msgid "By passing in a dictionary that gets mutated::"
|
||
msgstr "En passant un dictionnaire, qui sera modifié : ::"
|
||
|
||
#: ../Doc/faq/programming.rst:546
|
||
msgid "Or bundle up values in a class instance::"
|
||
msgstr "Ou regrouper les valeurs dans une instance de classe ::"
|
||
|
||
#: ../Doc/faq/programming.rst:562
|
||
msgid "There's almost never a good reason to get this complicated."
|
||
msgstr ""
|
||
"Il n'y a pratiquement jamais de bonne raison de faire quelque chose d'aussi "
|
||
"compliqué."
|
||
|
||
#: ../Doc/faq/programming.rst:564
|
||
msgid "Your best choice is to return a tuple containing the multiple results."
|
||
msgstr ""
|
||
"Votre meilleure option est de renvoyer un *tuple* contenant les multiples "
|
||
"résultats."
|
||
|
||
#: ../Doc/faq/programming.rst:568
|
||
msgid "How do you make a higher order function in Python?"
|
||
msgstr "Comment construire une fonction d'ordre supérieur en Python ?"
|
||
|
||
#: ../Doc/faq/programming.rst:570
|
||
msgid ""
|
||
"You have two choices: you can use nested scopes or you can use callable "
|
||
"objects. For example, suppose you wanted to define ``linear(a,b)`` which "
|
||
"returns a function ``f(x)`` that computes the value ``a*x+b``. Using nested "
|
||
"scopes::"
|
||
msgstr ""
|
||
"Vous avez deux choix : vous pouvez utiliser les portées imbriquées ou vous "
|
||
"pouvez utiliser des objets appelables. Par exemple, supposons que vous "
|
||
"vouliez définir ``linear(a, b)`` qui renvoie une fonction ``f(x)`` qui "
|
||
"calcule la valeur ``a*x+b``. En utilisant les portées imbriquées : ::"
|
||
|
||
#: ../Doc/faq/programming.rst:579
|
||
msgid "Or using a callable object::"
|
||
msgstr "Ou en utilisant un objet appelable : ::"
|
||
|
||
#: ../Doc/faq/programming.rst:589
|
||
msgid "In both cases, ::"
|
||
msgstr "dans les deux cas, ::"
|
||
|
||
#: ../Doc/faq/programming.rst:593
|
||
msgid "gives a callable object where ``taxes(10e6) == 0.3 * 10e6 + 2``."
|
||
msgstr "donne un objet appelable où ``taxes(10e6) == 0.3 * 10e6 + 2``."
|
||
|
||
#: ../Doc/faq/programming.rst:595
|
||
msgid ""
|
||
"The callable object approach has the disadvantage that it is a bit slower "
|
||
"and results in slightly longer code. However, note that a collection of "
|
||
"callables can share their signature via inheritance::"
|
||
msgstr ""
|
||
"L'approche par objet appelable a le désavantage d'être légèrement plus lente "
|
||
"et de produire un code légèrement plus long. Cependant, il faut noter qu'une "
|
||
"collection d'objet appelables peuvent partager leur signatures par "
|
||
"héritage : ::"
|
||
|
||
#: ../Doc/faq/programming.rst:604
|
||
msgid "Object can encapsulate state for several methods::"
|
||
msgstr "Les objets peuvent encapsuler un état pour plusieurs méthodes ::"
|
||
|
||
#: ../Doc/faq/programming.rst:622
|
||
msgid ""
|
||
"Here ``inc()``, ``dec()`` and ``reset()`` act like functions which share the "
|
||
"same counting variable."
|
||
msgstr ""
|
||
"Ici ``inc()``, ``dec()`` et ``reset()`` agissent comme des fonctions "
|
||
"partageant une même variable compteur."
|
||
|
||
#: ../Doc/faq/programming.rst:627
|
||
msgid "How do I copy an object in Python?"
|
||
msgstr "Comment copier un objet en Python?"
|
||
|
||
#: ../Doc/faq/programming.rst:629
|
||
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 général, essayez :func:`copy.copy` ou :func:`copy.deepcopy` pour le cas "
|
||
"général. Tout les objets ne peuvent pas être copiés, mais la plupart le "
|
||
"peuvent."
|
||
|
||
#: ../Doc/faq/programming.rst:632
|
||
msgid ""
|
||
"Some objects can be copied more easily. Dictionaries have a :meth:`~dict."
|
||
"copy` method::"
|
||
msgstr ""
|
||
"Certains objects peuvent être copiés plus facilement. Les Dictionnaires ont "
|
||
"une méthode :meth:`~dict.copy` ::"
|
||
|
||
#: ../Doc/faq/programming.rst:637
|
||
msgid "Sequences can be copied by slicing::"
|
||
msgstr "Les séquences peuvent être copiées via la syntaxe des tranches ::"
|
||
|
||
#: ../Doc/faq/programming.rst:643
|
||
msgid "How can I find the methods or attributes of an object?"
|
||
msgstr "Comment puis-je trouver les méthodes ou les attribues d'un objet?"
|
||
|
||
#: ../Doc/faq/programming.rst:645
|
||
msgid ""
|
||
"For an instance x of a user-defined class, ``dir(x)`` returns an "
|
||
"alphabetized list of the names containing the instance attributes and "
|
||
"methods and attributes defined by its class."
|
||
msgstr ""
|
||
"Pour une instance x d'une classe définie par un utilisateur, ``dir(x)`` "
|
||
"renvoie une liste alphabétique des noms contenants les attributs de "
|
||
"l'instance, et les attributs et méthodes définies par sa classe."
|
||
|
||
#: ../Doc/faq/programming.rst:651
|
||
msgid "How can my code discover the name of an object?"
|
||
msgstr "Comment mon code peut il découvrir le nom d'un objet?"
|
||
|
||
#: ../Doc/faq/programming.rst:653
|
||
msgid ""
|
||
"Generally speaking, it can't, because objects don't really have names. "
|
||
"Essentially, assignment always binds a name to a value; The same is true of "
|
||
"``def`` and ``class`` statements, but in that case the value is a callable. "
|
||
"Consider the following code::"
|
||
msgstr ""
|
||
"De façon générale, il ne peut pas, par ce que les objets n'ont pas "
|
||
"réellement de noms. Essentiellement, l'assignation attache un nom à une "
|
||
"valeur; C'est vrai aussi pour les instructions ``def`` et ``class``, à la "
|
||
"différence que dans ce cas la valeur est appelable. Par exemple, dans le "
|
||
"code suivant : ::"
|
||
|
||
#: ../Doc/faq/programming.rst:669
|
||
msgid ""
|
||
"Arguably the class has a name: even though it is bound to two names and "
|
||
"invoked through the name B the created instance is still reported as an "
|
||
"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 ""
|
||
"Le fait que la classe ait un nom est discutable, bien qu'elles soit liée à "
|
||
"deux noms, et qu'elle soit appelée via le nom B, l'instance crée déclare "
|
||
"tout de même être une instance de la classe A. De même Il est impossible de "
|
||
"dire si le nom de l'instance est a ou b, les deux noms sont attachés à la "
|
||
"même valeur."
|
||
|
||
#: ../Doc/faq/programming.rst:674
|
||
msgid ""
|
||
"Generally speaking it should not be necessary for your code to \"know the "
|
||
"names\" of particular values. Unless you are deliberately writing "
|
||
"introspective programs, this is usually an indication that a change of "
|
||
"approach might be beneficial."
|
||
msgstr ""
|
||
"De façon général, il ne devrait pas être nécessaire pour votre application "
|
||
"de \"connaître le nom\" d'une valeur particulière. À moins que vous soyez "
|
||
"délibérément en train d'écrire un programme introspectif, c'est souvent une "
|
||
"indication qu'un changement d'approche pourrait être bénéfique."
|
||
|
||
#: ../Doc/faq/programming.rst:679
|
||
msgid ""
|
||
"In comp.lang.python, Fredrik Lundh once gave an excellent analogy in answer "
|
||
"to this question:"
|
||
msgstr ""
|
||
"Sur comp.lang.python, Fredrik Lundh a donné un jour une excellente analogie "
|
||
"pour répondre à cette question:"
|
||
|
||
#: ../Doc/faq/programming.rst:682
|
||
msgid ""
|
||
"The same way as you get the name of that cat you found on your porch: the "
|
||
"cat (object) itself cannot tell you its name, and it doesn't really care -- "
|
||
"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 ""
|
||
"C'est pareil que trouver le nom du chat qui traîne devant votre porte: Le "
|
||
"chat (objet) ne peux pas vous dire lui même son nom, et il s'en moque un peu "
|
||
"-- alors le meilleur moyen de savoir comment il s'appelle est de demander à "
|
||
"tous vos voisins (namespaces) si c'est leur chat (objet)…."
|
||
|
||
#: ../Doc/faq/programming.rst:687
|
||
msgid ""
|
||
"....and don't be surprised if you'll find that it's known by many names, or "
|
||
"no name at all!"
|
||
msgstr ""
|
||
"…et ne soyez pas surpris si vous découvrez qu'il est connus sous plusieurs "
|
||
"noms différents, ou pas de nom du tout!"
|
||
|
||
#: ../Doc/faq/programming.rst:692
|
||
msgid "What's up with the comma operator's precedence?"
|
||
msgstr "Qu'en est-il de la précédence de l'opérateur virgule ?"
|
||
|
||
#: ../Doc/faq/programming.rst:694
|
||
msgid "Comma is not an operator in Python. Consider this session::"
|
||
msgstr ""
|
||
"La virgule n'est pas un opérateur en Python. Observez la session suivante ::"
|
||
|
||
#: ../Doc/faq/programming.rst:699
|
||
msgid ""
|
||
"Since the comma is not an operator, but a separator between expressions the "
|
||
"above is evaluated as if you had entered::"
|
||
msgstr ""
|
||
"Comme la virgule n'est pas un opérateur, mais un séparateur entre deux "
|
||
"expression, l'expression ci dessus, est évaluée de la même façon que si vous "
|
||
"aviez écrit ::"
|
||
|
||
#: ../Doc/faq/programming.rst:704
|
||
msgid "not::"
|
||
msgstr "et non ::"
|
||
|
||
#: ../Doc/faq/programming.rst:708
|
||
msgid ""
|
||
"The same is true of the various assignment operators (``=``, ``+=`` etc). "
|
||
"They are not truly operators but syntactic delimiters in assignment "
|
||
"statements."
|
||
msgstr ""
|
||
"Ceci est vrai pour tous les opérateurs d'assignations (``=``, ``+=`` etc). "
|
||
"Ce ne sont pas vraiment des opérateurs mais des délimiteurs syntaxiques dans "
|
||
"les instructions d'assignation."
|
||
|
||
#: ../Doc/faq/programming.rst:713
|
||
msgid "Is there an equivalent of C's \"?:\" ternary operator?"
|
||
msgstr "Existe-t-il un équivalent à l'opérateur ternaire \"?:\" du C ?"
|
||
|
||
#: ../Doc/faq/programming.rst:715
|
||
msgid "Yes, there is. The syntax is as follows::"
|
||
msgstr "Oui, il y en a un. Sa syntaxe est la suivante : ::"
|
||
|
||
#: ../Doc/faq/programming.rst:722
|
||
msgid ""
|
||
"Before this syntax was introduced in Python 2.5, a common idiom was to use "
|
||
"logical operators::"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:727
|
||
msgid ""
|
||
"However, this idiom is unsafe, as it can give wrong results when *on_true* "
|
||
"has a false boolean value. Therefore, it is always better to use the ``... "
|
||
"if ... else ...`` form."
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:733
|
||
msgid "Is it possible to write obfuscated one-liners in Python?"
|
||
msgstr ""
|
||
"Est-il possible d'écrire des programmes obscurcis (*obfuscated*) d'une ligne "
|
||
"en Python ?"
|
||
|
||
#: ../Doc/faq/programming.rst:735
|
||
msgid ""
|
||
"Yes. Usually this is done by nesting :keyword:`lambda` within :keyword:"
|
||
"`lambda`. See the following three examples, due to Ulf Bartelt::"
|
||
msgstr ""
|
||
"Oui. Cela est généralement réalisé en imbriquant les :keyword:`lambda` dans "
|
||
"des :keyword:`lambda`. Observez les trois exemples suivants, contribués par "
|
||
"Ulf Bartelt ::"
|
||
|
||
#: ../Doc/faq/programming.rst:762
|
||
msgid "Don't try this at home, kids!"
|
||
msgstr "Les enfants, ne faîtes pas ça chez vous !"
|
||
|
||
#: ../Doc/faq/programming.rst:766
|
||
msgid "Numbers and strings"
|
||
msgstr "Nombres et chaînes de caractères"
|
||
|
||
#: ../Doc/faq/programming.rst:769
|
||
msgid "How do I specify hexadecimal and octal integers?"
|
||
msgstr "Comment puis-je écrire des entiers hexadécimaux ou octaux ?"
|
||
|
||
#: ../Doc/faq/programming.rst:771
|
||
msgid ""
|
||
"To specify an octal digit, precede the octal value with a zero, and then a "
|
||
"lower or uppercase \"o\". For example, to set the variable \"a\" to the "
|
||
"octal value \"10\" (8 in decimal), type::"
|
||
msgstr ""
|
||
"Pour écrire un entier octal, faites précéder la valeur octale par un zéro, "
|
||
"puis un \"o\" majuscule ou minuscule. Par exemple assigner la valeur octale "
|
||
"\"10\" (8 en décimal) à la variable \"a\", tapez ::"
|
||
|
||
#: ../Doc/faq/programming.rst:779
|
||
msgid ""
|
||
"Hexadecimal is just as easy. Simply precede the hexadecimal number with a "
|
||
"zero, and then a lower or uppercase \"x\". Hexadecimal digits can be "
|
||
"specified in lower or uppercase. For example, in the Python interpreter::"
|
||
msgstr ""
|
||
"L'hexadécimal est tout aussi simple, faîtes précéder le nombre hexadécimal "
|
||
"par un zéro, puis un \"x\" majuscule ou minuscule. Les nombres hexadécimaux "
|
||
"peuvent être écrit en majuscules ou en minuscules. Par exemple, dans "
|
||
"l'interpréteur Python ::"
|
||
|
||
#: ../Doc/faq/programming.rst:792
|
||
msgid "Why does -22 // 10 return -3?"
|
||
msgstr "Pourquoi -22 // 10 donne-t-il -3 ?"
|
||
|
||
#: ../Doc/faq/programming.rst:794
|
||
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 ""
|
||
"Cela est principalement due à la volonté que ``i % j`` ait le même signe que "
|
||
"j. Si vous voulez cela, vous voulez aussi : ::"
|
||
|
||
#: ../Doc/faq/programming.rst:799
|
||
msgid ""
|
||
"then integer division has to return the floor. C also requires that "
|
||
"identity to hold, and then compilers that truncate ``i // j`` need to make "
|
||
"``i % j`` have the same sign as ``i``."
|
||
msgstr ""
|
||
"Alors la division entière doit renvoyer l'entier inférieur. Le C demande "
|
||
"aussi à ce que cette égalité soit vérifiée, et donc les compilateur qui "
|
||
"tronquent ``i // j`` ont besoin que ``i % j`` ait le même signe que ``i``."
|
||
|
||
#: ../Doc/faq/programming.rst:803
|
||
msgid ""
|
||
"There are few real use cases for ``i % j`` when ``j`` is negative. When "
|
||
"``j`` is positive, there are many, and in virtually all of them it's more "
|
||
"useful for ``i % j`` to be ``>= 0``. If the clock says 10 now, what did it "
|
||
"say 200 hours ago? ``-190 % 12 == 2`` is useful; ``-190 % 12 == -10`` is a "
|
||
"bug waiting to bite."
|
||
msgstr ""
|
||
"Il y a peu de cas d'utilisation réels pour ``i%j`` quand ``j`` est négatif. "
|
||
"Quand ``j`` est positif, il y en a beaucoup, et dans pratiquement tous, il "
|
||
"est plus utile que ``i % j`` soit ``>=0``. Si l'horloge dit 10h maintenant, "
|
||
"que disait-elle il y a 200 heures? ``-190%12 == 2`` est utile; ``-192 % 12 "
|
||
"== -10`` est un bug qui attends pour mordre."
|
||
|
||
#: ../Doc/faq/programming.rst:811
|
||
msgid "How do I convert a string to a number?"
|
||
msgstr "Comment puis-je convertir une chaine de caractère en nombre?"
|
||
|
||
#: ../Doc/faq/programming.rst:813
|
||
msgid ""
|
||
"For integers, use the built-in :func:`int` type constructor, e.g. "
|
||
"``int('144') == 144``. Similarly, :func:`float` converts to floating-point, "
|
||
"e.g. ``float('144') == 144.0``."
|
||
msgstr ""
|
||
"Pour les entiers, utilisez la fonction built-in :func:`int` de type "
|
||
"constructeur, par exemple ``int('144') == 144``. De façon similaire, :func:"
|
||
"`float` convertit en valeur flottante, par exemple ``float('144') == 144.0``."
|
||
|
||
#: ../Doc/faq/programming.rst:817
|
||
msgid ""
|
||
"By default, these interpret the number as decimal, so that ``int('0144') == "
|
||
"144`` and ``int('0x144')`` raises :exc:`ValueError`. ``int(string, base)`` "
|
||
"takes the base to convert from as a second optional argument, so "
|
||
"``int('0x144', 16) == 324``. If the base is specified as 0, the number is "
|
||
"interpreted using Python's rules: a leading '0o' indicates octal, and '0x' "
|
||
"indicates a hex number."
|
||
msgstr ""
|
||
"Par défaut, ces fonctions interprètent les nombre en tant que décimaux, de "
|
||
"telles façons que ``int('0144') == 144`` et ``int('0x144')`` lève une :exc:"
|
||
"`ValueError`. ``int(string, base)`` prends la base depuis laquelle il faut "
|
||
"convertir dans le second argument, optionnel, donc ``int('0x144', 16) == "
|
||
"324``. Si la base donnée est 0, le nombre est interprété selon les règles "
|
||
"Python: un préfixe '0o' indique de l'octal, et '0x' indique de l'hexadécimal."
|
||
|
||
#: ../Doc/faq/programming.rst:823
|
||
msgid ""
|
||
"Do not use the built-in function :func:`eval` if all you need is to convert "
|
||
"strings to numbers. :func:`eval` will be significantly slower and it "
|
||
"presents a security risk: someone could pass you a Python expression that "
|
||
"might have unwanted side effects. For example, someone could pass "
|
||
"``__import__('os').system(\"rm -rf $HOME\")`` which would erase your home "
|
||
"directory."
|
||
msgstr ""
|
||
"N'utilisez pas la fonction built-in :func:`eval` si tout ce que vous avez "
|
||
"besoin est de convertir des chaines en nombres. :func:`eval` sera "
|
||
"significativement plus lent et implique des risque de sécurité: quelqu'un "
|
||
"pourrait vous envoyez une expression Python pouvant avoir des effets de bord "
|
||
"indésirables. Par exemple, quelqu'un pourrait passer ``__import__('os')."
|
||
"system(\"rm -rf $HOME\")`` ce qui aurait pour effet d'effacer votre "
|
||
"répertoire personnel."
|
||
|
||
#: ../Doc/faq/programming.rst:830
|
||
msgid ""
|
||
":func:`eval` also has the effect of interpreting numbers as Python "
|
||
"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` a aussi pour effet d'interpréter les nombres comme comme des "
|
||
"expression Python, ainsi ``eval('09')`` produit une erreur de syntaxe par ce "
|
||
"que Python ne permet pas les '0' en tête d'un nombre décimal (à l'exception "
|
||
"du nombre '0')."
|
||
|
||
#: ../Doc/faq/programming.rst:836
|
||
msgid "How do I convert a number to a string?"
|
||
msgstr "Comment convertir un nombre en chaine de caractère?"
|
||
|
||
#: ../Doc/faq/programming.rst:838
|
||
msgid ""
|
||
"To convert, e.g., the number 144 to the string '144', use the built-in type "
|
||
"constructor :func:`str`. If you want a hexadecimal or octal representation, "
|
||
"use the built-in functions :func:`hex` or :func:`oct`. For fancy "
|
||
"formatting, see the :ref:`f-strings` and :ref:`formatstrings` sections, e.g. "
|
||
"``\"{:04d}\".format(144)`` yields ``'0144'`` and ``\"{:.3f}\"."
|
||
"format(1.0/3.0)`` yields ``'0.333'``."
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:847
|
||
msgid "How do I modify a string in place?"
|
||
msgstr "Comment modifier une chaine de caractère \"en place\"?"
|
||
|
||
#: ../Doc/faq/programming.rst:849
|
||
msgid ""
|
||
"You can't, because strings are immutable. In most situations, you should "
|
||
"simply construct a new string from the various parts you want to assemble it "
|
||
"from. However, if you need an object with the ability to modify in-place "
|
||
"unicode data, try using an :class:`io.StringIO` object or the :mod:`array` "
|
||
"module::"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:879
|
||
msgid "How do I use strings to call functions/methods?"
|
||
msgstr ""
|
||
"Comment utiliser des chaines de caractères pour appeler des fonctions/"
|
||
"méthodes?"
|
||
|
||
#: ../Doc/faq/programming.rst:881
|
||
msgid "There are various techniques."
|
||
msgstr "Il y a différentes techniques."
|
||
|
||
#: ../Doc/faq/programming.rst:883
|
||
msgid ""
|
||
"The best is to use a dictionary that maps strings to functions. The primary "
|
||
"advantage of this technique is that the strings do not need to match the "
|
||
"names of the functions. This is also the primary technique used to emulate "
|
||
"a case construct::"
|
||
msgstr ""
|
||
"La meilleure est d'utiliser un dictionnaire qui fait correspondre les "
|
||
"chaines de caractères à des fonctions. Le principal avantage de cette "
|
||
"technique est que les chaines n'ont pas besoin d'être égales aux noms de "
|
||
"fonctions. C'est aussi la principale façon d'imiter la construction \"case"
|
||
"\" ::"
|
||
|
||
#: ../Doc/faq/programming.rst:898
|
||
msgid "Use the built-in function :func:`getattr`::"
|
||
msgstr "Utiliser la fonction :func:`getattr` ::"
|
||
|
||
#: ../Doc/faq/programming.rst:903
|
||
msgid ""
|
||
"Note that :func:`getattr` works on any object, including classes, class "
|
||
"instances, modules, and so on."
|
||
msgstr ""
|
||
"Notez que :func:`getattr` marche sur n'importe quel objet, ceci inclue les "
|
||
"classes, les instances de classes, les modules et ainsi de suite."
|
||
|
||
#: ../Doc/faq/programming.rst:906
|
||
msgid "This is used in several places in the standard library, like this::"
|
||
msgstr ""
|
||
"Ceci est utilisé dans plusieurs endroit de la bibliothèque standard, de "
|
||
"cette façon ::"
|
||
|
||
#: ../Doc/faq/programming.rst:919
|
||
msgid "Use :func:`locals` or :func:`eval` to resolve the function name::"
|
||
msgstr ""
|
||
"Utilisez :func:`locals` ou :func:`eval` pour résoudre le nom de fonction ::"
|
||
|
||
#: ../Doc/faq/programming.rst:932
|
||
msgid ""
|
||
"Note: Using :func:`eval` is slow and dangerous. If you don't have absolute "
|
||
"control over the contents of the string, someone could pass a string that "
|
||
"resulted in an arbitrary function being executed."
|
||
msgstr ""
|
||
"Note: En utilisant :func:`eval` est lent est dangereux. Si vous n'avez pas "
|
||
"un contrôle absolu sur le contenu de la chaine de caractère, quelqu'un peut "
|
||
"passer une chaine de caractère pouvant résulter en l'exécution de code "
|
||
"arbitraire."
|
||
|
||
#: ../Doc/faq/programming.rst:937
|
||
msgid ""
|
||
"Is there an equivalent to Perl's chomp() for removing trailing newlines from "
|
||
"strings?"
|
||
msgstr ""
|
||
"Existe-t'il un équivalent à la fonction chomp() de Perl, pour retirer les "
|
||
"caractères de fin de ligne d'une chaine de caractère?"
|
||
|
||
#: ../Doc/faq/programming.rst:939
|
||
msgid ""
|
||
"You can use ``S.rstrip(\"\\r\\n\")`` to remove all occurrences of any line "
|
||
"terminator from the end of the string ``S`` without removing other trailing "
|
||
"whitespace. If the string ``S`` represents more than one line, with several "
|
||
"empty lines at the end, the line terminators for all the blank lines will be "
|
||
"removed::"
|
||
msgstr ""
|
||
"Vous pouvez utiliser ``S.rstrip(\"\\r\\n\")`` pour retirer toute occurrence "
|
||
"de tout marqueur de fin de ligne, à la fin d'une chaîne de caractère ``S``, "
|
||
"sans en retirer aucun espace. Si la chaîne ``S`` représente plus d'une "
|
||
"ligne, avec plusieurs lignes vides, les marqueurs de fin de de lignes de "
|
||
"chaque lignes vides seront retirés : ::"
|
||
|
||
#: ../Doc/faq/programming.rst:951
|
||
msgid ""
|
||
"Since this is typically only desired when reading text one line at a time, "
|
||
"using ``S.rstrip()`` this way works well."
|
||
msgstr ""
|
||
"Du fait que ce soit principalement utile en lisant un texte ligne à ligne, "
|
||
"utiliser ``S.rstrip()`` devrait marcher correctement."
|
||
|
||
#: ../Doc/faq/programming.rst:956
|
||
msgid "Is there a scanf() or sscanf() equivalent?"
|
||
msgstr "Existe-t'il un équivalent à scanf() ou sscanf()?"
|
||
|
||
#: ../Doc/faq/programming.rst:958
|
||
msgid "Not as such."
|
||
msgstr "Pas exactement."
|
||
|
||
#: ../Doc/faq/programming.rst:960
|
||
msgid ""
|
||
"For simple input parsing, the easiest approach is usually to split the line "
|
||
"into whitespace-delimited words using the :meth:`~str.split` method of "
|
||
"string objects and then convert decimal strings to numeric values using :"
|
||
"func:`int` or :func:`float`. ``split()`` supports an optional \"sep\" "
|
||
"parameter which is useful if the line uses something other than whitespace "
|
||
"as a separator."
|
||
msgstr ""
|
||
"Pour une simple analyse de chaine, l'approche la plus simple est "
|
||
"généralement de découper la ligne en mots délimités par des espaces, en "
|
||
"utilisant la méthode :meth:`~str.split` des objets chaine de caractères, et "
|
||
"ensuite de convertir les chaines de décimales en valeurs numériques en "
|
||
"utilisant la fonction :func:`int` ou :func:`float`, ``split()`` supporte un "
|
||
"paramètre optionnel \"sep\" qui est utile si la ligne utilise autre chose "
|
||
"que des espaces comme séparateur."
|
||
|
||
#: ../Doc/faq/programming.rst:966
|
||
msgid ""
|
||
"For more complicated input parsing, regular expressions are more powerful "
|
||
"than C's :c:func:`sscanf` and better suited for the task."
|
||
msgstr ""
|
||
"Pour les analyses plus compliquées, les expressions rationnelles sont plus "
|
||
"puissantes que la fonction :c:func:`sscanf` de C et mieux adaptées à la "
|
||
"tâche."
|
||
|
||
#: ../Doc/faq/programming.rst:971
|
||
msgid "What does 'UnicodeDecodeError' or 'UnicodeEncodeError' error mean?"
|
||
msgstr ""
|
||
"Que signifient les erreurs 'UnicodeDecodeError' ou 'UnicodeEncodeError' ?"
|
||
|
||
#: ../Doc/faq/programming.rst:973
|
||
msgid "See the :ref:`unicode-howto`."
|
||
msgstr "Regardez :ref:`unicode-howto`."
|
||
|
||
#: ../Doc/faq/programming.rst:977
|
||
msgid "Performance"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:980
|
||
msgid "My program is too slow. How do I speed it up?"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:982
|
||
msgid ""
|
||
"That's a tough one, in general. First, here are a list of things to "
|
||
"remember before diving further:"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:985
|
||
msgid ""
|
||
"Performance characteristics vary across Python implementations. This FAQ "
|
||
"focusses on :term:`CPython`."
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:987
|
||
msgid ""
|
||
"Behaviour can vary across operating systems, especially when talking about I/"
|
||
"O or multi-threading."
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:989
|
||
msgid ""
|
||
"You should always find the hot spots in your program *before* attempting to "
|
||
"optimize any code (see the :mod:`profile` module)."
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:991
|
||
msgid ""
|
||
"Writing benchmark scripts will allow you to iterate quickly when searching "
|
||
"for improvements (see the :mod:`timeit` module)."
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:993
|
||
msgid ""
|
||
"It is highly recommended to have good code coverage (through unit testing or "
|
||
"any other technique) before potentially introducing regressions hidden in "
|
||
"sophisticated optimizations."
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:997
|
||
msgid ""
|
||
"That being said, there are many tricks to speed up Python code. Here are "
|
||
"some general principles which go a long way towards reaching acceptable "
|
||
"performance levels:"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:1001
|
||
msgid ""
|
||
"Making your algorithms faster (or changing to faster ones) can yield much "
|
||
"larger benefits than trying to sprinkle micro-optimization tricks all over "
|
||
"your code."
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:1005
|
||
msgid ""
|
||
"Use the right data structures. Study documentation for the :ref:`bltin-"
|
||
"types` and the :mod:`collections` module."
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:1008
|
||
msgid ""
|
||
"When the standard library provides a primitive for doing something, it is "
|
||
"likely (although not guaranteed) to be faster than any alternative you may "
|
||
"come up with. This is doubly true for primitives written in C, such as "
|
||
"builtins and some extension types. For example, be sure to use either the :"
|
||
"meth:`list.sort` built-in method or the related :func:`sorted` function to "
|
||
"do sorting (and see the :ref:`sortinghowto` for examples of moderately "
|
||
"advanced usage)."
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:1016
|
||
msgid ""
|
||
"Abstractions tend to create indirections and force the interpreter to work "
|
||
"more. If the levels of indirection outweigh the amount of useful work done, "
|
||
"your program will be slower. You should avoid excessive abstraction, "
|
||
"especially under the form of tiny functions or methods (which are also often "
|
||
"detrimental to readability)."
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:1022
|
||
msgid ""
|
||
"If you have reached the limit of what pure Python can allow, there are tools "
|
||
"to take you further away. For example, `Cython <http://cython.org>`_ can "
|
||
"compile a slightly modified version of Python code into a C extension, and "
|
||
"can be used on many different platforms. Cython can take advantage of "
|
||
"compilation (and optional type annotations) to make your code significantly "
|
||
"faster than when interpreted. If you are confident in your C programming "
|
||
"skills, you can also :ref:`write a C extension module <extending-index>` "
|
||
"yourself."
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:1032
|
||
msgid ""
|
||
"The wiki page devoted to `performance tips <https://wiki.python.org/moin/"
|
||
"PythonSpeed/PerformanceTips>`_."
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:1038
|
||
msgid "What is the most efficient way to concatenate many strings together?"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:1040
|
||
msgid ""
|
||
":class:`str` and :class:`bytes` objects are immutable, therefore "
|
||
"concatenating many strings together is inefficient as each concatenation "
|
||
"creates a new object. In the general case, the total runtime cost is "
|
||
"quadratic in the total string length."
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:1045
|
||
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 ""
|
||
|
||
#: ../Doc/faq/programming.rst:1053
|
||
msgid "(another reasonably efficient idiom is to use :class:`io.StringIO`)"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:1055
|
||
msgid ""
|
||
"To accumulate many :class:`bytes` objects, the recommended idiom is to "
|
||
"extend a :class:`bytearray` object using in-place concatenation (the ``+=`` "
|
||
"operator)::"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:1064
|
||
msgid "Sequences (Tuples/Lists)"
|
||
msgstr "Sequences (Tuples/Lists)"
|
||
|
||
#: ../Doc/faq/programming.rst:1067
|
||
msgid "How do I convert between tuples and lists?"
|
||
msgstr "Comment convertir les listes en tuples et inversement?"
|
||
|
||
#: ../Doc/faq/programming.rst:1069
|
||
msgid ""
|
||
"The type constructor ``tuple(seq)`` converts any sequence (actually, any "
|
||
"iterable) into a tuple with the same items in the same order."
|
||
msgstr ""
|
||
"Le constructeur de type ``tuple(seq)`` convertit toute séquence (en fait "
|
||
"tout itérable) en un tuple avec les mêmes éléments dans le même ordre…."
|
||
|
||
#: ../Doc/faq/programming.rst:1072
|
||
msgid ""
|
||
"For example, ``tuple([1, 2, 3])`` yields ``(1, 2, 3)`` and ``tuple('abc')`` "
|
||
"yields ``('a', 'b', 'c')``. If the argument is a tuple, it does not make a "
|
||
"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 ""
|
||
"Par exemple ``tuple([1, 2, 3])`` renvoi ``(1, 2, 3)`` et ``tuple('abc')`` "
|
||
"renvoi ``('a', 'b', 'c')``. Si l'argument est un tuple, cela ne crèe pas une "
|
||
"copie, mais renvoi le même objet, ce qui fait de :func:`tuple` un fonction "
|
||
"économique à appeler quand vous ne savez pas si votre objet est déjà un "
|
||
"tulpe."
|
||
|
||
#: ../Doc/faq/programming.rst:1077
|
||
msgid ""
|
||
"The type constructor ``list(seq)`` converts any sequence or iterable into a "
|
||
"list with the same items in the same order. For example, ``list((1, 2, "
|
||
"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 ""
|
||
"Le constructeur de type ``list(seq)`` convertit toute séquence ou itérable "
|
||
"en liste contenant les mêmes éléments dans le même ordre. Par exemple, "
|
||
"``list((1,2,3))`` renvoie ``[1,2,3]`` et ``list('abc')`` renvoie "
|
||
"``['a','b','c']``. Si l'argument est une liste, il renvoie une copie, de la "
|
||
"même façon que ``seq[:]``."
|
||
|
||
#: ../Doc/faq/programming.rst:1084
|
||
msgid "What's a negative index?"
|
||
msgstr "Qu'est-ce qu'un indexe négatif?"
|
||
|
||
#: ../Doc/faq/programming.rst:1086
|
||
msgid ""
|
||
"Python sequences are indexed with positive numbers and negative numbers. "
|
||
"For positive numbers 0 is the first index 1 is the second index and so "
|
||
"forth. For negative indices -1 is the last index and -2 is the penultimate "
|
||
"(next to last) index and so forth. Think of ``seq[-n]`` as the same as "
|
||
"``seq[len(seq)-n]``."
|
||
msgstr ""
|
||
"Les séquences Python sont indexées avec des nombres positifs aussi bien que "
|
||
"négatifs. Pour les nombres positifs, 0 est le premier index, 1 est le "
|
||
"second, et ainsi de suite. Pour les indexes négatifs, -1 est le dernier "
|
||
"index, -2 est le pénultième (avant dernier), et ainsi de suite. On peut "
|
||
"aussi dire que ``seq[-n]`` est équivalent à ``seq[len(seq)-n]``."
|
||
|
||
#: ../Doc/faq/programming.rst:1091
|
||
msgid ""
|
||
"Using negative indices can be very convenient. For example ``S[:-1]`` is "
|
||
"all of the string except for its last character, which is useful for "
|
||
"removing the trailing newline from a string."
|
||
msgstr ""
|
||
"Utiliser des indexes négatifs peut être très pratique. Par exemple "
|
||
"``S[:-1]`` indique la chaine entière a l'exception du dernier caractère, ce "
|
||
"qui est pratique pour retirer un caractère de fin de ligne en fin d'une "
|
||
"chaine."
|
||
|
||
#: ../Doc/faq/programming.rst:1097
|
||
msgid "How do I iterate over a sequence in reverse order?"
|
||
msgstr "Comment itérer à rebours sur une séquence?"
|
||
|
||
#: ../Doc/faq/programming.rst:1099
|
||
msgid ""
|
||
"Use the :func:`reversed` built-in function, which is new in Python 2.4::"
|
||
msgstr ""
|
||
"Utilisez la fonction embarquée :func:`reversed`, qui est apparue en Python "
|
||
"2.4 ::"
|
||
|
||
#: ../Doc/faq/programming.rst:1104
|
||
msgid ""
|
||
"This won't touch your original sequence, but build a new copy with reversed "
|
||
"order to iterate over."
|
||
msgstr ""
|
||
"Cela ne modifiera pas votre séquence initiale, mais construira à la place "
|
||
"une copie en ordre inverse pour itérer dessus."
|
||
|
||
#: ../Doc/faq/programming.rst:1107
|
||
msgid "With Python 2.3, you can use an extended slice syntax::"
|
||
msgstr "Avec Python 2.3 vous pouvez utiliser la syntaxe étendue de tranches ::"
|
||
|
||
#: ../Doc/faq/programming.rst:1114
|
||
msgid "How do you remove duplicates from a list?"
|
||
msgstr "Comment retirer les doublons d'une liste?"
|
||
|
||
#: ../Doc/faq/programming.rst:1116
|
||
msgid "See the Python Cookbook for a long discussion of many ways to do this:"
|
||
msgstr ""
|
||
"Lisez le Python Cookbook pour trouver une longue discussion sur les "
|
||
"nombreuses façons de faire cela:"
|
||
|
||
#: ../Doc/faq/programming.rst:1118
|
||
msgid "https://code.activestate.com/recipes/52560/"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:1120
|
||
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 changer l'ordre de la liste ne vous dérange pas, commencez par trier "
|
||
"celle ci, puis parcourez la d'un bout à l'autre, en supprimant les doublons "
|
||
"trouvés en chemin ::"
|
||
|
||
#: ../Doc/faq/programming.rst:1132
|
||
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 tous les éléments de la liste peuvent être utilisés comme des clés de "
|
||
"dictionnaire (càd, qu'elles sont toutes :term:`hachables <hashable>`) ceci "
|
||
"est souvent plus rapide : ::"
|
||
|
||
#: ../Doc/faq/programming.rst:1137
|
||
msgid ""
|
||
"This converts the list into a set, thereby removing duplicates, and then "
|
||
"back into a list."
|
||
msgstr ""
|
||
"Ceci convertis la liste en un ensemble, ce qui supprime automatiquement les "
|
||
"doublons, puis la transforme à nouveau en liste."
|
||
|
||
#: ../Doc/faq/programming.rst:1142
|
||
msgid "How do you make an array in Python?"
|
||
msgstr "Comment construire un tableau en Python?"
|
||
|
||
#: ../Doc/faq/programming.rst:1144
|
||
msgid "Use a list::"
|
||
msgstr "Utilisez une liste ::"
|
||
|
||
#: ../Doc/faq/programming.rst:1148
|
||
msgid ""
|
||
"Lists are equivalent to C or Pascal arrays in their time complexity; the "
|
||
"primary difference is that a Python list can contain objects of many "
|
||
"different types."
|
||
msgstr ""
|
||
"Les listes ont un cout équivalent à celui des tableau C ou Pascal; la "
|
||
"principale différence est qu'une liste Python peut contenir des objets de "
|
||
"différents types."
|
||
|
||
#: ../Doc/faq/programming.rst:1151
|
||
msgid ""
|
||
"The ``array`` module also provides methods for creating arrays of fixed "
|
||
"types with compact representations, but they are slower to index than "
|
||
"lists. Also note that the Numeric extensions and others define array-like "
|
||
"structures with various characteristics as well."
|
||
msgstr ""
|
||
"Le module ``array`` fournit des méthodes pour créer des tableaux de types "
|
||
"fixes dans une représentation compacte, mais ils sont plus lents à indexer "
|
||
"que les listes. Notez aussi que l'extension ``Numeric`` et d'autres, "
|
||
"fournissent différentes structures de types tableaux, avec des "
|
||
"caractéristiques différentes."
|
||
|
||
#: ../Doc/faq/programming.rst:1156
|
||
msgid ""
|
||
"To get Lisp-style linked lists, you can emulate cons cells using tuples::"
|
||
msgstr ""
|
||
"Pour obtenir des listes chainées de type Lisp, vous pouvez émuler les \"cons "
|
||
"cells\" en utilisant des tuples ::"
|
||
|
||
#: ../Doc/faq/programming.rst:1160
|
||
msgid ""
|
||
"If mutability is desired, you could use lists instead of tuples. Here the "
|
||
"analogue of lisp car is ``lisp_list[0]`` and the analogue of cdr is "
|
||
"``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 vous voulez pouvoir modifier les éléments, utilisez une liste plutôt "
|
||
"qu'un tuple. Ici la version équivalente au \"car\" de Lisp est "
|
||
"``lisp_list[0]`` et l'équivalent à \"cdr\" est ``list_lip[1]``. Ne faîtes "
|
||
"ceci que si vous êtes réellement sûr d'en avoir besoin, cette méthode est en "
|
||
"générale bien plus lente que les listes Python."
|
||
|
||
#: ../Doc/faq/programming.rst:1169
|
||
msgid "How do I create a multidimensional list?"
|
||
msgstr "Comment puis-je créer une liste à plusieurs dimensions?"
|
||
|
||
#: ../Doc/faq/programming.rst:1171
|
||
msgid "You probably tried to make a multidimensional array like this::"
|
||
msgstr ""
|
||
"Vous avez probablement essayé de créer une liste à plusieurs dimensions de "
|
||
"cette façon ::"
|
||
|
||
#: ../Doc/faq/programming.rst:1175
|
||
msgid "This looks correct if you print it:"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:1186
|
||
msgid "But when you assign a value, it shows up in multiple places:"
|
||
msgstr ""
|
||
"Mais quand vous assignez une valeur, elle apparait en de multiples endroits::"
|
||
|
||
#: ../Doc/faq/programming.rst:1198
|
||
msgid ""
|
||
"The reason is that replicating a list with ``*`` doesn't create copies, it "
|
||
"only creates references to the existing objects. The ``*3`` creates a list "
|
||
"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 raison en est que dupliquer une liste en utilisant ``*`` ne crée pas de "
|
||
"copies, cela crée seulement des références aux objets existants. Le ``*3`` "
|
||
"crée une liste contenant trois références à la même liste de longueur deux. "
|
||
"Un changement dans une colonne apparaîtra donc dans toutes les colonnes. Ce "
|
||
"qui n'est de façon quasi certaine, pas ce que vous souhaitez."
|
||
|
||
#: ../Doc/faq/programming.rst:1203
|
||
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 ""
|
||
"L'approche suggérée est de créer une liste de la longueur désiré d'abords, "
|
||
"puis de remplir tous les éléments avec une chaîne nouvellement créée ::"
|
||
|
||
#: ../Doc/faq/programming.rst:1210
|
||
msgid ""
|
||
"This generates a list containing 3 different lists of length two. You can "
|
||
"also use a list comprehension::"
|
||
msgstr ""
|
||
"Cette liste générée contient trois listes différentes de longueur deux. Vous "
|
||
"pouvez aussi utilisez la notation de compréhension de listes ::"
|
||
|
||
#: ../Doc/faq/programming.rst:1216
|
||
msgid ""
|
||
"Or, you can use an extension that provides a matrix datatype; `NumPy <http://"
|
||
"www.numpy.org/>`_ is the best known."
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:1221
|
||
msgid "How do I apply a method to a sequence of objects?"
|
||
msgstr "Comment appliquer une méthode à une séquence d'objets?"
|
||
|
||
#: ../Doc/faq/programming.rst:1223
|
||
msgid "Use a list comprehension::"
|
||
msgstr "Utilisez une compréhension de liste ::"
|
||
|
||
#: ../Doc/faq/programming.rst:1230
|
||
msgid ""
|
||
"Why does a_tuple[i] += ['item'] raise an exception when the addition works?"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:1232
|
||
msgid ""
|
||
"This is because of a combination of the fact that augmented assignment "
|
||
"operators are *assignment* operators, and the difference between mutable and "
|
||
"immutable objects in Python."
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:1236
|
||
msgid ""
|
||
"This discussion applies in general when augmented assignment operators are "
|
||
"applied to elements of a tuple that point to mutable objects, but we'll use "
|
||
"a ``list`` and ``+=`` as our exemplar."
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:1240
|
||
msgid "If you wrote::"
|
||
msgstr "Si vous écrivez : ::"
|
||
|
||
#: ../Doc/faq/programming.rst:1248
|
||
msgid ""
|
||
"The reason for the exception should be immediately clear: ``1`` is added to "
|
||
"the object ``a_tuple[0]`` points to (``1``), producing the result object, "
|
||
"``2``, but when we attempt to assign the result of the computation, ``2``, "
|
||
"to element ``0`` of the tuple, we get an error because we can't change what "
|
||
"an element of a tuple points to."
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:1254
|
||
msgid ""
|
||
"Under the covers, what this augmented assignment statement is doing is "
|
||
"approximately this::"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:1263
|
||
msgid ""
|
||
"It is the assignment part of the operation that produces the error, since a "
|
||
"tuple is immutable."
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:1266
|
||
msgid "When you write something like::"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:1274
|
||
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 ""
|
||
|
||
#: ../Doc/faq/programming.rst:1280
|
||
msgid ""
|
||
"To see why this happens, you need to know that (a) if an object implements "
|
||
"an ``__iadd__`` magic method, it gets called when the ``+=`` augmented "
|
||
"assignment is executed, and its return value is what gets used in the "
|
||
"assignment statement; and (b) for lists, ``__iadd__`` is equivalent to "
|
||
"calling ``extend`` on the list and returning the list. That's why we say "
|
||
"that for lists, ``+=`` is a \"shorthand\" for ``list.extend``::"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:1292
|
||
msgid "This is equivalent to::"
|
||
msgstr "C’est équivalent à ::"
|
||
|
||
#: ../Doc/faq/programming.rst:1297
|
||
msgid ""
|
||
"The object pointed to by a_list has been mutated, and the pointer to the "
|
||
"mutated object is assigned back to ``a_list``. The end result of the "
|
||
"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 ""
|
||
|
||
#: ../Doc/faq/programming.rst:1302
|
||
msgid "Thus, in our tuple example what is happening is equivalent to::"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:1310
|
||
msgid ""
|
||
"The ``__iadd__`` succeeds, and thus the list is extended, but even though "
|
||
"``result`` points to the same object that ``a_tuple[0]`` already points to, "
|
||
"that final assignment still results in an error, because tuples are "
|
||
"immutable."
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:1316
|
||
msgid "Dictionaries"
|
||
msgstr "Dictionnaires"
|
||
|
||
#: ../Doc/faq/programming.rst:1319
|
||
msgid ""
|
||
"How can I get a dictionary to store and display its keys in a consistent "
|
||
"order?"
|
||
msgstr ""
|
||
"Comment puis-je faire stocker et afficher les clefs d'un dictionnaire dans "
|
||
"un ordre cohérent ?"
|
||
|
||
#: ../Doc/faq/programming.rst:1321
|
||
msgid "Use :class:`collections.OrderedDict`."
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:1324
|
||
msgid ""
|
||
"I want to do a complicated sort: can you do a Schwartzian Transform in "
|
||
"Python?"
|
||
msgstr ""
|
||
"Je souhaite faire un tri compliqué: peut on faire une transformation de "
|
||
"Schwartz en Python?"
|
||
|
||
#: ../Doc/faq/programming.rst:1326
|
||
msgid ""
|
||
"The technique, attributed to Randal Schwartz of the Perl community, sorts "
|
||
"the elements of a list by a metric which maps each element to its \"sort "
|
||
"value\". In Python, use the ``key`` argument for the :meth:`list.sort` "
|
||
"method::"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:1335
|
||
msgid "How can I sort one list by values from another list?"
|
||
msgstr ""
|
||
"Comment puis-je trier une liste en fonction des valeurs d'une autre liste?"
|
||
|
||
#: ../Doc/faq/programming.rst:1337
|
||
msgid ""
|
||
"Merge them into an iterator of tuples, sort the resulting list, and then "
|
||
"pick out the element you want. ::"
|
||
msgstr ""
|
||
"Fusionnez les dans un itérateur de tuples, triez la liste obtenue, puis "
|
||
"choisissez l'élément que vous voulez. ::"
|
||
|
||
#: ../Doc/faq/programming.rst:1351
|
||
msgid "An alternative for the last step is::"
|
||
msgstr "Une alternative pour la dernière étape est : ::"
|
||
|
||
#: ../Doc/faq/programming.rst:1356
|
||
msgid ""
|
||
"If you find this more legible, you might prefer to use this instead of the "
|
||
"final list comprehension. However, it is almost twice as slow for long "
|
||
"lists. Why? First, the ``append()`` operation has to reallocate memory, and "
|
||
"while it uses some tricks to avoid doing that each time, it still has to do "
|
||
"it occasionally, and that costs quite a bit. Second, the expression "
|
||
"\"result.append\" requires an extra attribute lookup, and third, there's a "
|
||
"speed reduction from having to make all those function calls."
|
||
msgstr ""
|
||
"Si vous trouvez cela plus lisible, vous préférez peut-être utiliser ceci à "
|
||
"la place de la compréhension de la liste finale. Toutefois, ceci est presque "
|
||
"deux fois plus lent pour les longues listes. Pourquoi? Tout d'abord, "
|
||
"``append ()`` doit réaffecter la mémoire, et si il utilise quelques astuces "
|
||
"pour éviter de le faire à chaque fois, il doit encore le faire de temps en "
|
||
"temps, ce qui coûte assez cher. Deuxièmement, l'expression \"result.append\" "
|
||
"exige une recherche d'attribut supplémentaire, et enfin, tous ces appels de "
|
||
"fonction impactent la vitesse d'exécution."
|
||
|
||
#: ../Doc/faq/programming.rst:1366
|
||
msgid "Objects"
|
||
msgstr "Objets"
|
||
|
||
#: ../Doc/faq/programming.rst:1369
|
||
msgid "What is a class?"
|
||
msgstr "Qu'est-ce qu'une classe?"
|
||
|
||
#: ../Doc/faq/programming.rst:1371
|
||
msgid ""
|
||
"A class is the particular object type created by executing a class "
|
||
"statement. Class objects are used as templates to create instance objects, "
|
||
"which embody both the data (attributes) and code (methods) specific to a "
|
||
"datatype."
|
||
msgstr ""
|
||
"Une classe est le type d'objet particulier créé par l'exécution d'une "
|
||
"déclaration de classe. Les objets de classe sont utilisés comme modèles pour "
|
||
"créer des objets, qui incarnent à la fois les données (attributs) et le code "
|
||
"(méthodes) spécifiques à un type de données."
|
||
|
||
#: ../Doc/faq/programming.rst:1375
|
||
msgid ""
|
||
"A class can be based on one or more other classes, called its base "
|
||
"class(es). It then inherits the attributes and methods of its base classes. "
|
||
"This allows an object model to be successively refined by inheritance. You "
|
||
"might have a generic ``Mailbox`` class that provides basic accessor methods "
|
||
"for a mailbox, and subclasses such as ``MboxMailbox``, ``MaildirMailbox``, "
|
||
"``OutlookMailbox`` that handle various specific mailbox formats."
|
||
msgstr ""
|
||
"Une classe peut être fondée sur une ou plusieurs autres classes, appelée sa "
|
||
"ou ses classes de base. Il hérite alors les attributs et les méthodes de ses "
|
||
"classes de base. Cela permet à un modèle d'objet d'être successivement "
|
||
"raffinés par héritage. Vous pourriez avoir une classe générique ``Mailbox`` "
|
||
"qui fournit des méthodes d'accès de base pour une boîte aux lettres, et sous-"
|
||
"classes telles que ``MboxMailbox``, ``MaildirMailbox``, ``OutlookMailbox`` "
|
||
"qui gèrent les différents formats de boîtes aux lettres spécifiques."
|
||
|
||
#: ../Doc/faq/programming.rst:1384
|
||
msgid "What is a method?"
|
||
msgstr "Qu'est-ce qu'une méthode?"
|
||
|
||
#: ../Doc/faq/programming.rst:1386
|
||
msgid ""
|
||
"A method is a function on some object ``x`` that you normally call as ``x."
|
||
"name(arguments...)``. Methods are defined as functions inside the class "
|
||
"definition::"
|
||
msgstr ""
|
||
"Une méthode est une fonction sur un objet ``x`` appelez normalement comme "
|
||
"``x.name(arguments…)``. Les méthodes sont définies comme des fonctions à "
|
||
"l'intérieur de la définition de classe ::"
|
||
|
||
#: ../Doc/faq/programming.rst:1396
|
||
msgid "What is self?"
|
||
msgstr "Qu'est-ce que self?"
|
||
|
||
#: ../Doc/faq/programming.rst:1398
|
||
msgid ""
|
||
"Self is merely a conventional name for the first argument of a method. A "
|
||
"method defined as ``meth(self, a, b, c)`` should be called as ``x.meth(a, b, "
|
||
"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 est simplement un nom conventionnel pour le premier argument d'une "
|
||
"méthode. Une méthode définie comme ``meth(self, a, b, c)`` doit être appelée "
|
||
"en tant que ``x.meth(a, b, c)``, pour une instance ``x`` de la classe dans "
|
||
"laquelle elle est définie, la méthode appelée considérera qu'elle est "
|
||
"appelée ``meth(x, a, b, c)``."
|
||
|
||
#: ../Doc/faq/programming.rst:1403
|
||
msgid "See also :ref:`why-self`."
|
||
msgstr "Voir aussi :ref:`why-self`."
|
||
|
||
#: ../Doc/faq/programming.rst:1407
|
||
msgid ""
|
||
"How do I check if an object is an instance of a given class or of a subclass "
|
||
"of it?"
|
||
msgstr ""
|
||
"Comment puis-je vérifier si un objet est une instance d'une classe donnée ou "
|
||
"d'une sous-classe de celui-ci?"
|
||
|
||
#: ../Doc/faq/programming.rst:1409
|
||
msgid ""
|
||
"Use the built-in function ``isinstance(obj, cls)``. You can check if an "
|
||
"object is an instance of any of a number of classes by providing a tuple "
|
||
"instead of a single class, e.g. ``isinstance(obj, (class1, class2, ...))``, "
|
||
"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 ""
|
||
"Utilisez la fonction native ``isinstance(obj, cls)``. Vous pouvez vérifier "
|
||
"si un objet est une instance de n'importe lequel d'un certain nombre de "
|
||
"classes en fournissant un tuple à la place d'une seule classe, par exemple, "
|
||
"``isinstance(obj, (class1, class2, ...))``, et peut également vérifier si un "
|
||
"objet est l'un des types natifs de Python, par exemple, ``isinstance(obj, "
|
||
"str)`` ou ``isinstance(obj, (int, float, complex))``."
|
||
|
||
#: ../Doc/faq/programming.rst:1415
|
||
msgid ""
|
||
"Note that most programs do not use :func:`isinstance` on user-defined "
|
||
"classes very often. If you are developing the classes yourself, a more "
|
||
"proper object-oriented style is to define methods on the classes that "
|
||
"encapsulate a particular behaviour, instead of checking the object's class "
|
||
"and doing a different thing based on what class it is. For example, if you "
|
||
"have a function that does something::"
|
||
msgstr ""
|
||
"Notez que la plupart des programmes n'utilisent pas :func:`isInstance` sur "
|
||
"les classes définies par l'utilisateur, très souvent. Si vous développez "
|
||
"vous-même les classes, un style plus appropriée orientée objet est de "
|
||
"définir des méthodes sur les classes qui encapsulent un comportement "
|
||
"particulier, au lieu de vérifier la classe de l'objet et de faire quelque "
|
||
"chose de différent en fonction de sa classe. Par exemple, si vous avez une "
|
||
"fonction qui fait quelque chose : ::"
|
||
|
||
#: ../Doc/faq/programming.rst:1429
|
||
msgid ""
|
||
"A better approach is to define a ``search()`` method on all the classes and "
|
||
"just call it::"
|
||
msgstr ""
|
||
"Une meilleure approche est de définir une méthode ``search()`` sur toutes "
|
||
"les classes et qu'il suffit d'appeler ::"
|
||
|
||
#: ../Doc/faq/programming.rst:1444
|
||
msgid "What is delegation?"
|
||
msgstr "Qu'est-ce que la délégation?"
|
||
|
||
#: ../Doc/faq/programming.rst:1446
|
||
msgid ""
|
||
"Delegation is an object oriented technique (also called a design pattern). "
|
||
"Let's say you have an object ``x`` and want to change the behaviour of just "
|
||
"one of its methods. You can create a new class that provides a new "
|
||
"implementation of the method you're interested in changing and delegates all "
|
||
"other methods to the corresponding method of ``x``."
|
||
msgstr ""
|
||
"La délégation est une technique orientée objet (aussi appelé un modèle de "
|
||
"conception). Disons que vous avez un objet ``x`` et que vous souhaitez "
|
||
"modifier le comportement d'une seule de ses méthodes. Vous pouvez créer une "
|
||
"nouvelle classe qui fournit une nouvelle implémentation de la méthode qui "
|
||
"vous intéresse dans l'évolution et les délégués de toutes les autres "
|
||
"méthodes la méthode correspondante de ``x``."
|
||
|
||
#: ../Doc/faq/programming.rst:1452
|
||
msgid ""
|
||
"Python programmers can easily implement delegation. For example, the "
|
||
"following class implements a class that behaves like a file but converts all "
|
||
"written data to uppercase::"
|
||
msgstr ""
|
||
"Les programmeurs Python peuvent facilement mettre en œuvre la délégation. "
|
||
"Par exemple, la classe suivante implémente une classe qui se comporte comme "
|
||
"un fichier, mais convertit toutes les données écrites en majuscules ::"
|
||
|
||
#: ../Doc/faq/programming.rst:1467
|
||
msgid ""
|
||
"Here the ``UpperOut`` class redefines the ``write()`` method to convert the "
|
||
"argument string to uppercase before calling the underlying ``self.__outfile."
|
||
"write()`` method. All other methods are delegated to the underlying ``self."
|
||
"__outfile`` object. The delegation is accomplished via the ``__getattr__`` "
|
||
"method; consult :ref:`the language reference <attribute-access>` for more "
|
||
"information about controlling attribute access."
|
||
msgstr ""
|
||
"Ici, la classe ``UpperOut`` redéfinit la méthode ``write()`` pour convertir "
|
||
"la chaîne d'argument en majuscules avant d'appeler la méthode sous-jacentes "
|
||
"``self.__outfile.write()``. Toutes les autres méthodes sont déléguées à "
|
||
"l'objet sous-jacent ``self.__outfile``. La délégation se fait par la méthode "
|
||
"``__getattr__``, consulter :ref:`the language reference <attribute-access>` "
|
||
"pour plus d'informations sur le contrôle d'accès d'attribut."
|
||
|
||
#: ../Doc/faq/programming.rst:1474
|
||
msgid ""
|
||
"Note that for more general cases delegation can get trickier. When "
|
||
"attributes must be set as well as retrieved, the class must define a :meth:"
|
||
"`__setattr__` method too, and it must do so carefully. The basic "
|
||
"implementation of :meth:`__setattr__` is roughly equivalent to the "
|
||
"following::"
|
||
msgstr ""
|
||
"Notez que pour une utilisation plus générale de la délégation, les choses "
|
||
"peuvent se compliquer. Lorsque les attributs doivent être définis aussi bien "
|
||
"que récupérés, la classe doit définir une méthode :meth:`__setattr__` aussi, "
|
||
"et il doit le faire avec soin. La mise en œuvre basique de la méthode :meth:"
|
||
"`__setattr__` est à peu près équivalent à ce qui suit ::"
|
||
|
||
#: ../Doc/faq/programming.rst:1485
|
||
msgid ""
|
||
"Most :meth:`__setattr__` implementations must modify ``self.__dict__`` to "
|
||
"store local state for self without causing an infinite recursion."
|
||
msgstr ""
|
||
"La plupart des implémentations de :meth:`__setattr__` doivent modifier "
|
||
"``self.__dict__`` pour stocker l'état locale de self sans provoquer une "
|
||
"récursion infinie."
|
||
|
||
#: ../Doc/faq/programming.rst:1490
|
||
msgid ""
|
||
"How do I call a method defined in a base class from a derived class that "
|
||
"overrides it?"
|
||
msgstr ""
|
||
"Comment appeler une méthode définie dans une classe de base depuis une "
|
||
"classe dérivée qui la surcharge?"
|
||
|
||
#: ../Doc/faq/programming.rst:1492
|
||
msgid "Use the built-in :func:`super` function::"
|
||
msgstr "Utiliser la fonction native :func:`super` : ::"
|
||
|
||
#: ../Doc/faq/programming.rst:1498
|
||
msgid ""
|
||
"For version prior to 3.0, you may be using classic classes: For a class "
|
||
"definition such as ``class Derived(Base): ...`` you can call method "
|
||
"``meth()`` defined in ``Base`` (or one of ``Base``'s base classes) as ``Base."
|
||
"meth(self, arguments...)``. Here, ``Base.meth`` is an unbound method, so "
|
||
"you need to provide the ``self`` argument."
|
||
msgstr ""
|
||
"Pour version antérieure à 3.0, vous pouvez utiliser des classes classiques : "
|
||
"Pour une définition de classe telle que ``class Derived(Base): ...`` vous "
|
||
"pouvez appeler la méthode ``meth()`` défini dans ``Base`` (ou l'une des "
|
||
"classes de base de ``Base``) en faisant ``Base.meth(self, arguments...)``. "
|
||
"Ici, ``Base.meth`` est une méthode non liée, vous devez donc fournir "
|
||
"l'argument ``self``."
|
||
|
||
#: ../Doc/faq/programming.rst:1506
|
||
msgid "How can I organize my code to make it easier to change the base class?"
|
||
msgstr ""
|
||
"Comment puis-je organiser mon code pour permettre de changer la classe de "
|
||
"base plus facilement?"
|
||
|
||
#: ../Doc/faq/programming.rst:1508
|
||
msgid ""
|
||
"You could define an alias for the base class, assign the real base class to "
|
||
"it before your class definition, and use the alias throughout your class. "
|
||
"Then all you have to change is the value assigned to the alias. "
|
||
"Incidentally, this trick is also handy if you want to decide dynamically (e."
|
||
"g. depending on availability of resources) which base class to use. "
|
||
"Example::"
|
||
msgstr ""
|
||
"Vous pouvez définir un alias pour la classe de base, lui attribuer la classe "
|
||
"de base réelle avant la définition de classe, et utiliser l'alias au long de "
|
||
"votre classe. Ensuite, tout ce que vous devez changer est la valeur "
|
||
"attribuée à l'alias. Incidemment, cette astuce est également utile si vous "
|
||
"voulez décider dynamiquement (par exemple en fonction de la disponibilité "
|
||
"des ressources) la classe de base à utiliser. Exemple ::"
|
||
|
||
#: ../Doc/faq/programming.rst:1523
|
||
msgid "How do I create static class data and static class methods?"
|
||
msgstr ""
|
||
"Comment puis-je créer des données statiques de classe et des méthodes "
|
||
"statiques de classe?"
|
||
|
||
#: ../Doc/faq/programming.rst:1525
|
||
msgid ""
|
||
"Both static data and static methods (in the sense of C++ or Java) are "
|
||
"supported in Python."
|
||
msgstr ""
|
||
"Tant les données statiques que les méthodes statiques (dans le sens de C + + "
|
||
"ou Java) sont pris en charge en Python."
|
||
|
||
#: ../Doc/faq/programming.rst:1528
|
||
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 ""
|
||
"Pour les données statiques, il suffit de définir un attribut de classe. Pour "
|
||
"attribuer une nouvelle valeur à l'attribut, vous devez explicitement "
|
||
"utiliser le nom de classe dans l'affectation ::"
|
||
|
||
#: ../Doc/faq/programming.rst:1540
|
||
msgid ""
|
||
"``c.count`` also refers to ``C.count`` for any ``c`` such that "
|
||
"``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`` se réfère également à ``C.count`` pour tout ``c`` telle que "
|
||
"``isInstance (c, C)`` est vrai, sauf remplacement par ``c`` lui-même ou par "
|
||
"une classe sur le chemin de recherche de classe de base de ``c.__class__`` "
|
||
"jusqu'à ``C``."
|
||
|
||
#: ../Doc/faq/programming.rst:1544
|
||
msgid ""
|
||
"Caution: within a method of C, an assignment like ``self.count = 42`` "
|
||
"creates a new and unrelated instance named \"count\" in ``self``'s own "
|
||
"dict. Rebinding of a class-static data name must always specify the class "
|
||
"whether inside a method or not::"
|
||
msgstr ""
|
||
"Attention: dans une méthode de C, une affectation comme ``self.count=42`` "
|
||
"crée une nouvelle instance et sans rapport avec le nom \"count\" dans dans "
|
||
"le dictionnaire de données de ``self``. La redéfinition d'une donnée "
|
||
"statique de classe doit toujours spécifier la classe que l'on soit à "
|
||
"l'intérieur d'une méthode ou non ::"
|
||
|
||
#: ../Doc/faq/programming.rst:1551
|
||
msgid "Static methods are possible::"
|
||
msgstr "Les méthodes statiques sont possibles : ::"
|
||
|
||
#: ../Doc/faq/programming.rst:1559
|
||
msgid ""
|
||
"However, a far more straightforward way to get the effect of a static method "
|
||
"is via a simple module-level function::"
|
||
msgstr ""
|
||
"Cependant, d'une manière beaucoup plus simple pour obtenir l'effet d'une "
|
||
"méthode statique se fait par une simple fonction au niveau du module ::"
|
||
|
||
#: ../Doc/faq/programming.rst:1565
|
||
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 votre code est structuré de manière à définir une classe (ou bien la "
|
||
"hiérarchie des classes connexes) par module, ceci fournira l'encapsulation "
|
||
"souhaitée."
|
||
|
||
#: ../Doc/faq/programming.rst:1570
|
||
msgid "How can I overload constructors (or methods) in Python?"
|
||
msgstr "Comment puis-je surcharger les constructeurs (ou méthodes) en Python?"
|
||
|
||
#: ../Doc/faq/programming.rst:1572
|
||
msgid ""
|
||
"This answer actually applies to all methods, but the question usually comes "
|
||
"up first in the context of constructors."
|
||
msgstr ""
|
||
"Cette réponse s'applique en fait à toutes les méthodes, mais la question "
|
||
"vient généralement en premier dans le contexte des constructeurs."
|
||
|
||
#: ../Doc/faq/programming.rst:1575
|
||
msgid "In C++ you'd write"
|
||
msgstr "In C++ you'd write"
|
||
|
||
#: ../Doc/faq/programming.rst:1584
|
||
msgid ""
|
||
"In Python you have to write a single constructor that catches all cases "
|
||
"using default arguments. For example::"
|
||
msgstr ""
|
||
"En Python, vous devez écrire un constructeur unique qui considère tous les "
|
||
"cas en utilisant des arguments par défaut. Par exemple ::"
|
||
|
||
#: ../Doc/faq/programming.rst:1594
|
||
msgid "This is not entirely equivalent, but close enough in practice."
|
||
msgstr ""
|
||
"Ce n'est pas tout à fait équivalent, mais suffisamment proche dans la "
|
||
"pratique."
|
||
|
||
#: ../Doc/faq/programming.rst:1596
|
||
msgid "You could also try a variable-length argument list, e.g. ::"
|
||
msgstr ""
|
||
"Vous pouvez aussi utiliser une liste d'arguments de longueur variable, par "
|
||
"exemple : ::"
|
||
|
||
#: ../Doc/faq/programming.rst:1601
|
||
msgid "The same approach works for all method definitions."
|
||
msgstr "La même approche fonctionne pour toutes les définitions de méthode."
|
||
|
||
#: ../Doc/faq/programming.rst:1605
|
||
msgid "I try to use __spam and I get an error about _SomeClassName__spam."
|
||
msgstr ""
|
||
"J'essaie d'utiliser __spam et j'obtiens une erreur à propos de "
|
||
"_SomeClassName__spam."
|
||
|
||
#: ../Doc/faq/programming.rst:1607
|
||
msgid ""
|
||
"Variable names with double leading underscores are \"mangled\" to provide a "
|
||
"simple but effective way to define class private variables. Any identifier "
|
||
"of the form ``__spam`` (at least two leading underscores, at most one "
|
||
"trailing underscore) is textually replaced with ``_classname__spam``, where "
|
||
"``classname`` is the current class name with any leading underscores "
|
||
"stripped."
|
||
msgstr ""
|
||
"Les noms de variables avec le double de soulignement sont «déformés» pour "
|
||
"fournir un moyen simple mais efficace de définir variables privées à la "
|
||
"classe. Tout identificateur de la forme ``__spam`` (au moins deux traits de "
|
||
"soulignement préfixe, au plus un soulignement suffix) est textuellement "
|
||
"remplacé par ``_classname__spam``, où ``classname`` est le nom de la classe "
|
||
"en cours avec les traits de soulignement dépouillés."
|
||
|
||
#: ../Doc/faq/programming.rst:1613
|
||
msgid ""
|
||
"This doesn't guarantee privacy: an outside user can still deliberately "
|
||
"access the \"_classname__spam\" attribute, and private values are visible in "
|
||
"the object's ``__dict__``. Many Python programmers never bother to use "
|
||
"private variable names at all."
|
||
msgstr ""
|
||
"Cela ne garantit pas la privauté de l'accès : un utilisateur extérieur peut "
|
||
"encore délibérément acceder à l'attribut \"_classname__spam\", et les "
|
||
"valeurs privées sont visibles dans l'objet ``__dict__``. De nombreux "
|
||
"programmeurs Python ne prennent jamais la peine d'utiliser des noms de "
|
||
"variable privée."
|
||
|
||
#: ../Doc/faq/programming.rst:1620
|
||
msgid "My class defines __del__ but it is not called when I delete the object."
|
||
msgstr ""
|
||
"Ma classe définit __del__ mais il n'est pas appelé lorsque je supprime "
|
||
"l'objet."
|
||
|
||
#: ../Doc/faq/programming.rst:1622
|
||
msgid "There are several possible reasons for this."
|
||
msgstr "Il y a plusieurs raisons possibles pour cela."
|
||
|
||
#: ../Doc/faq/programming.rst:1624
|
||
msgid ""
|
||
"The del statement does not necessarily call :meth:`__del__` -- it simply "
|
||
"decrements the object's reference count, and if this reaches zero :meth:"
|
||
"`__del__` is called."
|
||
msgstr ""
|
||
"La commande del n'appelle pas forcément :meth:`__del__` - il décrémente "
|
||
"simplement le compteur de références de l'objet, et si celui ci arrive à "
|
||
"zéro :meth:`__del__` est appelée."
|
||
|
||
#: ../Doc/faq/programming.rst:1628
|
||
msgid ""
|
||
"If your data structures contain circular links (e.g. a tree where each child "
|
||
"has a parent reference and each parent has a list of children) the reference "
|
||
"counts will never go back to zero. Once in a while Python runs an algorithm "
|
||
"to detect such cycles, but the garbage collector might run some time after "
|
||
"the last reference to your data structure vanishes, so your :meth:`__del__` "
|
||
"method may be called at an inconvenient and random time. This is "
|
||
"inconvenient if you're trying to reproduce a problem. Worse, the order in "
|
||
"which object's :meth:`__del__` methods are executed is arbitrary. You can "
|
||
"run :func:`gc.collect` to force a collection, but there *are* pathological "
|
||
"cases where objects will never be collected."
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:1639
|
||
msgid ""
|
||
"Despite the cycle collector, it's still a good idea to define an explicit "
|
||
"``close()`` method on objects to be called whenever you're done with them. "
|
||
"The ``close()`` method can then remove attributes that refer to subobjects. "
|
||
"Don't call :meth:`__del__` directly -- :meth:`__del__` should call "
|
||
"``close()`` and ``close()`` should make sure that it can be called more than "
|
||
"once for the same object."
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:1646
|
||
msgid ""
|
||
"Another way to avoid cyclical references is to use the :mod:`weakref` "
|
||
"module, which allows you to point to objects without incrementing their "
|
||
"reference count. Tree data structures, for instance, should use weak "
|
||
"references for their parent and sibling references (if they need them!)."
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:1659
|
||
msgid ""
|
||
"Finally, if your :meth:`__del__` method raises an exception, a warning "
|
||
"message is printed to :data:`sys.stderr`."
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:1664
|
||
msgid "How do I get a list of all instances of a given class?"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:1666
|
||
msgid ""
|
||
"Python does not keep track of all instances of a class (or of a built-in "
|
||
"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 ""
|
||
|
||
#: ../Doc/faq/programming.rst:1672
|
||
msgid "Why does the result of ``id()`` appear to be not unique?"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:1674
|
||
msgid ""
|
||
"The :func:`id` builtin returns an integer that is guaranteed to be unique "
|
||
"during the lifetime of the object. Since in CPython, this is the object's "
|
||
"memory address, it happens frequently that after an object is deleted from "
|
||
"memory, the next freshly created object is allocated at the same position in "
|
||
"memory. This is illustrated by this example:"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:1685
|
||
msgid ""
|
||
"The two ids belong to different integer objects that are created before, and "
|
||
"deleted immediately after execution of the ``id()`` call. To be sure that "
|
||
"objects whose id you want to examine are still alive, create another "
|
||
"reference to the object:"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:1698
|
||
msgid "Modules"
|
||
msgstr "Modules"
|
||
|
||
#: ../Doc/faq/programming.rst:1701
|
||
msgid "How do I create a .pyc file?"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:1703
|
||
msgid ""
|
||
"When a module is imported for the first time (or when the source file has "
|
||
"changed since the current compiled file was created) a ``.pyc`` file "
|
||
"containing the compiled code should be created in a ``__pycache__`` "
|
||
"subdirectory of the directory containing the ``.py`` file. The ``.pyc`` "
|
||
"file will have a filename that starts with the same name as the ``.py`` "
|
||
"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 ""
|
||
|
||
#: ../Doc/faq/programming.rst:1711
|
||
msgid ""
|
||
"One reason that a ``.pyc`` file may not be created is a permissions problem "
|
||
"with the directory containing the source file, meaning that the "
|
||
"``__pycache__`` subdirectory cannot be created. This can happen, for "
|
||
"example, if you develop as one user but run as another, such as if you are "
|
||
"testing with a web server."
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:1716
|
||
msgid ""
|
||
"Unless the :envvar:`PYTHONDONTWRITEBYTECODE` environment variable is set, "
|
||
"creation of a .pyc file is automatic if you're importing a module and Python "
|
||
"has the ability (permissions, free space, etc...) to create a "
|
||
"``__pycache__`` subdirectory and write the compiled module to that "
|
||
"subdirectory."
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:1721
|
||
msgid ""
|
||
"Running Python on a top level script is not considered an import and no ``."
|
||
"pyc`` will be created. For example, if you have a top-level module ``foo."
|
||
"py`` that imports another module ``xyz.py``, when you run ``foo`` (by typing "
|
||
"``python foo.py`` as a shell command), a ``.pyc`` will be created for "
|
||
"``xyz`` because ``xyz`` is imported, but no ``.pyc`` file will be created "
|
||
"for ``foo`` since ``foo.py`` isn't being imported."
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:1728
|
||
msgid ""
|
||
"If you need to create a ``.pyc`` file for ``foo`` -- that is, to create a ``."
|
||
"pyc`` file for a module that is not imported -- you can, using the :mod:"
|
||
"`py_compile` and :mod:`compileall` modules."
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:1732
|
||
msgid ""
|
||
"The :mod:`py_compile` module can manually compile any module. One way is to "
|
||
"use the ``compile()`` function in that module interactively::"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:1738
|
||
msgid ""
|
||
"This will write the ``.pyc`` to a ``__pycache__`` subdirectory in the same "
|
||
"location as ``foo.py`` (or you can override that with the optional parameter "
|
||
"``cfile``)."
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:1742
|
||
msgid ""
|
||
"You can also automatically compile all files in a directory or directories "
|
||
"using the :mod:`compileall` module. You can do it from the shell prompt by "
|
||
"running ``compileall.py`` and providing the path of a directory containing "
|
||
"Python files to compile::"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:1751
|
||
msgid "How do I find the current module name?"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:1753
|
||
msgid ""
|
||
"A module can find out its own module name by looking at the predefined "
|
||
"global variable ``__name__``. If this has the value ``'__main__'``, the "
|
||
"program is running as a script. Many modules that are usually used by "
|
||
"importing them also provide a command-line interface or a self-test, and "
|
||
"only execute this code after checking ``__name__``::"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:1768
|
||
msgid "How can I have modules that mutually import each other?"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:1770
|
||
msgid "Suppose you have the following modules:"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:1772
|
||
msgid "foo.py::"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:1777
|
||
msgid "bar.py::"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:1782
|
||
msgid "The problem is that the interpreter will perform the following steps:"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:1784
|
||
msgid "main imports foo"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:1785
|
||
msgid "Empty globals for foo are created"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:1786
|
||
msgid "foo is compiled and starts executing"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:1787
|
||
msgid "foo imports bar"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:1788
|
||
msgid "Empty globals for bar are created"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:1789
|
||
msgid "bar is compiled and starts executing"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:1790
|
||
msgid ""
|
||
"bar imports foo (which is a no-op since there already is a module named foo)"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:1791
|
||
msgid "bar.foo_var = foo.foo_var"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:1793
|
||
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 ""
|
||
|
||
#: ../Doc/faq/programming.rst:1796
|
||
msgid ""
|
||
"The same thing happens when you use ``import foo``, and then try to access "
|
||
"``foo.foo_var`` in global code."
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:1799
|
||
msgid "There are (at least) three possible workarounds for this problem."
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:1801
|
||
msgid ""
|
||
"Guido van Rossum recommends avoiding all uses of ``from <module> import ..."
|
||
"``, and placing all code inside functions. Initializations of global "
|
||
"variables and class variables should use constants or built-in functions "
|
||
"only. This means everything from an imported module is referenced as "
|
||
"``<module>.<name>``."
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:1806
|
||
msgid ""
|
||
"Jim Roskind suggests performing steps in the following order in each module:"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:1808
|
||
msgid ""
|
||
"exports (globals, functions, and classes that don't need imported base "
|
||
"classes)"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:1810
|
||
msgid "``import`` statements"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:1811
|
||
msgid ""
|
||
"active code (including globals that are initialized from imported values)."
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:1813
|
||
msgid ""
|
||
"van Rossum doesn't like this approach much because the imports appear in a "
|
||
"strange place, but it does work."
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:1816
|
||
msgid ""
|
||
"Matthias Urlichs recommends restructuring your code so that the recursive "
|
||
"import is not necessary in the first place."
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:1819
|
||
msgid "These solutions are not mutually exclusive."
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:1823
|
||
msgid "__import__('x.y.z') returns <module 'x'>; how do I get z?"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:1825
|
||
msgid ""
|
||
"Consider using the convenience function :func:`~importlib.import_module` "
|
||
"from :mod:`importlib` instead::"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:1832
|
||
msgid ""
|
||
"When I edit an imported module and reimport it, the changes don't show up. "
|
||
"Why does this happen?"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:1834
|
||
msgid ""
|
||
"For reasons of efficiency as well as consistency, Python only reads the "
|
||
"module file on the first time a module is imported. If it didn't, in a "
|
||
"program consisting of many modules where each one imports the same basic "
|
||
"module, the basic module would be parsed and re-parsed many times. To force "
|
||
"re-reading of a changed module, do this::"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:1844
|
||
msgid ""
|
||
"Warning: this technique is not 100% fool-proof. In particular, modules "
|
||
"containing statements like ::"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:1849
|
||
msgid ""
|
||
"will continue to work with the old version of the imported objects. If the "
|
||
"module contains class definitions, existing class instances will *not* be "
|
||
"updated to use the new class definition. This can result in the following "
|
||
"paradoxical behaviour:"
|
||
msgstr ""
|
||
|
||
#: ../Doc/faq/programming.rst:1862
|
||
msgid ""
|
||
"The nature of the problem is made clear if you print out the \"identity\" of "
|
||
"the class objects:"
|
||
msgstr ""
|