# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2001-2022, Python Software Foundation
# This file is distributed under the same license as the Python package.
# FIRST AUTHOR , YEAR.
#
# Translators:
# Rafael Fontenelle , 2022
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: Python 3.10\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-12-30 14:59+0000\n"
"PO-Revision-Date: 2022-11-05 17:21+0000\n"
"Last-Translator: Rafael Fontenelle , 2022\n"
"Language-Team: Japanese (https://www.transifex.com/python-doc/teams/5390/"
"ja/)\n"
"Language: ja\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#: ../../faq/programming.rst:5
msgid "Programming FAQ"
msgstr " FAQ"
#: ../../faq/programming.rst:8
msgid "Contents"
msgstr ""
#: ../../faq/programming.rst:12
msgid "General Questions"
msgstr ""
#: ../../faq/programming.rst:15
msgid ""
"Is there a source code level debugger with breakpoints, single-stepping, "
"etc.?"
msgstr ""
""
""
#: ../../faq/programming.rst:17 ../../faq/programming.rst:58
msgid "Yes."
msgstr ""
#: ../../faq/programming.rst:19
msgid ""
"Several debuggers for Python are described below, and the built-in function :"
"func:`breakpoint` allows you to drop into any of them."
msgstr ""
"Python :func:`breakpoint` "
""
#: ../../faq/programming.rst:22
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 `. You can also write your own debugger by "
"using the code for pdb as an example."
msgstr ""
"pdb Python "
" Python :mod:`"
" ` pdb "
""
#: ../../faq/programming.rst:27
msgid ""
"The IDLE interactive development environment, which is part of the standard "
"Python distribution (normally available as `Tools/scripts/idle3 `_), includes a "
"graphical debugger."
msgstr ""
"Python IDLE Python "
"( `Tools/scripts/idle3 `_ ) "
""
#: ../../faq/programming.rst:32
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 "
"`pywin32 `_ project and as a part of "
"the `ActivePython `_ "
"distribution."
msgstr ""
"PythonWin pdb GUI Python IDE "
"Pythonwin PythonWin "
"PythonWin `pywin32 "
"`_ "
"`ActivePython `_ "
""
#: ../../faq/programming.rst:39
msgid ""
"`Eric `_ is an IDE built on PyQt and "
"the Scintilla editing component."
msgstr ""
"`Eric `_ PyQt Scintilla editing "
"component IDE "
#: ../../faq/programming.rst:42
msgid ""
"`trepan3k `_ is a gdb-like "
"debugger."
msgstr ""
"`trepan3k `_ gdb"
""
#: ../../faq/programming.rst:44
msgid ""
"`Visual Studio Code `_ is an IDE with "
"debugging tools that integrates with version-control software."
msgstr ""
"`Visual Studio Code `_ "
" IDE "
#: ../../faq/programming.rst:47
msgid ""
"There are a number of commercial Python IDEs that include graphical "
"debuggers. They include:"
msgstr " Python IDE :"
#: ../../faq/programming.rst:50
msgid "`Wing IDE `_"
msgstr "`Wing IDE `_"
#: ../../faq/programming.rst:51
msgid "`Komodo IDE `_"
msgstr "`Komodo IDE `_"
#: ../../faq/programming.rst:52
msgid "`PyCharm `_"
msgstr "`PyCharm `_"
#: ../../faq/programming.rst:56
msgid "Are there tools to help find bugs or perform static analysis?"
msgstr ""
#: ../../faq/programming.rst:60
msgid ""
"`Pylint `_ and `Pyflakes "
"`_ do basic checking that will help you "
"catch bugs sooner."
msgstr ""
"`Pylint `_ `Pyflakes "
"`_ "
""
#: ../../faq/programming.rst:64
msgid ""
"Static type checkers such as `Mypy `_, `Pyre `_, and `Pytype `_ can "
"check type hints in Python source code."
msgstr ""
"`Mypy `_, `Pyre `_, `Pytype "
"`_ Python "
""
#: ../../faq/programming.rst:73
msgid "How can I create a stand-alone binary from a Python script?"
msgstr " Python "
#: ../../faq/programming.rst:75
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 ""
"Python "
"Python C "
""
" Python "
""
#: ../../faq/programming.rst:81
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; with a C compiler you "
"can embed all your modules into a new program, which is then linked with the "
"standard Python modules."
msgstr ""
" freeze Python `Tools/freeze `_ "
"Python C "
" C Python "
""
#: ../../faq/programming.rst:87
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 ""
" () import import "
" Python () "
" Python C "
" (marshal ) "
""
" C "
"Python "
""
#: ../../faq/programming.rst:96
msgid ""
"The following packages can help with the creation of console and GUI "
"executables:"
msgstr "GUI"
#: ../../faq/programming.rst:99
msgid "`Nuitka `_ (Cross-platform)"
msgstr "`Nuitka `_ (Cross-platform)"
#: ../../faq/programming.rst:100
msgid "`PyInstaller `_ (Cross-platform)"
msgstr "`PyInstaller `_ (Cross-platform)"
#: ../../faq/programming.rst:101
msgid ""
"`PyOxidizer `_ (Cross-platform)"
msgstr ""
"`PyOxidizer `_ (Cross-platform)"
#: ../../faq/programming.rst:102
msgid ""
"`cx_Freeze `_ (Cross-platform)"
msgstr ""
"`cx_Freeze `_ (Cross-platform)"
#: ../../faq/programming.rst:103
msgid "`py2app `_ (macOS only)"
msgstr "`py2app `_ (macOS only)"
#: ../../faq/programming.rst:104
msgid "`py2exe `_ (Windows only)"
msgstr "`py2exe `_ (Windows only)"
#: ../../faq/programming.rst:107
msgid "Are there coding standards or a style guide for Python programs?"
msgstr ""
"Python "
""
#: ../../faq/programming.rst:109
msgid ""
"Yes. The coding style required for standard library modules is documented "
"as :pep:`8`."
msgstr ""
" :pep:`8` "
""
#: ../../faq/programming.rst:114
msgid "Core Language"
msgstr ""
#: ../../faq/programming.rst:119
msgid "Why am I getting an UnboundLocalError when the variable has a value?"
msgstr " UnboundLocalError "
#: ../../faq/programming.rst:121
msgid ""
"It can be a surprise to get the :exc:`UnboundLocalError` in previously "
"working code when it is modified by adding an assignment statement somewhere "
"in the body of a function."
msgstr ""
""
" :exc:`UnboundLocalError` "
#: ../../faq/programming.rst:125
msgid "This code:"
msgstr ":"
#: ../../faq/programming.rst:134
msgid "works, but this code:"
msgstr ":"
#: ../../faq/programming.rst:141
msgid "results in an :exc:`!UnboundLocalError`:"
msgstr " :exc:`!UnboundLocalError` :"
#: ../../faq/programming.rst:148
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 ""
""
"foo "
" ``x`` "
" ``print(x)`` "
""
#: ../../faq/programming.rst:155
msgid ""
"In the example above you can access the outer scope variable by declaring it "
"global:"
msgstr ""
":"
#: ../../faq/programming.rst:167
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 ""
" ("
") "
":"
#: ../../faq/programming.rst:174
msgid ""
"You can do a similar thing in a nested scope using the :keyword:`nonlocal` "
"keyword:"
msgstr ""
" :keyword:`nonlocal` "
":"
#: ../../faq/programming.rst:192
msgid "What are the rules for local and global variables in Python?"
msgstr "Python "
#: ../../faq/programming.rst:194
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 ""
"Python \n"
""
""
#: ../../faq/programming.rst:198
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 ""
""
" :keyword:`global` "
" ``global`` ``global`` "
""
""
" ``global`` "
#: ../../faq/programming.rst:208
msgid ""
"Why do lambdas defined in a loop with different values all return the same "
"result?"
msgstr ""
""
#: ../../faq/programming.rst:210
msgid ""
"Assume you use a for loop to define a few different lambdas (or even plain "
"functions), e.g.::"
msgstr ""
"for () "
"::"
#: ../../faq/programming.rst:217
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 ""
" ``x**2`` 5 "
" ``0````1````4````9````16`` "
" ``16`` "
"::"
#: ../../faq/programming.rst:227
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 ""
"``x`` "
""
" ``x`` ``4`` "
" ``4**2`` ``16`` ``x`` "
"::"
#: ../../faq/programming.rst:237
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 ""
" ``x`` "
"::"
#: ../../faq/programming.rst:244
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 ""
"``n=x`` ``n`` "
" ``x`` "
"1 ``n`` ``0`` 2 "
"``1``3 ``2`` "
"::"
#: ../../faq/programming.rst:255
msgid ""
"Note that this behaviour is not peculiar to lambdas, but applies to regular "
"functions too."
msgstr ""
""
""
#: ../../faq/programming.rst:260
msgid "How do I share global variables across modules?"
msgstr ""
#: ../../faq/programming.rst:262
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 ""
" "
"( config cfg ) "
""
""
""
":"
#: ../../faq/programming.rst:268
msgid "config.py::"
msgstr "config.py::"
#: ../../faq/programming.rst:272
msgid "mod.py::"
msgstr "mod.py::"
#: ../../faq/programming.rst:277
msgid "main.py::"
msgstr "main.py::"
#: ../../faq/programming.rst:283
msgid ""
"Note that using a module is also the basis for implementing the singleton "
"design pattern, for the same reason."
msgstr ""
""
""
#: ../../faq/programming.rst:288
msgid "What are the \"best practices\" for using import in a module?"
msgstr " import "
#: ../../faq/programming.rst:290
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 ""
" ``from modulename import *`` "
"linter "
""
#: ../../faq/programming.rst:294
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 ""
""
""
""
""
""
#: ../../faq/programming.rst:299
msgid "It's good practice if you import modules in the following order:"
msgstr ":"
#: ../../faq/programming.rst:301
msgid ""
"standard library modules -- e.g. :mod:`sys`, :mod:`os`, :mod:`argparse`, :"
"mod:`re`"
msgstr ""
" -- :mod:`sys`:mod:`os`:mod:`argparse`:mod:"
"`re`"
#: ../../faq/programming.rst:302
msgid ""
"third-party library modules (anything installed in Python's site-packages "
"directory) -- e.g. :mod:`!dateutil`, :mod:`!requests`, :mod:`!PIL.Image`"
msgstr ""
" (Python site-packages "
") -- :mod:`!dateutil`:mod:`!requests`:mod:`!PIL.Image`"
#: ../../faq/programming.rst:304
msgid "locally developed modules"
msgstr ""
#: ../../faq/programming.rst:306
msgid ""
"It is sometimes necessary to move imports to a function or class to avoid "
"problems with circular imports. Gordon McMillan says:"
msgstr ""
""
"Gordon McMillan :"
#: ../../faq/programming.rst:309
msgid ""
"Circular imports are fine where both modules use the \"import \" "
"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 ""
" \"import \" "
" "
"(\"from module import name\")"
""
""
#: ../../faq/programming.rst:315
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 ""
""
""
""
""
#: ../../faq/programming.rst:320
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 ""
""
""
""
""
#: ../../faq/programming.rst:325
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 ""
""
""
""
""
""
""
""
" :data:`sys."
"modules` "
#: ../../faq/programming.rst:338
msgid "Why are default values shared between objects?"
msgstr ""
#: ../../faq/programming.rst:340
msgid ""
"This type of bug commonly bites neophyte programmers. Consider this "
"function::"
msgstr ""
""
"::"
#: ../../faq/programming.rst:347
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 ""
"``mydict`` "
"``foo()`` ``mydict`` "
"``mydict`` "
#: ../../faq/programming.rst:351
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 ""
""
""
""
""
#: ../../faq/programming.rst:356
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 ""
"``None`` "
""
""
#: ../../faq/programming.rst:360
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 ""
""
"``None`` "
" ``None`` //"
"::"
#: ../../faq/programming.rst:368
msgid "but::"
msgstr "::"
#: ../../faq/programming.rst:374
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 ""
""
""
" "
"\"memoizing\" ::"
#: ../../faq/programming.rst:389
msgid ""
"You could use a global variable containing a dictionary instead of the "
"default value; it's a matter of taste."
msgstr ""
""
""
#: ../../faq/programming.rst:394
msgid ""
"How can I pass optional or keyword parameters from one function to another?"
msgstr ""
""
""
#: ../../faq/programming.rst:396
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 ""
" ``*`` ``**`` (specifier) "
""
" ``*`` ``**`` "
"::"
#: ../../faq/programming.rst:415
msgid "What is the difference between arguments and parameters?"
msgstr "?"
#: ../../faq/programming.rst:417
msgid ""
":term:`Parameters ` are defined by the names that appear in a "
"function definition, whereas :term:`arguments ` are the values "
"actually passed to a function when calling it. Parameters define what :term:"
"`kind of arguments ` a function can accept. For example, given "
"the function definition::"
msgstr ""
":term:` (parameter) ` "
" :term:` (argument) ` "
" :term:` "
"` ::"
#: ../../faq/programming.rst:426
msgid ""
"*foo*, *bar* and *kwargs* are parameters of ``func``. However, when calling "
"``func``, for example::"
msgstr ""
"*foo**bar**kwargs* ``func`` ``func`` "
"::"
#: ../../faq/programming.rst:431
msgid "the values ``42``, ``314``, and ``somevar`` are arguments."
msgstr "``42````314````somevar`` "
#: ../../faq/programming.rst:435
msgid "Why did changing list 'y' also change list 'x'?"
msgstr " list 'y' list 'x' ?"
#: ../../faq/programming.rst:437
msgid "If you wrote code like::"
msgstr "::"
#: ../../faq/programming.rst:447
msgid ""
"you might be wondering why appending an element to ``y`` changed ``x`` too."
msgstr ""
" ``y`` ``x`` "
" "
#: ../../faq/programming.rst:449
msgid "There are two factors that produce this result:"
msgstr "2:"
#: ../../faq/programming.rst:451
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 ""
" ``y = x`` "
" -- ``x`` "
" ``y`` "
"() ``x`` ``y`` "
""
#: ../../faq/programming.rst:455
msgid ""
"Lists are :term:`mutable`, which means that you can change their content."
msgstr " :term:`mutable` "
#: ../../faq/programming.rst:457
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 ""
":meth:`~list.append` ``[]`` "
" ``[10]`` "
" ``[10]`` "
#: ../../faq/programming.rst:461
msgid "If we instead assign an immutable object to ``x``::"
msgstr " ``x`` ::"
#: ../../faq/programming.rst:471
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 ""
" ``x`` ``y`` "
" :term:`immutable` ``x = x + 1`` ``5`` "
"; ( ``6``) ``x`` "
" ( ``x`` )"
" 2 ( ``6`` ``5``)2 "
"(``x`` ``6`` ``y`` "
"``5`` )"
#: ../../faq/programming.rst:479
msgid ""
"Some operations (for example ``y.append(10)`` and ``y.sort()``) mutate the "
"object, whereas superficially similar operations (for example ``y = y + "
"[10]`` and :func:`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 ""
" ( ``y.append(10)``, ``y.sort()``) "
" ( ``y = y + [10]``, :func:`sorted(y) "
"`) Python ("
") 2 "
" ``None`` "
" ``y`` ``y.sort()`` "
" ``None`` "
""
#: ../../faq/programming.rst:488
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 ""
""
": ``+=`` "
"(``a_list += [1, 2, 3]`` ``a_list.extend([1, 2, 3])`` "
" ``a_list`` ``some_tuple += (1, 2, 3)`` "
"``some_int += 1`` )"
#: ../../faq/programming.rst:495
msgid "In other words:"
msgstr ":"
#: ../../faq/programming.rst:497
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 ""
"(:class:`list`, :class:`dict`, :class:`set`, )"
""
""
#: ../../faq/programming.rst:500
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 ""
"(:class:`str`, :class:`int`, :class:`tuple`, )"
""
""
""
#: ../../faq/programming.rst:505
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 ""
"2 :keyword:"
"`is` :func:`id` "
#: ../../faq/programming.rst:510
msgid "How do I write a function with output parameters (call by reference)?"
msgstr " () "
#: ../../faq/programming.rst:512
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 ""
"Python "
""
""
""
#: ../../faq/programming.rst:517
msgid "By returning a tuple of the results::"
msgstr "::"
#: ../../faq/programming.rst:528
msgid "This is almost always the clearest solution."
msgstr ""
#: ../../faq/programming.rst:530
msgid ""
"By using global variables. This isn't thread-safe, and is not recommended."
msgstr ""
""
#: ../../faq/programming.rst:532
msgid "By passing a mutable (changeable in-place) object::"
msgstr ""
" () ::"
#: ../../faq/programming.rst:543
msgid "By passing in a dictionary that gets mutated::"
msgstr "::"
#: ../../faq/programming.rst:554
msgid "Or bundle up values in a class instance::"
msgstr "::"
#: ../../faq/programming.rst:571
msgid "There's almost never a good reason to get this complicated."
msgstr ""
#: ../../faq/programming.rst:573
msgid "Your best choice is to return a tuple containing the multiple results."
msgstr ""
#: ../../faq/programming.rst:577
msgid "How do you make a higher order function in Python?"
msgstr "Python "
#: ../../faq/programming.rst:579
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 ""
": "
"``a*x+b`` ``f(x)`` "
"``linear(a,b)`` ::"
#: ../../faq/programming.rst:588
msgid "Or using a callable object::"
msgstr "::"
#: ../../faq/programming.rst:598
msgid "In both cases, ::"
msgstr " ::"
#: ../../faq/programming.rst:602
msgid "gives a callable object where ``taxes(10e6) == 0.3 * 10e6 + 2``."
msgstr ""
"``taxes(10e6) == 0.3 * 10e6 + 2`` "
""
#: ../../faq/programming.rst:604
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 ""
""
""
"::"
#: ../../faq/programming.rst:613
msgid "Object can encapsulate state for several methods::"
msgstr "::"
#: ../../faq/programming.rst:631
msgid ""
"Here ``inc()``, ``dec()`` and ``reset()`` act like functions which share the "
"same counting variable."
msgstr ""
"``inc()````dec()````reset()`` "
""
#: ../../faq/programming.rst:636
msgid "How do I copy an object in Python?"
msgstr "Python "
#: ../../faq/programming.rst:638
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 ""
" :func:`copy.copy` :func:`copy.deepcopy` "
""
#: ../../faq/programming.rst:641
msgid ""
"Some objects can be copied more easily. Dictionaries have a :meth:`~dict."
"copy` method::"
msgstr ""
" :meth:`~dict.copy` "
"::"
#: ../../faq/programming.rst:646
msgid "Sequences can be copied by slicing::"
msgstr "::"
#: ../../faq/programming.rst:652
msgid "How can I find the methods or attributes of an object?"
msgstr ""
#: ../../faq/programming.rst:654
msgid ""
"For an instance ``x`` of a user-defined class, :func:`dir(x) ` returns "
"an alphabetized list of the names containing the instance attributes and "
"methods and attributes defined by its class."
msgstr ""
" ``x`` :func:`dir(x) `,< "
""
""
#: ../../faq/programming.rst:660
msgid "How can my code discover the name of an object?"
msgstr ""
#: ../../faq/programming.rst:662
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 ""
""
"``def`` ``class`` "
"::"
#: ../../faq/programming.rst:678
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 ""
""
" ``B`` ``A`` "
""
" ``a`` ``b`` "
#: ../../faq/programming.rst:683
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 ""
""
""
""
#: ../../faq/programming.rst:688
msgid ""
"In comp.lang.python, Fredrik Lundh once gave an excellent analogy in answer "
"to this question:"
msgstr ""
"comp.lang.python Fredrik Lundh "
":"
#: ../../faq/programming.rst:691
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 ""
": () "
" -- "
" () () "
""
#: ../../faq/programming.rst:696
msgid ""
"....and don't be surprised if you'll find that it's known by many names, or "
"no name at all!"
msgstr ""
""
""
#: ../../faq/programming.rst:701
msgid "What's up with the comma operator's precedence?"
msgstr ""
#: ../../faq/programming.rst:703
msgid "Comma is not an operator in Python. Consider this session::"
msgstr ""
" Python ::"
#: ../../faq/programming.rst:708
msgid ""
"Since the comma is not an operator, but a separator between expressions the "
"above is evaluated as if you had entered::"
msgstr ""
""
"::"
#: ../../faq/programming.rst:713
msgid "not::"
msgstr "::"
#: ../../faq/programming.rst:717
msgid ""
"The same is true of the various assignment operators (``=``, ``+=`` etc). "
"They are not truly operators but syntactic delimiters in assignment "
"statements."
msgstr ""
"(``=````+=`` )"
""
#: ../../faq/programming.rst:722
msgid "Is there an equivalent of C's \"?:\" ternary operator?"
msgstr "C \"?:\" "
#: ../../faq/programming.rst:724
msgid "Yes, there is. The syntax is as follows::"
msgstr "::"
#: ../../faq/programming.rst:731
msgid ""
"Before this syntax was introduced in Python 2.5, a common idiom was to use "
"logical operators::"
msgstr ""
" 2.5 "
"::"
#: ../../faq/programming.rst:736
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 ""
"*on_true* "
" ``... if ... "
"else ...`` "
#: ../../faq/programming.rst:742
msgid "Is it possible to write obfuscated one-liners in Python?"
msgstr "Python "
#: ../../faq/programming.rst:744
msgid ""
"Yes. Usually this is done by nesting :keyword:`lambda` within :keyword:`!"
"lambda`. See the following three examples, slightly adapted from Ulf "
"Bartelt::"
msgstr ""
" :keyword:`!lambda` :keyword:`lambda` "
"Ulf Bartelt "
"::"
#: ../../faq/programming.rst:771
msgid "Don't try this at home, kids!"
msgstr ""
#: ../../faq/programming.rst:777
msgid "What does the slash(/) in the parameter list of a function mean?"
msgstr " (/) "
#: ../../faq/programming.rst:779
msgid ""
"A slash in the argument list of a function denotes that the parameters prior "
"to it are positional-only. Positional-only parameters are the ones without "
"an externally usable name. Upon calling a function that accepts positional-"
"only parameters, arguments are mapped to parameters based solely on their "
"position. For example, :func:`divmod` is a function that accepts positional-"
"only parameters. Its documentation looks like this::"
msgstr ""
""
"\n"
"\n"
""
"\n"
" :func:`divmod` \n"
"::"
#: ../../faq/programming.rst:792
msgid ""
"The slash at the end of the parameter list means that both parameters are "
"positional-only. Thus, calling :func:`divmod` with keyword arguments would "
"lead to an error::"
msgstr ""
"2"
"\n"
":func:`divmod` "
"::"
#: ../../faq/programming.rst:803
msgid "Numbers and strings"
msgstr ""
#: ../../faq/programming.rst:806
msgid "How do I specify hexadecimal and octal integers?"
msgstr ""
#: ../../faq/programming.rst:808
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 ""
" 0 \"o\" () "
" \"a\" \"10\" (\"8\") "
"::"
#: ../../faq/programming.rst:816
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 ""
" 0 \"x\" ("
") "
"Python ::"
#: ../../faq/programming.rst:829
msgid "Why does -22 // 10 return -3?"
msgstr " -22 // 10 -3 "
#: ../../faq/programming.rst:831
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 ""
"``i % j`` ``j`` "
"::"
#: ../../faq/programming.rst:836
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 ""
"C C ``i % j`` "
"``i`` ``i // j`` "
#: ../../faq/programming.rst:840
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 ""
"``i % j`` ``j`` ``j`` "
"``i % j`` ``>= 0`` "
" 10 200 ``-190 "
"% 12 == 2`` ``-190 % 12 == -10`` "
""
#: ../../faq/programming.rst:848
msgid "How do I get int literal attribute instead of SyntaxError?"
msgstr " SyntaxError "
#: ../../faq/programming.rst:850
msgid ""
"Trying to lookup an ``int`` literal attribute in the normal manner gives a :"
"exc:`SyntaxError` because the period is seen as a decimal point::"
msgstr ""
" ``int`` "
":exc:`SyntaxError` ::"
#: ../../faq/programming.rst:859
msgid ""
"The solution is to separate the literal from the period with either a space "
"or parentheses."
msgstr " "
#: ../../faq/programming.rst:869
msgid "How do I convert a string to a number?"
msgstr ""
#: ../../faq/programming.rst:871
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 ""
" :func:`int` "
" ``int('144') == 144`` :func:`float` "
" ``float('144') == 144.0`` "
#: ../../faq/programming.rst:875
msgid ""
"By default, these interpret the number as decimal, so that ``int('0144') == "
"144`` holds true, 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 ""
" ``int('0144') == "
"144`` ``int('0x144')`` :exc:`ValueError` "
"``int(string, base)`` "
" ``int( '0x144', 16) == 324`` 0 "
"Python '0o' '0x' "
""
#: ../../faq/programming.rst:882
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 ""
" :func:`eval` :func:"
"`eval` "
" Python "
" ``__import__('os').system(\"rm -rf $HOME\")`` "
""
#: ../../faq/programming.rst:889
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` Python "
" ``eval('09')`` Python ('0' ) "
"'0' "
#: ../../faq/programming.rst:895
msgid "How do I convert a number to a string?"
msgstr ""
#: ../../faq/programming.rst:897
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 ""
"``144`` ``'144'`` "
" :func:`str` \n"
" :func:`hex` :func:`oct` "
"\n"
" :ref:`f-strings` :ref:"
"`formatstrings` \n"
" ``\"{:04d}\".format(144)`` ``'0144'`` ``\"{:.3f}\"."
"format(1.0/3.0)`` ``'0.333'`` "
#: ../../faq/programming.rst:906
msgid "How do I modify a string in place?"
msgstr ""
#: ../../faq/programming.rst:908
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 ""
""
"Unicode "
" :mod:`array` :"
"class:`io.StringIO` ::"
#: ../../faq/programming.rst:938
msgid "How do I use strings to call functions/methods?"
msgstr ""
#: ../../faq/programming.rst:940
msgid "There are various techniques."
msgstr ""
#: ../../faq/programming.rst:942
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 ""
""
" case "
"::"
#: ../../faq/programming.rst:957
msgid "Use the built-in function :func:`getattr`::"
msgstr " :func:`getattr` ::"
#: ../../faq/programming.rst:962
msgid ""
"Note that :func:`getattr` works on any object, including classes, class "
"instances, modules, and so on."
msgstr ""
" :func:`getattr` "
""
#: ../../faq/programming.rst:965
msgid "This is used in several places in the standard library, like this::"
msgstr "::"
#: ../../faq/programming.rst:978
msgid "Use :func:`locals` to resolve the function name::"
msgstr ":func:`locals` ::"
#: ../../faq/programming.rst:990
msgid ""
"Is there an equivalent to Perl's chomp() for removing trailing newlines from "
"strings?"
msgstr ""
" Perl chomp() "
#: ../../faq/programming.rst:992
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 ""
"``S.rstrip(\"\\r\\n\")`` ``S`` "
" ``S`` "
"::"
#: ../../faq/programming.rst:1004
msgid ""
"Since this is typically only desired when reading text one line at a time, "
"using ``S.rstrip()`` this way works well."
msgstr ""
"``S."
"rstrip()`` "
#: ../../faq/programming.rst:1009
msgid "Is there a scanf() or sscanf() equivalent?"
msgstr "scanf() sscanf() "
#: ../../faq/programming.rst:1011
msgid "Not as such."
msgstr ""
#: ../../faq/programming.rst:1013
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`. :meth:`!split()` supports an optional \"sep\" "
"parameter which is useful if the line uses something other than whitespace "
"as a separator."
msgstr ""
" :meth:"
"`~str.split` :"
"func:`int` :func:`float` :meth:`!split()` "
" \"sep\" "
""
#: ../../faq/programming.rst:1019
msgid ""
"For more complicated input parsing, regular expressions are more powerful "
"than C's ``sscanf`` and better suited for the task."
msgstr ""
"C ``sscanf`` "
""
#: ../../faq/programming.rst:1024
msgid "What does 'UnicodeDecodeError' or 'UnicodeEncodeError' error mean?"
msgstr "'UnicodeDecodeError' 'UnicodeEncodeError' "
#: ../../faq/programming.rst:1026
msgid "See the :ref:`unicode-howto`."
msgstr ":ref:`unicode-howto` "
#: ../../faq/programming.rst:1032
msgid "Can I end a raw string with an odd number of backslashes?"
msgstr "raw string "
#: ../../faq/programming.rst:1034
msgid ""
"A raw string ending with an odd number of backslashes will escape the "
"string's quote::"
msgstr ""
" raw string "
"::"
#: ../../faq/programming.rst:1042
msgid ""
"There are several workarounds for this. One is to use regular strings and "
"double the backslashes::"
msgstr ""
""
"::"
#: ../../faq/programming.rst:1048
msgid ""
"Another is to concatenate a regular string containing an escaped backslash "
"to the raw string::"
msgstr ""
" raw "
"string ::"
#: ../../faq/programming.rst:1054
msgid ""
"It is also possible to use :func:`os.path.join` to append a backslash on "
"Windows::"
msgstr ""
"Windows :func:`os.path.join` "
"::"
#: ../../faq/programming.rst:1059
msgid ""
"Note that while a backslash will \"escape\" a quote for the purposes of "
"determining where the raw string ends, no escaping occurs when interpreting "
"the value of the raw string. That is, the backslash remains present in the "
"value of the raw string::"
msgstr ""
" raw string "
" raw string "
" raw string ::"
#: ../../faq/programming.rst:1067
msgid "Also see the specification in the :ref:`language reference `."
msgstr ":ref:` ` "
#: ../../faq/programming.rst:1070
msgid "Performance"
msgstr ""
#: ../../faq/programming.rst:1073
msgid "My program is too slow. How do I speed it up?"
msgstr ""
#: ../../faq/programming.rst:1075
msgid ""
"That's a tough one, in general. First, here are a list of things to "
"remember before diving further:"
msgstr ""
""
":"
#: ../../faq/programming.rst:1078
msgid ""
"Performance characteristics vary across Python implementations. This FAQ "
"focuses on :term:`CPython`."
msgstr ""
" Python FAQ :term:`CPython` "
""
#: ../../faq/programming.rst:1080
msgid ""
"Behaviour can vary across operating systems, especially when talking about I/"
"O or multi-threading."
msgstr ""
"I/O "
""
#: ../../faq/programming.rst:1082
msgid ""
"You should always find the hot spots in your program *before* attempting to "
"optimize any code (see the :mod:`profile` module)."
msgstr ""
" ** "
" (:mod:`profile` )"
#: ../../faq/programming.rst:1084
msgid ""
"Writing benchmark scripts will allow you to iterate quickly when searching "
"for improvements (see the :mod:`timeit` module)."
msgstr ""
" (:mod:"
"`timeit` )"
#: ../../faq/programming.rst:1086
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 ""
"("
") "
#: ../../faq/programming.rst:1090
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 ""
"Python "
":"
#: ../../faq/programming.rst:1094
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 ""
" "
"() "
#: ../../faq/programming.rst:1098
msgid ""
"Use the right data structures. Study documentation for the :ref:`bltin-"
"types` and the :mod:`collections` module."
msgstr ""
":ref:`bltin-types` :mod:`collections` "
""
#: ../../faq/programming.rst:1101
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 ""
""
"() \n"
" C \n"
" :meth:`list.sort` :func:"
"`sorted` ( :ref:"
"`sortinghowto` )"
#: ../../faq/programming.rst:1109
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 ""
""
""
" ("
") "
#: ../../faq/programming.rst:1115
msgid ""
"If you have reached the limit of what pure Python can allow, there are tools "
"to take you further away. For example, `Cython `_ 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 ` "
"yourself."
msgstr ""
"pure Python "
"`Cython `_ Python C "
"Cython "
"() C "
" :ref:`write a C extension module ` "
#: ../../faq/programming.rst:1125
msgid ""
"The wiki page devoted to `performance tips `_."
msgstr ""
"` tips `_ wiki "
#: ../../faq/programming.rst:1131
msgid "What is the most efficient way to concatenate many strings together?"
msgstr ""
#: ../../faq/programming.rst:1133
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 ""
":class:`str` :class:`bytes` "
"\n"
""
#: ../../faq/programming.rst:1138
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 ""
" :class:`str` "
" :meth:`str.join` ::"
#: ../../faq/programming.rst:1146
msgid "(another reasonably efficient idiom is to use :class:`io.StringIO`)"
msgstr "( :class:`io.StringIO` )"
#: ../../faq/programming.rst:1148
msgid ""
"To accumulate many :class:`bytes` objects, the recommended idiom is to "
"extend a :class:`bytearray` object using in-place concatenation (the ``+=`` "
"operator)::"
msgstr ""
" :class:`bytes` :"
"class:`bytearray` (``+=`` ) "
"::"
#: ../../faq/programming.rst:1157
msgid "Sequences (Tuples/Lists)"
msgstr "(/)"
#: ../../faq/programming.rst:1160
msgid "How do I convert between tuples and lists?"
msgstr ""
#: ../../faq/programming.rst:1162
msgid ""
"The type constructor ``tuple(seq)`` converts any sequence (actually, any "
"iterable) into a tuple with the same items in the same order."
msgstr ""
" ``tuple(seq)`` ("
") "
#: ../../faq/programming.rst:1165
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 ""
" ``tuple([1, 2, 3])`` ``(1, 2, 3)`` ``tuple('abc')`` "
"``('a', 'b', 'c')`` "
""
" :func:`tuple` "
#: ../../faq/programming.rst:1170
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 ""
" ``list(seq)`` "
"``list((1, 2, 3))`` ``[1, 2, "
"3]`` ``list('abc')`` ``['a', 'b', 'c']`` "
"``seq[:]`` "
#: ../../faq/programming.rst:1177
msgid "What's a negative index?"
msgstr ""
#: ../../faq/programming.rst:1179
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 ""
"Python 0 "
"1 2 "
"-1 -2 2 "
"``seq[-n]`` ``seq[len(seq)-n]`` "
#: ../../faq/programming.rst:1184
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 ""
"``S[:-1]`` "
""
#: ../../faq/programming.rst:1190
msgid "How do I iterate over a sequence in reverse order?"
msgstr ""
#: ../../faq/programming.rst:1192
msgid "Use the :func:`reversed` built-in function::"
msgstr " :func:`reversed` "
#: ../../faq/programming.rst:1197
msgid ""
"This won't touch your original sequence, but build a new copy with reversed "
"order to iterate over."
msgstr ""
""
""
#: ../../faq/programming.rst:1202
msgid "How do you remove duplicates from a list?"
msgstr ""
#: ../../faq/programming.rst:1204
msgid "See the Python Cookbook for a long discussion of many ways to do this:"
msgstr "Python Cookbook :"
#: ../../faq/programming.rst:1206
msgid "https://code.activestate.com/recipes/52560/"
msgstr "https://code.activestate.com/recipes/52560/"
#: ../../faq/programming.rst:1208
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 ""
""
"::"
#: ../../faq/programming.rst:1220
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 ""
" ( :term:"
"`hashable`) ::"
#: ../../faq/programming.rst:1225
msgid ""
"This converts the list into a set, thereby removing duplicates, and then "
"back into a list."
msgstr ""
""
""
#: ../../faq/programming.rst:1230
msgid "How do you remove multiple items from a list"
msgstr ""
#: ../../faq/programming.rst:1232
msgid ""
"As with removing duplicates, explicitly iterating in reverse with a delete "
"condition is one possibility. However, it is easier and faster to use slice "
"replacement with an implicit or explicit forward iteration. Here are three "
"variations.::"
msgstr ""
""
"/"
"::"
#: ../../faq/programming.rst:1241
msgid "The list comprehension may be fastest."
msgstr ""
#: ../../faq/programming.rst:1245
msgid "How do you make an array in Python?"
msgstr "Python "
#: ../../faq/programming.rst:1247
msgid "Use a list::"
msgstr "::"
#: ../../faq/programming.rst:1251
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 ""
" C Pascal Python "
""
#: ../../faq/programming.rst:1254
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 `NumPy `_ and other third party "
"packages define array-like structures with various characteristics as well."
msgstr ""
"``array`` "
"`NumPy `_ "
""
#: ../../faq/programming.rst:1260
msgid ""
"To get Lisp-style linked lists, you can emulate *cons cells* using tuples::"
msgstr ""
"Lisp *cons cells* "
"::"
#: ../../faq/programming.rst:1264
msgid ""
"If mutability is desired, you could use lists instead of tuples. Here the "
"analogue of a 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 ""
"Lisp "
"*car* ``lisp_list[0]`` cdr "
"``lisp_list[1]`` "
" Python "
#: ../../faq/programming.rst:1273
msgid "How do I create a multidimensional list?"
msgstr ""
#: ../../faq/programming.rst:1275
msgid "You probably tried to make a multidimensional array like this::"
msgstr "::"
#: ../../faq/programming.rst:1279
msgid "This looks correct if you print it:"
msgstr ":"
#: ../../faq/programming.rst:1290
msgid "But when you assign a value, it shows up in multiple places:"
msgstr ":"
#: ../../faq/programming.rst:1302
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 ""
"``*`` "
" ``*3`` 2 "
""
""
#: ../../faq/programming.rst:1307
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 ""
""
"::"
#: ../../faq/programming.rst:1314
msgid ""
"This generates a list containing 3 different lists of length two. You can "
"also use a list comprehension::"
msgstr ""
" 2 3 "
"::"
#: ../../faq/programming.rst:1320
msgid ""
"Or, you can use an extension that provides a matrix datatype; `NumPy "
"`_ is the best known."
msgstr ""
"; `NumPy "
"`_ "
#: ../../faq/programming.rst:1325
msgid "How do I apply a method to a sequence of objects?"
msgstr ""
#: ../../faq/programming.rst:1327
msgid "Use a list comprehension::"
msgstr "::"
#: ../../faq/programming.rst:1334
msgid ""
"Why does a_tuple[i] += ['item'] raise an exception when the addition works?"
msgstr " a_tuple[i] += ['item'] ?"
#: ../../faq/programming.rst:1336
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 ""
" ** Python "
""
#: ../../faq/programming.rst:1340
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 ""
""
" ``list`` ``+=`` "
#: ../../faq/programming.rst:1344
msgid "If you wrote::"
msgstr "::"
#: ../../faq/programming.rst:1352
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 ""
": ``1`` (``1``) "
"``a_tuple[0]`` ``2`` "
" ``2`` ``0`` "
""
#: ../../faq/programming.rst:1358
msgid ""
"Under the covers, what this augmented assignment statement is doing is "
"approximately this::"
msgstr "::"
#: ../../faq/programming.rst:1367
msgid ""
"It is the assignment part of the operation that produces the error, since a "
"tuple is immutable."
msgstr ""
#: ../../faq/programming.rst:1370
msgid "When you write something like::"
msgstr "::"
#: ../../faq/programming.rst:1378
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 ""
""
"::"
#: ../../faq/programming.rst:1384
msgid ""
"To see why this happens, you need to know that (a) if an object implements "
"an :meth:`~object.__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, :meth:`!__iadd__` is equivalent "
"to calling :meth:`~list.extend` on the list and returning the list. That's "
"why we say that for lists, ``+=`` is a \"shorthand\" for :meth:`!list."
"extend`::"
msgstr ""
" 2 (a) "
" :meth:`~object.__iadd__` "
" ``+=`` "
"; (b) :meth:`!__iadd__` :meth:`~list.extend` "
" ``+=`` :meth:`!list."
"extend` \"\" ::"
#: ../../faq/programming.rst:1397
msgid "This is equivalent to::"
msgstr "::"
#: ../../faq/programming.rst:1402
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 ""
"a_list "
" ``a_list`` ``a_list`` "
""
""
#: ../../faq/programming.rst:1407
msgid "Thus, in our tuple example what is happening is equivalent to::"
msgstr "::"
#: ../../faq/programming.rst:1415
msgid ""
"The :meth:`!__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 ""
":meth:`!__iadd__` (extend) ``result`` "
"``a_tuple[0]`` "
""
#: ../../faq/programming.rst:1421
msgid ""
"I want to do a complicated sort: can you do a Schwartzian Transform in "
"Python?"
msgstr "Python "
#: ../../faq/programming.rst:1423
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 ""
"Perl Randal Schwartz "
""
"Python :meth:`list.sort` ``key`` "
"::"
#: ../../faq/programming.rst:1432
msgid "How can I sort one list by values from another list?"
msgstr ""
#: ../../faq/programming.rst:1434
msgid ""
"Merge them into an iterator of tuples, sort the resulting list, and then "
"pick out the element you want. ::"
msgstr ""
""
" ::"
#: ../../faq/programming.rst:1449
msgid "Objects"
msgstr ""
#: ../../faq/programming.rst:1452
msgid "What is a class?"
msgstr ""
#: ../../faq/programming.rst:1454
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 ""
"class "
""
" (attribute/) () "
""
#: ../../faq/programming.rst:1458
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 ""
" () "
""
""
" ``Mailbox`` "
" ``MboxMailbox``"
"``MaildirMailbox````OutlookMailbox`` "
#: ../../faq/programming.rst:1467
msgid "What is a method?"
msgstr ""
#: ../../faq/programming.rst:1469
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 ""
" ``x`` ``x.name(arguments...)`` "
"::"
#: ../../faq/programming.rst:1479
msgid "What is self?"
msgstr "self "
#: ../../faq/programming.rst:1481
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 ``meth(self, "
"a, b, c)`` "
" ``x`` ``x.meth(a, b, c)`` "
"``meth(x, a, b, c)`` "
#: ../../faq/programming.rst:1486
msgid "See also :ref:`why-self`."
msgstr ":ref:`why-self` "
#: ../../faq/programming.rst:1490
msgid ""
"How do I check if an object is an instance of a given class or of a subclass "
"of it?"
msgstr ""
""
""
#: ../../faq/programming.rst:1492
msgid ""
"Use the built-in function :func:`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 ""
" :func:`isinstance(obj, cls) ` "
" ``isinstance(obj, (class1, class2, ...))`` "
""
"``isinstance(obj, str)`` ``isinstance(obj, (int, float, complex))`` "
"Python "
#: ../../faq/programming.rst:1499
msgid ""
"Note that :func:`isinstance` also checks for virtual inheritance from an :"
"term:`abstract base class`. So, the test will return ``True`` for a "
"registered class even if hasn't directly or indirectly inherited from it. "
"To test for \"true inheritance\", scan the :term:`MRO` of the class:"
msgstr ""
" :func:`isinstance` :term:`abstract base class` ()"
" (register) /"
" ``True`` "
" :term:`MRO` :"
#: ../../faq/programming.rst:1534
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 ""
" :func:`isinstance` "
""
""
""
"::"
#: ../../faq/programming.rst:1548
msgid ""
"A better approach is to define a ``search()`` method on all the classes and "
"just call it::"
msgstr ""
"``search()`` "
"::"
#: ../../faq/programming.rst:1563
msgid "What is delegation?"
msgstr ""
#: ../../faq/programming.rst:1565
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 ""
" (delegation) ("
") ``x`` "
""
" ``x`` "
""
#: ../../faq/programming.rst:1571
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 ""
"Python "
"::"
#: ../../faq/programming.rst:1586
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 :meth:`~object."
"__getattr__` method; consult :ref:`the language reference ` for more information about controlling attribute access."
msgstr ""
" ``UpperOut`` ``write()`` "
" ``self._outfile.write()`` "
" ``self._outfile`` "
" :meth:`~object.__getattr__` "
" :ref:` ` "
""
#: ../../faq/programming.rst:1593
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:"
"`~object.__setattr__` method too, and it must do so carefully. The basic "
"implementation of :meth:`!__setattr__` is roughly equivalent to the "
"following::"
msgstr ""
""
" :meth:`~object.__setattr__` "
" :meth:`!__setattr__` "
"::"
#: ../../faq/programming.rst:1604
msgid ""
"Most :meth:`!__setattr__` implementations must modify :meth:`self.__dict__ "
"` to store local state for self without causing an infinite "
"recursion."
msgstr ""
" :meth:`!__setattr__` :meth:`self.__dict__ ` "
""
#: ../../faq/programming.rst:1610
msgid ""
"How do I call a method defined in a base class from a derived class that "
"extends it?"
msgstr ""
""
""
#: ../../faq/programming.rst:1612
msgid "Use the built-in :func:`super` function::"
msgstr " :func:`super` ::"
#: ../../faq/programming.rst:1618
msgid ""
"In the example, :func:`super` will automatically determine the instance from "
"which it was called (the ``self`` value), look up the :term:`method "
"resolution order` (MRO) with ``type(self).__mro__``, and return the next in "
"line after ``Derived`` in the MRO: ``Base``."
msgstr ""
" :func:`super` (``self`` ) "
" ``type(self).__mro__`` :term:`method resolution order` (MRO "
") MRO ``Derived`` : ``Base`` "
#: ../../faq/programming.rst:1625
msgid "How can I organize my code to make it easier to change the base class?"
msgstr ""
#: ../../faq/programming.rst:1627
msgid ""
"You could assign the base class to an alias and derive from the alias. 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 ""
" (alias) "
""
""
"::"
#: ../../faq/programming.rst:1642
msgid "How do I create static class data and static class methods?"
msgstr ""
#: ../../faq/programming.rst:1644
msgid ""
"Both static data and static methods (in the sense of C++ or Java) are "
"supported in Python."
msgstr ""
"(C++ Java ) Python "
""
#: ../../faq/programming.rst:1647
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 ""
""
"::"
#: ../../faq/programming.rst:1659
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`` ``c.__class__`` ``C`` "
"``c.count`` ``isinstance(c, C)`` "
" ``c`` ``C.count`` "
#: ../../faq/programming.rst:1663
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 ""
": C ``self.count = 42`` ``self`` "
" \"count\" "
""
"::"
#: ../../faq/programming.rst:1670
msgid "Static methods are possible::"
msgstr "::"
#: ../../faq/programming.rst:1678
msgid ""
"However, a far more straightforward way to get the effect of a static method "
"is via a simple module-level function::"
msgstr ""
""
"::"
#: ../../faq/programming.rst:1684
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 ""
" ("
") "
""
#: ../../faq/programming.rst:1689
msgid "How can I overload constructors (or methods) in Python?"
msgstr ""
"Python ()"
""
#: ../../faq/programming.rst:1691
msgid ""
"This answer actually applies to all methods, but the question usually comes "
"up first in the context of constructors."
msgstr ""
""
""
#: ../../faq/programming.rst:1694
msgid "In C++ you'd write"
msgstr "C++ "
#: ../../faq/programming.rst:1703
msgid ""
"In Python you have to write a single constructor that catches all cases "
"using default arguments. For example::"
msgstr ""
"Python "
"::"
#: ../../faq/programming.rst:1713
msgid "This is not entirely equivalent, but close enough in practice."
msgstr ""
#: ../../faq/programming.rst:1715
msgid "You could also try a variable-length argument list, e.g. ::"
msgstr " ::"
#: ../../faq/programming.rst:1720
msgid "The same approach works for all method definitions."
msgstr ""
#: ../../faq/programming.rst:1724
msgid "I try to use __spam and I get an error about _SomeClassName__spam."
msgstr "__spam _SomeClassName__spam "
#: ../../faq/programming.rst:1726
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 ""
" \""
"\" ``__spam`` "
"() "
"``classname`` "
"``_classname__spam`` "
#: ../../faq/programming.rst:1732
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 ""
""
" \"_classname__spam\" "
" ``__dict__`` Python "
""
#: ../../faq/programming.rst:1739
msgid "My class defines __del__ but it is not called when I delete the object."
msgstr ""
" __del__ "
""
#: ../../faq/programming.rst:1741
msgid "There are several possible reasons for this."
msgstr ""
#: ../../faq/programming.rst:1743
msgid ""
"The :keyword:`del` statement does not necessarily call :meth:`~object."
"__del__` -- it simply decrements the object's reference count, and if this "
"reaches zero :meth:`!__del__` is called."
msgstr ""
":keyword:`del` :meth:`~object.__del__` "
"-- "
" :meth:`!__del__` "
#: ../../faq/programming.rst:1747
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 ""
" ("
") 0 "
"Python "
""
" :meth:`!__del__` "
""
" :meth:`!__del__` "
" :func:`gc.collect` "
" ** "
#: ../../faq/programming.rst:1758
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 ""
" ``close()`` "
"\n"
"``close()`` "
"\n"
":meth:`!__del__` -- :meth:`!__del__` "
"``close()`` ``close()`` "
""
#: ../../faq/programming.rst:1765
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 ""
" :mod:`weakref` "
" ("
") "
#: ../../faq/programming.rst:1778
msgid ""
"Finally, if your :meth:`!__del__` method raises an exception, a warning "
"message is printed to :data:`sys.stderr`."
msgstr ""
" :meth:`!__del__` "
" :data:`sys.stderr` "
#: ../../faq/programming.rst:1783
msgid "How do I get a list of all instances of a given class?"
msgstr ""
#: ../../faq/programming.rst:1785
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 ""
"Python () "
""
""
#: ../../faq/programming.rst:1791
msgid "Why does the result of ``id()`` appear to be not unique?"
msgstr " ``id()`` ?"
#: ../../faq/programming.rst:1793
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 ""
" :func:`id` "
" CPython "
""
""
":"
#: ../../faq/programming.rst:1804
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 ""
"2 id ``id()`` "
"id "
":"
#: ../../faq/programming.rst:1817
msgid "When can I rely on identity tests with the *is* operator?"
msgstr " *is* "
#: ../../faq/programming.rst:1819
msgid ""
"The ``is`` operator tests for object identity. The test ``a is b`` is "
"equivalent to ``id(a) == id(b)``."
msgstr ""
"``is`` ``a is b`` "
"``id(a) == id(b)`` "
#: ../../faq/programming.rst:1822
msgid ""
"The most important property of an identity test is that an object is always "
"identical to itself, ``a is a`` always returns ``True``. Identity tests are "
"usually faster than equality tests. And unlike equality tests, identity "
"tests are guaranteed to return a boolean ``True`` or ``False``."
msgstr ""
" ``a "
"is a`` ``True`` "
" "
"``True`` ``False`` "
#: ../../faq/programming.rst:1827
msgid ""
"However, identity tests can *only* be substituted for equality tests when "
"object identity is assured. Generally, there are three circumstances where "
"identity is guaranteed:"
msgstr ""
""
" ** 3"
":"
#: ../../faq/programming.rst:1831
msgid ""
"1) Assignments create new names but do not change object identity. After "
"the assignment ``new = old``, it is guaranteed that ``new is old``."
msgstr ""
"1 ID ``new = "
"old`` ``new is old`` "
#: ../../faq/programming.rst:1834
msgid ""
"2) Putting an object in a container that stores object references does not "
"change object identity. After the list assignment ``s[0] = x``, it is "
"guaranteed that ``s[0] is x``."
msgstr ""
"2 "
"ID ``s[0] = x`` ``s[0] is x`` "
""
#: ../../faq/programming.rst:1838
msgid ""
"3) If an object is a singleton, it means that only one instance of that "
"object can exist. After the assignments ``a = None`` and ``b = None``, it "
"is guaranteed that ``a is b`` because ``None`` is a singleton."
msgstr ""
"3 "
" ``a = None`` ``b = None`` "
"``a is b`` ``None`` "
#: ../../faq/programming.rst:1842
msgid ""
"In most other circumstances, identity tests are inadvisable and equality "
"tests are preferred. In particular, identity tests should not be used to "
"check constants such as :class:`int` and :class:`str` which aren't "
"guaranteed to be singletons::"
msgstr ""
" "
" :class:`int` :class:`str` "
""
#: ../../faq/programming.rst:1859
msgid "Likewise, new instances of mutable containers are never identical::"
msgstr ""
"::"
#: ../../faq/programming.rst:1866
msgid ""
"In the standard library code, you will see several common patterns for "
"correctly using identity tests:"
msgstr ""
""
":"
#: ../../faq/programming.rst:1869
msgid ""
"1) As recommended by :pep:`8`, an identity test is the preferred way to "
"check for ``None``. This reads like plain English in code and avoids "
"confusion with other objects that may have boolean values that evaluate to "
"false."
msgstr ""
"1 :pep:`8` ``None`` "
" false "
""
#: ../../faq/programming.rst:1873
msgid ""
"2) Detecting optional arguments can be tricky when ``None`` is a valid input "
"value. In those situations, you can create a singleton sentinel object "
"guaranteed to be distinct from other objects. For example, here is how to "
"implement a method that behaves like :meth:`dict.pop`::"
msgstr ""
"2 ``None`` "
" "
" :meth:`dict.pop` "
":"
#: ../../faq/programming.rst:1889
msgid ""
"3) Container implementations sometimes need to augment equality tests with "
"identity tests. This prevents the code from being confused by objects such "
"as ``float('NaN')`` that are not equal to themselves."
msgstr ""
"3 "
" ``float('NaN')`` "
""
#: ../../faq/programming.rst:1893
msgid ""
"For example, here is the implementation of :meth:`collections.abc.Sequence."
"__contains__`::"
msgstr ""
#: ../../faq/programming.rst:1904
msgid ""
"How can a subclass control what data is stored in an immutable instance?"
msgstr ""
""
""
#: ../../faq/programming.rst:1906
msgid ""
"When subclassing an immutable type, override the :meth:`~object.__new__` "
"method instead of the :meth:`~object.__init__` method. The latter only runs "
"*after* an instance is created, which is too late to alter data in an "
"immutable instance."
msgstr ""
" :meth:`~object.__init__` :"
"meth:`~object.__new__` "
" ** "
""
#: ../../faq/programming.rst:1911
msgid ""
"All of these immutable classes have a different signature than their parent "
"class:"
msgstr ""
":"
#: ../../faq/programming.rst:1937
msgid "The classes can be used like this:"
msgstr ":"
#: ../../faq/programming.rst:1952
msgid "How do I cache method calls?"
msgstr " "
#: ../../faq/programming.rst:1954
msgid ""
"The two principal tools for caching methods are :func:`functools."
"cached_property` and :func:`functools.lru_cache`. The former stores results "
"at the instance level and the latter at the class level."
msgstr ""
" :func:`functools.cached_property` "
" :func:`functools.lru_cache` "
""
#: ../../faq/programming.rst:1959
msgid ""
"The *cached_property* approach only works with methods that do not take any "
"arguments. It does not create a reference to the instance. The cached "
"method result will be kept only as long as the instance is alive."
msgstr ""
"*cached_property* "
""
""
#: ../../faq/programming.rst:1963
msgid ""
"The advantage is that when an instance is no longer used, the cached method "
"result will be released right away. The disadvantage is that if instances "
"accumulate, so too will the accumulated method results. They can grow "
"without bound."
msgstr ""
""
""
""
#: ../../faq/programming.rst:1968
msgid ""
"The *lru_cache* approach works with methods that have hashable arguments. "
"It creates a reference to the instance unless special efforts are made to "
"pass in weak references."
msgstr ""
#: ../../faq/programming.rst:1972
msgid ""
"The advantage of the least recently used algorithm is that the cache is "
"bounded by the specified *maxsize*. The disadvantage is that instances are "
"kept alive until they age out of the cache or until the cache is cleared."
msgstr ""
"least recently used LRU "
" *maxsize* "
""
""
#: ../../faq/programming.rst:1977
msgid "This example shows the various techniques::"
msgstr "::"
#: ../../faq/programming.rst:2001
msgid ""
"The above example assumes that the *station_id* never changes. If the "
"relevant instance attributes are mutable, the *cached_property* approach "
"can't be made to work because it cannot detect changes to the attributes."
msgstr ""
" *station_id* "
" *cached_property* "
""
#: ../../faq/programming.rst:2006
msgid ""
"The *lru_cache* approach can be made to work, but the class needs to define "
"the *__eq__* and *__hash__* methods so the cache can detect relevant "
"attribute updates::"
msgstr ""
#: ../../faq/programming.rst:2032
msgid "Modules"
msgstr ""
#: ../../faq/programming.rst:2035
msgid "How do I create a .pyc file?"
msgstr ".pyc "
#: ../../faq/programming.rst:2037
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 ""
" ("
") "
" ``.pyc`` ``.py`` "
" ``__pycache__`` ``.pyc`` "
" ``.py`` ``.pyc`` "
" ``python`` ( :pep:"
"`3147` )"
#: ../../faq/programming.rst:2045
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 ""
"``.pyc`` 1 "
" ``__pycache__`` "
""
""
#: ../../faq/programming.rst:2050
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 ""
":envvar:`PYTHONDONTWRITEBYTECODE` "
" Python ``__pycache__`` "
" () "
" .pyc "
#: ../../faq/programming.rst:2055
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 ""
" Python ``.pyc`` "
" ``foo.py`` "
"``xyz.py`` ( ``python foo.py`` "
") ``foo`` ``xyz`` ``xyz`` "
" ``.pyc`` ``foo.py`` "
"``foo`` ``.pyc`` "
#: ../../faq/programming.rst:2062
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 ""
"``foo`` ``.pyc`` -- "
" ``.pyc`` -- :mod:`py_compile` "
" :mod:`compileall` "
#: ../../faq/programming.rst:2066
msgid ""
"The :mod:`py_compile` module can manually compile any module. One way is to "
"use the ``compile()`` function in that module interactively::"
msgstr ""
":mod:`py_compile` "
" ``compile()`` "
"::"
#: ../../faq/programming.rst:2072
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 ""
"``foo.py`` ``__pycache__`` "
" ``.pyc`` ( "
"``cfile`` )"
#: ../../faq/programming.rst:2076
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 ""
":mod:`compileall` "
" ``compileall.py`` "
"::"
#: ../../faq/programming.rst:2085
msgid "How do I find the current module name?"
msgstr ""
#: ../../faq/programming.rst:2087
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 ""
" ``__name__`` "
" ``'__main__'`` "
""
""
"``__name__`` ::"
#: ../../faq/programming.rst:2102
msgid "How can I have modules that mutually import each other?"
msgstr ""
#: ../../faq/programming.rst:2104
msgid "Suppose you have the following modules:"
msgstr ":"
#: ../../faq/programming.rst:2106
msgid ":file:`foo.py`::"
msgstr ":file:`foo.py`::"
#: ../../faq/programming.rst:2111
msgid ":file:`bar.py`::"
msgstr ":file:`bar.py`::"
#: ../../faq/programming.rst:2116
msgid "The problem is that the interpreter will perform the following steps:"
msgstr ":"
#: ../../faq/programming.rst:2118
msgid "main imports ``foo``"
msgstr "main ``foo`` "
#: ../../faq/programming.rst:2119
msgid "Empty globals for ``foo`` are created"
msgstr "``foo`` "
#: ../../faq/programming.rst:2120
msgid "``foo`` is compiled and starts executing"
msgstr "``foo`` "
#: ../../faq/programming.rst:2121
msgid "``foo`` imports ``bar``"
msgstr "``foo`` ``bar`` "
#: ../../faq/programming.rst:2122
msgid "Empty globals for ``bar`` are created"
msgstr "``bar`` "
#: ../../faq/programming.rst:2123
msgid "``bar`` is compiled and starts executing"
msgstr "``bar`` "
#: ../../faq/programming.rst:2124
msgid ""
"``bar`` imports ``foo`` (which is a no-op since there already is a module "
"named ``foo``)"
msgstr ""
"``bar`` ``foo`` ( ``foo`` "
" no-op )"
#: ../../faq/programming.rst:2125
msgid ""
"The import mechanism tries to read ``foo_var`` from ``foo`` globals, to set "
"``bar.foo_var = foo.foo_var``"
msgstr ""
" ``foo`` ``foo_var`` ``bar."
"foo_var = foo.foo_var`` "
#: ../../faq/programming.rst:2127
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 ""
"Python ``foo`` "
"``foo`` "
#: ../../faq/programming.rst:2130
msgid ""
"The same thing happens when you use ``import foo``, and then try to access "
"``foo.foo_var`` in global code."
msgstr ""
"``import foo`` ``foo.foo_var`` "
""
#: ../../faq/programming.rst:2133
msgid "There are (at least) three possible workarounds for this problem."
msgstr " () "
#: ../../faq/programming.rst:2135
msgid ""
"Guido van Rossum recommends avoiding all uses of ``from 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 "
"``.``."
msgstr ""
"Guido van Rossum ``from import ...`` "
""
""
" ``.`` "
#: ../../faq/programming.rst:2140
msgid ""
"Jim Roskind suggests performing steps in the following order in each module:"
msgstr ""
"Jim Roskind "
":"
#: ../../faq/programming.rst:2142
msgid ""
"exports (globals, functions, and classes that don't need imported base "
"classes)"
msgstr ""
" ("
")"
#: ../../faq/programming.rst:2144
msgid "``import`` statements"
msgstr "``import`` "
#: ../../faq/programming.rst:2145
msgid ""
"active code (including globals that are initialized from imported values)."
msgstr ""
" ()"
#: ../../faq/programming.rst:2147
msgid ""
"Van Rossum doesn't like this approach much because the imports appear in a "
"strange place, but it does work."
msgstr ""
" Van Rossum "
""
#: ../../faq/programming.rst:2150
msgid ""
"Matthias Urlichs recommends restructuring your code so that the recursive "
"import is not necessary in the first place."
msgstr ""
"Matthias Urlichs "
""
#: ../../faq/programming.rst:2153
msgid "These solutions are not mutually exclusive."
msgstr ""
#: ../../faq/programming.rst:2157
msgid "__import__('x.y.z') returns ; how do I get z?"
msgstr ""
"__import__('x.y.z') z "
""
#: ../../faq/programming.rst:2159
msgid ""
"Consider using the convenience function :func:`~importlib.import_module` "
"from :mod:`importlib` instead::"
msgstr ""
":mod:`importlib` :func:`~importlib.import_module` "
""
#: ../../faq/programming.rst:2166
msgid ""
"When I edit an imported module and reimport it, the changes don't show up. "
"Why does this happen?"
msgstr ""
""
""
#: ../../faq/programming.rst:2168
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 ""
"Python "
""
""
""
"::"
#: ../../faq/programming.rst:2178
msgid ""
"Warning: this technique is not 100% fool-proof. In particular, modules "
"containing statements like ::"
msgstr ": 100% ::"
#: ../../faq/programming.rst:2183
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 ""
""
""
" **"
"::"
#: ../../faq/programming.rst:2196
msgid ""
"The nature of the problem is made clear if you print out the \"identity\" of "
"the class objects::"
msgstr ""
" \"\" "
"::"