blob: c8190e4cc18cb1929d41fdc4cfff39619c7ffe81 [file] [log] [blame]
Georg Brandl6728c5a2009-10-11 18:31:23 +00001:tocdepth: 2
2
3===============
4Programming FAQ
5===============
6
Georg Brandl44ea77b2013-03-28 13:28:44 +01007.. only:: html
8
9 .. contents::
Georg Brandl6728c5a2009-10-11 18:31:23 +000010
11General Questions
12=================
13
14Is there a source code level debugger with breakpoints, single-stepping, etc.?
15------------------------------------------------------------------------------
16
17Yes.
18
19The pdb module is a simple but adequate console-mode debugger for Python. It is
20part of the standard Python library, and is :mod:`documented in the Library
21Reference Manual <pdb>`. You can also write your own debugger by using the code
22for pdb as an example.
23
24The IDLE interactive development environment, which is part of the standard
25Python distribution (normally available as Tools/scripts/idle), includes a
Georg Brandl66e624b2014-10-29 08:55:14 +010026graphical debugger.
Georg Brandl6728c5a2009-10-11 18:31:23 +000027
28PythonWin is a Python IDE that includes a GUI debugger based on pdb. The
29Pythonwin debugger colors breakpoints and has quite a few cool features such as
30debugging non-Pythonwin programs. Pythonwin is available as part of the `Python
Serhiy Storchakab4905ef2016-05-07 10:50:12 +030031for Windows Extensions <https://sourceforge.net/projects/pywin32/>`__ project and
Georg Brandl6728c5a2009-10-11 18:31:23 +000032as a part of the ActivePython distribution (see
Serhiy Storchakab4905ef2016-05-07 10:50:12 +030033https://www.activestate.com/activepython\ ).
Georg Brandl6728c5a2009-10-11 18:31:23 +000034
35`Boa Constructor <http://boa-constructor.sourceforge.net/>`_ is an IDE and GUI
36builder that uses wxWidgets. It offers visual frame creation and manipulation,
37an object inspector, many views on the source like object browsers, inheritance
38hierarchies, doc string generated html documentation, an advanced debugger,
39integrated help, and Zope support.
40
Georg Brandlfa55a312014-10-29 09:24:54 +010041`Eric <http://eric-ide.python-projects.org/>`_ is an IDE built on PyQt
Georg Brandl6728c5a2009-10-11 18:31:23 +000042and the Scintilla editing component.
43
44Pydb is a version of the standard Python debugger pdb, modified for use with DDD
45(Data Display Debugger), a popular graphical debugger front end. Pydb can be
46found at http://bashdb.sourceforge.net/pydb/ and DDD can be found at
Serhiy Storchakab4905ef2016-05-07 10:50:12 +030047https://www.gnu.org/software/ddd.
Georg Brandl6728c5a2009-10-11 18:31:23 +000048
49There are a number of commercial Python IDEs that include graphical debuggers.
50They include:
51
Serhiy Storchakab4905ef2016-05-07 10:50:12 +030052* Wing IDE (https://wingware.com/)
53* Komodo IDE (https://komodoide.com/)
Georg Brandl66e624b2014-10-29 08:55:14 +010054* PyCharm (https://www.jetbrains.com/pycharm/)
Georg Brandl6728c5a2009-10-11 18:31:23 +000055
56
57Is there a tool to help find bugs or perform static analysis?
58-------------------------------------------------------------
59
60Yes.
61
62PyChecker is a static analysis tool that finds bugs in Python source code and
63warns about code complexity and style. You can get PyChecker from
Georg Brandl0f5d6c02014-10-29 10:57:37 +010064http://pychecker.sourceforge.net/.
Georg Brandl6728c5a2009-10-11 18:31:23 +000065
Serhiy Storchakab4905ef2016-05-07 10:50:12 +030066`Pylint <https://www.pylint.org/>`_ is another tool that checks
Georg Brandl6728c5a2009-10-11 18:31:23 +000067if a module satisfies a coding standard, and also makes it possible to write
68plug-ins to add a custom feature. In addition to the bug checking that
69PyChecker performs, Pylint offers some additional features such as checking line
70length, whether variable names are well-formed according to your coding
71standard, whether declared interfaces are fully implemented, and more.
Serhiy Storchakab4905ef2016-05-07 10:50:12 +030072https://docs.pylint.org/ provides a full list of Pylint's features.
Georg Brandl6728c5a2009-10-11 18:31:23 +000073
74
75How can I create a stand-alone binary from a Python script?
76-----------------------------------------------------------
77
78You don't need the ability to compile Python to C code if all you want is a
79stand-alone program that users can download and run without having to install
80the Python distribution first. There are a number of tools that determine the
81set of modules required by a program and bind these modules together with a
82Python binary to produce a single executable.
83
84One is to use the freeze tool, which is included in the Python source tree as
85``Tools/freeze``. It converts Python byte code to C arrays; a C compiler you can
86embed all your modules into a new program, which is then linked with the
87standard Python modules.
88
89It works by scanning your source recursively for import statements (in both
90forms) and looking for the modules in the standard Python path as well as in the
91source directory (for built-in modules). It then turns the bytecode for modules
92written in Python into C code (array initializers that can be turned into code
93objects using the marshal module) and creates a custom-made config file that
94only contains those built-in modules which are actually used in the program. It
95then compiles the generated C code and links it with the rest of the Python
96interpreter to form a self-contained binary which acts exactly like your script.
97
98Obviously, freeze requires a C compiler. There are several other utilities
99which don't. One is Thomas Heller's py2exe (Windows only) at
100
101 http://www.py2exe.org/
102
Georg Brandlfa55a312014-10-29 09:24:54 +0100103Another tool is Anthony Tuininga's `cx_Freeze <http://cx-freeze.sourceforge.net/>`_.
Georg Brandl6728c5a2009-10-11 18:31:23 +0000104
105
106Are there coding standards or a style guide for Python programs?
107----------------------------------------------------------------
108
109Yes. The coding style required for standard library modules is documented as
110:pep:`8`.
111
112
113My program is too slow. How do I speed it up?
114---------------------------------------------
115
116That's a tough one, in general. There are many tricks to speed up Python code;
117consider rewriting parts in C as a last resort.
118
119In some cases it's possible to automatically translate Python to C or x86
120assembly language, meaning that you don't have to modify your code to gain
121increased speed.
122
123.. XXX seems to have overlap with other questions!
124
125`Pyrex <http://www.cosc.canterbury.ac.nz/~greg/python/Pyrex/>`_ can compile a
126slightly modified version of Python code into a C extension, and can be used on
127many different platforms.
128
129`Psyco <http://psyco.sourceforge.net>`_ is a just-in-time compiler that
130translates Python code into x86 assembly language. If you can use it, Psyco can
131provide dramatic speedups for critical functions.
132
133The rest of this answer will discuss various tricks for squeezing a bit more
134speed out of Python code. *Never* apply any optimization tricks unless you know
135you need them, after profiling has indicated that a particular function is the
136heavily executed hot spot in the code. Optimizations almost always make the
137code less clear, and you shouldn't pay the costs of reduced clarity (increased
138development time, greater likelihood of bugs) unless the resulting performance
139benefit is worth it.
140
141There is a page on the wiki devoted to `performance tips
Georg Brandl06f3b3b2014-10-29 08:36:35 +0100142<https://wiki.python.org/moin/PythonSpeed/PerformanceTips>`_.
Georg Brandl6728c5a2009-10-11 18:31:23 +0000143
144Guido van Rossum has written up an anecdote related to optimization at
Georg Brandl06f3b3b2014-10-29 08:36:35 +0100145https://www.python.org/doc/essays/list2str.
Georg Brandl6728c5a2009-10-11 18:31:23 +0000146
147One thing to notice is that function and (especially) method calls are rather
148expensive; if you have designed a purely OO interface with lots of tiny
149functions that don't do much more than get or set an instance variable or call
150another method, you might consider using a more direct way such as directly
151accessing instance variables. Also see the standard module :mod:`profile` which
152makes it possible to find out where your program is spending most of its time
153(if you have some patience -- the profiling itself can slow your program down by
154an order of magnitude).
155
156Remember that many standard optimization heuristics you may know from other
157programming experience may well apply to Python. For example it may be faster
158to send output to output devices using larger writes rather than smaller ones in
159order to reduce the overhead of kernel system calls. Thus CGI scripts that
160write all output in "one shot" may be faster than those that write lots of small
161pieces of output.
162
163Also, be sure to use Python's core features where appropriate. For example,
164slicing allows programs to chop up lists and other sequence objects in a single
165tick of the interpreter's mainloop using highly optimized C implementations.
166Thus to get the same effect as::
167
168 L2 = []
Georg Brandleacada82011-08-25 11:52:26 +0200169 for i in range(3):
Georg Brandl6728c5a2009-10-11 18:31:23 +0000170 L2.append(L1[i])
171
172it is much shorter and far faster to use ::
173
Georg Brandl0cedb4b2009-12-20 14:20:16 +0000174 L2 = list(L1[:3]) # "list" is redundant if L1 is a list.
Georg Brandl6728c5a2009-10-11 18:31:23 +0000175
Georg Brandl6f82cd32010-02-06 18:44:44 +0000176Note that the functionally-oriented built-in functions such as :func:`map`,
177:func:`zip`, and friends can be a convenient accelerator for loops that
178perform a single task. For example to pair the elements of two lists
179together::
Georg Brandl6728c5a2009-10-11 18:31:23 +0000180
Georg Brandl0cedb4b2009-12-20 14:20:16 +0000181 >>> zip([1, 2, 3], [4, 5, 6])
Georg Brandl6728c5a2009-10-11 18:31:23 +0000182 [(1, 4), (2, 5), (3, 6)]
183
184or to compute a number of sines::
185
Georg Brandl0cedb4b2009-12-20 14:20:16 +0000186 >>> map(math.sin, (1, 2, 3, 4))
187 [0.841470984808, 0.909297426826, 0.14112000806, -0.756802495308]
Georg Brandl6728c5a2009-10-11 18:31:23 +0000188
189The operation completes very quickly in such cases.
190
Georg Brandl0cedb4b2009-12-20 14:20:16 +0000191Other examples include the ``join()`` and ``split()`` :ref:`methods
192of string objects <string-methods>`.
Georg Brandl6728c5a2009-10-11 18:31:23 +0000193For example if s1..s7 are large (10K+) strings then
194``"".join([s1,s2,s3,s4,s5,s6,s7])`` may be far faster than the more obvious
195``s1+s2+s3+s4+s5+s6+s7``, since the "summation" will compute many
196subexpressions, whereas ``join()`` does all the copying in one pass. For
Georg Brandl0cedb4b2009-12-20 14:20:16 +0000197manipulating strings, use the ``replace()`` and the ``format()`` :ref:`methods
198on string objects <string-methods>`. Use regular expressions only when you're
199not dealing with constant string patterns. You may still use :ref:`the old %
200operations <string-formatting>` ``string % tuple`` and ``string % dictionary``.
Georg Brandl6728c5a2009-10-11 18:31:23 +0000201
Georg Brandl6f82cd32010-02-06 18:44:44 +0000202Be sure to use the :meth:`list.sort` built-in method to do sorting, and see the
Georg Brandl06f3b3b2014-10-29 08:36:35 +0100203`sorting mini-HOWTO <https://wiki.python.org/moin/HowTo/Sorting>`_ for examples
Georg Brandl6728c5a2009-10-11 18:31:23 +0000204of moderately advanced usage. :meth:`list.sort` beats other techniques for
205sorting in all but the most extreme circumstances.
206
207Another common trick is to "push loops into functions or methods." For example
208suppose you have a program that runs slowly and you use the profiler to
209determine that a Python function ``ff()`` is being called lots of times. If you
Georg Brandl0cedb4b2009-12-20 14:20:16 +0000210notice that ``ff()``::
Georg Brandl6728c5a2009-10-11 18:31:23 +0000211
212 def ff(x):
213 ... # do something with x computing result...
214 return result
215
216tends to be called in loops like::
217
218 list = map(ff, oldlist)
219
220or::
221
222 for x in sequence:
223 value = ff(x)
224 ... # do something with value...
225
226then you can often eliminate function call overhead by rewriting ``ff()`` to::
227
228 def ffseq(seq):
229 resultseq = []
230 for x in seq:
231 ... # do something with x computing result...
232 resultseq.append(result)
233 return resultseq
234
235and rewrite the two examples to ``list = ffseq(oldlist)`` and to::
236
237 for value in ffseq(sequence):
238 ... # do something with value...
239
240Single calls to ``ff(x)`` translate to ``ffseq([x])[0]`` with little penalty.
241Of course this technique is not always appropriate and there are other variants
242which you can figure out.
243
244You can gain some performance by explicitly storing the results of a function or
245method lookup into a local variable. A loop like::
246
247 for key in token:
248 dict[key] = dict.get(key, 0) + 1
249
250resolves ``dict.get`` every iteration. If the method isn't going to change, a
251slightly faster implementation is::
252
253 dict_get = dict.get # look up the method once
254 for key in token:
255 dict[key] = dict_get(key, 0) + 1
256
257Default arguments can be used to determine values once, at compile time instead
258of at run time. This can only be done for functions or objects which will not
259be changed during program execution, such as replacing ::
260
261 def degree_sin(deg):
262 return math.sin(deg * math.pi / 180.0)
263
264with ::
265
266 def degree_sin(deg, factor=math.pi/180.0, sin=math.sin):
267 return sin(deg * factor)
268
269Because this trick uses default arguments for terms which should not be changed,
270it should only be used when you are not concerned with presenting a possibly
271confusing API to your users.
272
273
274Core Language
275=============
276
R. David Murray89064382009-11-10 18:58:02 +0000277Why am I getting an UnboundLocalError when the variable has a value?
278--------------------------------------------------------------------
Georg Brandl6728c5a2009-10-11 18:31:23 +0000279
R. David Murray89064382009-11-10 18:58:02 +0000280It can be a surprise to get the UnboundLocalError in previously working
281code when it is modified by adding an assignment statement somewhere in
282the body of a function.
Georg Brandl6728c5a2009-10-11 18:31:23 +0000283
R. David Murray89064382009-11-10 18:58:02 +0000284This code:
Georg Brandl6728c5a2009-10-11 18:31:23 +0000285
R. David Murray89064382009-11-10 18:58:02 +0000286 >>> x = 10
287 >>> def bar():
288 ... print x
289 >>> bar()
290 10
Georg Brandl6728c5a2009-10-11 18:31:23 +0000291
R. David Murray89064382009-11-10 18:58:02 +0000292works, but this code:
Georg Brandl6728c5a2009-10-11 18:31:23 +0000293
R. David Murray89064382009-11-10 18:58:02 +0000294 >>> x = 10
295 >>> def foo():
296 ... print x
297 ... x += 1
Georg Brandl6728c5a2009-10-11 18:31:23 +0000298
R. David Murray89064382009-11-10 18:58:02 +0000299results in an UnboundLocalError:
Georg Brandl6728c5a2009-10-11 18:31:23 +0000300
R. David Murray89064382009-11-10 18:58:02 +0000301 >>> foo()
302 Traceback (most recent call last):
303 ...
304 UnboundLocalError: local variable 'x' referenced before assignment
305
306This is because when you make an assignment to a variable in a scope, that
307variable becomes local to that scope and shadows any similarly named variable
308in the outer scope. Since the last statement in foo assigns a new value to
309``x``, the compiler recognizes it as a local variable. Consequently when the
310earlier ``print x`` attempts to print the uninitialized local variable and
311an error results.
312
313In the example above you can access the outer scope variable by declaring it
314global:
315
316 >>> x = 10
317 >>> def foobar():
318 ... global x
319 ... print x
320 ... x += 1
321 >>> foobar()
322 10
323
324This explicit declaration is required in order to remind you that (unlike the
325superficially analogous situation with class and instance variables) you are
326actually modifying the value of the variable in the outer scope:
327
328 >>> print x
329 11
330
Georg Brandl6728c5a2009-10-11 18:31:23 +0000331
332What are the rules for local and global variables in Python?
333------------------------------------------------------------
334
335In Python, variables that are only referenced inside a function are implicitly
Robert Collinsf5247992015-07-30 06:14:32 +1200336global. If a variable is assigned a value anywhere within the function's body,
337it's assumed to be a local unless explicitly declared as global.
Georg Brandl6728c5a2009-10-11 18:31:23 +0000338
339Though a bit surprising at first, a moment's consideration explains this. On
340one hand, requiring :keyword:`global` for assigned variables provides a bar
341against unintended side-effects. On the other hand, if ``global`` was required
342for all global references, you'd be using ``global`` all the time. You'd have
Georg Brandl6f82cd32010-02-06 18:44:44 +0000343to declare as global every reference to a built-in function or to a component of
Georg Brandl6728c5a2009-10-11 18:31:23 +0000344an imported module. This clutter would defeat the usefulness of the ``global``
345declaration for identifying side-effects.
346
347
Ezio Melotti58abc5b2013-01-05 00:49:48 +0200348Why do lambdas defined in a loop with different values all return the same result?
349----------------------------------------------------------------------------------
350
351Assume you use a for loop to define a few different lambdas (or even plain
352functions), e.g.::
353
R David Murrayff229842013-06-19 17:00:43 -0400354 >>> squares = []
355 >>> for x in range(5):
Serhiy Storchaka12d547a2016-05-10 13:45:32 +0300356 ... squares.append(lambda: x**2)
Ezio Melotti58abc5b2013-01-05 00:49:48 +0200357
358This gives you a list that contains 5 lambdas that calculate ``x**2``. You
359might expect that, when called, they would return, respectively, ``0``, ``1``,
360``4``, ``9``, and ``16``. However, when you actually try you will see that
361they all return ``16``::
362
363 >>> squares[2]()
364 16
365 >>> squares[4]()
366 16
367
368This happens because ``x`` is not local to the lambdas, but is defined in
369the outer scope, and it is accessed when the lambda is called --- not when it
370is defined. At the end of the loop, the value of ``x`` is ``4``, so all the
371functions now return ``4**2``, i.e. ``16``. You can also verify this by
372changing the value of ``x`` and see how the results of the lambdas change::
373
374 >>> x = 8
375 >>> squares[2]()
376 64
377
378In order to avoid this, you need to save the values in variables local to the
379lambdas, so that they don't rely on the value of the global ``x``::
380
R David Murrayff229842013-06-19 17:00:43 -0400381 >>> squares = []
382 >>> for x in range(5):
Serhiy Storchaka12d547a2016-05-10 13:45:32 +0300383 ... squares.append(lambda n=x: n**2)
Ezio Melotti58abc5b2013-01-05 00:49:48 +0200384
385Here, ``n=x`` creates a new variable ``n`` local to the lambda and computed
386when the lambda is defined so that it has the same value that ``x`` had at
387that point in the loop. This means that the value of ``n`` will be ``0``
388in the first lambda, ``1`` in the second, ``2`` in the third, and so on.
389Therefore each lambda will now return the correct result::
390
391 >>> squares[2]()
392 4
393 >>> squares[4]()
394 16
395
396Note that this behaviour is not peculiar to lambdas, but applies to regular
397functions too.
398
399
Georg Brandl6728c5a2009-10-11 18:31:23 +0000400How do I share global variables across modules?
401------------------------------------------------
402
403The canonical way to share information across modules within a single program is
404to create a special module (often called config or cfg). Just import the config
405module in all modules of your application; the module then becomes available as
406a global name. Because there is only one instance of each module, any changes
407made to the module object get reflected everywhere. For example:
408
409config.py::
410
411 x = 0 # Default value of the 'x' configuration setting
412
413mod.py::
414
415 import config
416 config.x = 1
417
418main.py::
419
420 import config
421 import mod
422 print config.x
423
424Note that using a module is also the basis for implementing the Singleton design
425pattern, for the same reason.
426
427
428What are the "best practices" for using import in a module?
429-----------------------------------------------------------
430
431In general, don't use ``from modulename import *``. Doing so clutters the
Georg Brandl8b14dd32014-10-06 16:21:08 +0200432importer's namespace, and makes it much harder for linters to detect undefined
433names.
Georg Brandl6728c5a2009-10-11 18:31:23 +0000434
435Import modules at the top of a file. Doing so makes it clear what other modules
436your code requires and avoids questions of whether the module name is in scope.
437Using one import per line makes it easy to add and delete module imports, but
438using multiple imports per line uses less screen space.
439
440It's good practice if you import modules in the following order:
441
Georg Brandl0cedb4b2009-12-20 14:20:16 +00004421. standard library modules -- e.g. ``sys``, ``os``, ``getopt``, ``re``
Georg Brandl6728c5a2009-10-11 18:31:23 +00004432. third-party library modules (anything installed in Python's site-packages
444 directory) -- e.g. mx.DateTime, ZODB, PIL.Image, etc.
4453. locally-developed modules
446
Georg Brandl8b14dd32014-10-06 16:21:08 +0200447Only use explicit relative package imports. If you're writing code that's in
448the ``package.sub.m1`` module and want to import ``package.sub.m2``, do not just
Georg Brandl6728c5a2009-10-11 18:31:23 +0000449write ``import m2``, even though it's legal. Write ``from package.sub import
Georg Brandl8b14dd32014-10-06 16:21:08 +0200450m2`` or ``from . import m2`` instead.
Georg Brandl6728c5a2009-10-11 18:31:23 +0000451
452It is sometimes necessary to move imports to a function or class to avoid
453problems with circular imports. Gordon McMillan says:
454
455 Circular imports are fine where both modules use the "import <module>" form
456 of import. They fail when the 2nd module wants to grab a name out of the
457 first ("from module import name") and the import is at the top level. That's
458 because names in the 1st are not yet available, because the first module is
459 busy importing the 2nd.
460
461In this case, if the second module is only used in one function, then the import
462can easily be moved into that function. By the time the import is called, the
463first module will have finished initializing, and the second module can do its
464import.
465
466It may also be necessary to move imports out of the top level of code if some of
467the modules are platform-specific. In that case, it may not even be possible to
468import all of the modules at the top of the file. In this case, importing the
469correct modules in the corresponding platform-specific code is a good option.
470
471Only move imports into a local scope, such as inside a function definition, if
472it's necessary to solve a problem such as avoiding a circular import or are
473trying to reduce the initialization time of a module. This technique is
474especially helpful if many of the imports are unnecessary depending on how the
475program executes. You may also want to move imports into a function if the
476modules are only ever used in that function. Note that loading a module the
477first time may be expensive because of the one time initialization of the
478module, but loading a module multiple times is virtually free, costing only a
479couple of dictionary lookups. Even if the module name has gone out of scope,
480the module is probably available in :data:`sys.modules`.
481
Georg Brandl6728c5a2009-10-11 18:31:23 +0000482
Ezio Melotti4f7e09a2014-07-06 20:53:27 +0300483Why are default values shared between objects?
484----------------------------------------------
485
486This type of bug commonly bites neophyte programmers. Consider this function::
487
488 def foo(mydict={}): # Danger: shared reference to one dict for all calls
489 ... compute something ...
490 mydict[key] = value
491 return mydict
492
493The first time you call this function, ``mydict`` contains a single item. The
494second time, ``mydict`` contains two items because when ``foo()`` begins
495executing, ``mydict`` starts out with an item already in it.
496
497It is often expected that a function call creates new objects for default
498values. This is not what happens. Default values are created exactly once, when
499the function is defined. If that object is changed, like the dictionary in this
500example, subsequent calls to the function will refer to this changed object.
501
502By definition, immutable objects such as numbers, strings, tuples, and ``None``,
503are safe from change. Changes to mutable objects such as dictionaries, lists,
504and class instances can lead to confusion.
505
506Because of this feature, it is good programming practice to not use mutable
507objects as default values. Instead, use ``None`` as the default value and
508inside the function, check if the parameter is ``None`` and create a new
509list/dictionary/whatever if it is. For example, don't write::
510
511 def foo(mydict={}):
512 ...
513
514but::
515
516 def foo(mydict=None):
517 if mydict is None:
518 mydict = {} # create a new dict for local namespace
519
520This feature can be useful. When you have a function that's time-consuming to
521compute, a common technique is to cache the parameters and the resulting value
522of each call to the function, and return the cached value if the same value is
523requested again. This is called "memoizing", and can be implemented like this::
524
525 # Callers will never provide a third parameter for this function.
526 def expensive(arg1, arg2, _cache={}):
527 if (arg1, arg2) in _cache:
528 return _cache[(arg1, arg2)]
529
530 # Calculate the value
531 result = ... expensive computation ...
R David Murray276a0a52014-09-29 10:23:43 -0400532 _cache[(arg1, arg2)] = result # Store result in the cache
Ezio Melotti4f7e09a2014-07-06 20:53:27 +0300533 return result
534
535You could use a global variable containing a dictionary instead of the default
536value; it's a matter of taste.
537
538
Georg Brandl6728c5a2009-10-11 18:31:23 +0000539How can I pass optional or keyword parameters from one function to another?
540---------------------------------------------------------------------------
541
542Collect the arguments using the ``*`` and ``**`` specifiers in the function's
543parameter list; this gives you the positional arguments as a tuple and the
544keyword arguments as a dictionary. You can then pass these arguments when
545calling another function by using ``*`` and ``**``::
546
547 def f(x, *args, **kwargs):
548 ...
549 kwargs['width'] = '14.3c'
550 ...
551 g(x, *args, **kwargs)
552
553In the unlikely case that you care about Python versions older than 2.0, use
554:func:`apply`::
555
556 def f(x, *args, **kwargs):
557 ...
558 kwargs['width'] = '14.3c'
559 ...
560 apply(g, (x,)+args, kwargs)
561
562
Chris Jerdonekcf4710c2012-12-25 14:50:21 -0800563.. index::
564 single: argument; difference from parameter
565 single: parameter; difference from argument
566
Chris Jerdonek8da82682012-11-29 19:03:37 -0800567.. _faq-argument-vs-parameter:
568
569What is the difference between arguments and parameters?
570--------------------------------------------------------
571
572:term:`Parameters <parameter>` are defined by the names that appear in a
573function definition, whereas :term:`arguments <argument>` are the values
574actually passed to a function when calling it. Parameters define what types of
575arguments a function can accept. For example, given the function definition::
576
577 def func(foo, bar=None, **kwargs):
578 pass
579
580*foo*, *bar* and *kwargs* are parameters of ``func``. However, when calling
581``func``, for example::
582
583 func(42, bar=314, extra=somevar)
584
585the values ``42``, ``314``, and ``somevar`` are arguments.
586
587
R David Murray276a0a52014-09-29 10:23:43 -0400588Why did changing list 'y' also change list 'x'?
589------------------------------------------------
590
591If you wrote code like::
592
593 >>> x = []
594 >>> y = x
595 >>> y.append(10)
596 >>> y
597 [10]
598 >>> x
599 [10]
600
601you might be wondering why appending an element to ``y`` changed ``x`` too.
602
603There are two factors that produce this result:
604
6051) Variables are simply names that refer to objects. Doing ``y = x`` doesn't
606 create a copy of the list -- it creates a new variable ``y`` that refers to
607 the same object ``x`` refers to. This means that there is only one object
608 (the list), and both ``x`` and ``y`` refer to it.
6092) Lists are :term:`mutable`, which means that you can change their content.
610
611After the call to :meth:`~list.append`, the content of the mutable object has
612changed from ``[]`` to ``[10]``. Since both the variables refer to the same
613object, using either name accesses the modified value ``[10]``.
614
615If we instead assign an immutable object to ``x``::
616
617 >>> x = 5 # ints are immutable
618 >>> y = x
619 >>> x = x + 1 # 5 can't be mutated, we are creating a new object here
620 >>> x
621 6
622 >>> y
623 5
624
625we can see that in this case ``x`` and ``y`` are not equal anymore. This is
626because integers are :term:`immutable`, and when we do ``x = x + 1`` we are not
627mutating the int ``5`` by incrementing its value; instead, we are creating a
628new object (the int ``6``) and assigning it to ``x`` (that is, changing which
629object ``x`` refers to). After this assignment we have two objects (the ints
630``6`` and ``5``) and two variables that refer to them (``x`` now refers to
631``6`` but ``y`` still refers to ``5``).
632
633Some operations (for example ``y.append(10)`` and ``y.sort()``) mutate the
634object, whereas superficially similar operations (for example ``y = y + [10]``
635and ``sorted(y)``) create a new object. In general in Python (and in all cases
636in the standard library) a method that mutates an object will return ``None``
637to help avoid getting the two types of operations confused. So if you
638mistakenly write ``y.sort()`` thinking it will give you a sorted copy of ``y``,
639you'll instead end up with ``None``, which will likely cause your program to
640generate an easily diagnosed error.
641
642However, there is one class of operations where the same operation sometimes
643has different behaviors with different types: the augmented assignment
644operators. For example, ``+=`` mutates lists but not tuples or ints (``a_list
645+= [1, 2, 3]`` is equivalent to ``a_list.extend([1, 2, 3])`` and mutates
646``a_list``, whereas ``some_tuple += (1, 2, 3)`` and ``some_int += 1`` create
647new objects).
648
649In other words:
650
651* If we have a mutable object (:class:`list`, :class:`dict`, :class:`set`,
652 etc.), we can use some specific operations to mutate it and all the variables
653 that refer to it will see the change.
654* If we have an immutable object (:class:`str`, :class:`int`, :class:`tuple`,
655 etc.), all the variables that refer to it will always see the same value,
656 but operations that transform that value into a new value always return a new
657 object.
658
659If you want to know if two variables refer to the same object or not, you can
660use the :keyword:`is` operator, or the built-in function :func:`id`.
661
662
Georg Brandl6728c5a2009-10-11 18:31:23 +0000663How do I write a function with output parameters (call by reference)?
664---------------------------------------------------------------------
665
666Remember that arguments are passed by assignment in Python. Since assignment
667just creates references to objects, there's no alias between an argument name in
668the caller and callee, and so no call-by-reference per se. You can achieve the
669desired effect in a number of ways.
670
6711) By returning a tuple of the results::
672
673 def func2(a, b):
674 a = 'new-value' # a and b are local names
675 b = b + 1 # assigned to new objects
676 return a, b # return new values
677
678 x, y = 'old-value', 99
679 x, y = func2(x, y)
680 print x, y # output: new-value 100
681
682 This is almost always the clearest solution.
683
6842) By using global variables. This isn't thread-safe, and is not recommended.
685
6863) By passing a mutable (changeable in-place) object::
687
688 def func1(a):
689 a[0] = 'new-value' # 'a' references a mutable list
690 a[1] = a[1] + 1 # changes a shared object
691
692 args = ['old-value', 99]
693 func1(args)
694 print args[0], args[1] # output: new-value 100
695
6964) By passing in a dictionary that gets mutated::
697
698 def func3(args):
699 args['a'] = 'new-value' # args is a mutable dictionary
700 args['b'] = args['b'] + 1 # change it in-place
701
Serhiy Storchaka12d547a2016-05-10 13:45:32 +0300702 args = {'a': 'old-value', 'b': 99}
Georg Brandl6728c5a2009-10-11 18:31:23 +0000703 func3(args)
704 print args['a'], args['b']
705
7065) Or bundle up values in a class instance::
707
708 class callByRef:
709 def __init__(self, **args):
710 for (key, value) in args.items():
711 setattr(self, key, value)
712
713 def func4(args):
714 args.a = 'new-value' # args is a mutable callByRef
715 args.b = args.b + 1 # change object in-place
716
717 args = callByRef(a='old-value', b=99)
718 func4(args)
719 print args.a, args.b
720
721
722 There's almost never a good reason to get this complicated.
723
724Your best choice is to return a tuple containing the multiple results.
725
726
727How do you make a higher order function in Python?
728--------------------------------------------------
729
730You have two choices: you can use nested scopes or you can use callable objects.
731For example, suppose you wanted to define ``linear(a,b)`` which returns a
732function ``f(x)`` that computes the value ``a*x+b``. Using nested scopes::
733
734 def linear(a, b):
735 def result(x):
736 return a * x + b
737 return result
738
739Or using a callable object::
740
741 class linear:
742
743 def __init__(self, a, b):
744 self.a, self.b = a, b
745
746 def __call__(self, x):
747 return self.a * x + self.b
748
749In both cases, ::
750
751 taxes = linear(0.3, 2)
752
753gives a callable object where ``taxes(10e6) == 0.3 * 10e6 + 2``.
754
755The callable object approach has the disadvantage that it is a bit slower and
756results in slightly longer code. However, note that a collection of callables
757can share their signature via inheritance::
758
759 class exponential(linear):
760 # __init__ inherited
761 def __call__(self, x):
762 return self.a * (x ** self.b)
763
764Object can encapsulate state for several methods::
765
766 class counter:
767
768 value = 0
769
770 def set(self, x):
771 self.value = x
772
773 def up(self):
774 self.value = self.value + 1
775
776 def down(self):
777 self.value = self.value - 1
778
779 count = counter()
780 inc, dec, reset = count.up, count.down, count.set
781
782Here ``inc()``, ``dec()`` and ``reset()`` act like functions which share the
783same counting variable.
784
785
786How do I copy an object in Python?
787----------------------------------
788
789In general, try :func:`copy.copy` or :func:`copy.deepcopy` for the general case.
790Not all objects can be copied, but most can.
791
792Some objects can be copied more easily. Dictionaries have a :meth:`~dict.copy`
793method::
794
795 newdict = olddict.copy()
796
797Sequences can be copied by slicing::
798
799 new_l = l[:]
800
801
802How can I find the methods or attributes of an object?
803------------------------------------------------------
804
805For an instance x of a user-defined class, ``dir(x)`` returns an alphabetized
806list of the names containing the instance attributes and methods and attributes
807defined by its class.
808
809
810How can my code discover the name of an object?
811-----------------------------------------------
812
813Generally speaking, it can't, because objects don't really have names.
814Essentially, assignment always binds a name to a value; The same is true of
815``def`` and ``class`` statements, but in that case the value is a
816callable. Consider the following code::
817
Serhiy Storchaka12d547a2016-05-10 13:45:32 +0300818 >>> class A:
819 ... pass
820 ...
821 >>> B = A
822 >>> a = B()
823 >>> b = a
824 >>> print b
Georg Brandl0cedb4b2009-12-20 14:20:16 +0000825 <__main__.A instance at 0x16D07CC>
Serhiy Storchaka12d547a2016-05-10 13:45:32 +0300826 >>> print a
Georg Brandl0cedb4b2009-12-20 14:20:16 +0000827 <__main__.A instance at 0x16D07CC>
Georg Brandl6728c5a2009-10-11 18:31:23 +0000828
829Arguably the class has a name: even though it is bound to two names and invoked
830through the name B the created instance is still reported as an instance of
831class A. However, it is impossible to say whether the instance's name is a or
832b, since both names are bound to the same value.
833
834Generally speaking it should not be necessary for your code to "know the names"
835of particular values. Unless you are deliberately writing introspective
836programs, this is usually an indication that a change of approach might be
837beneficial.
838
839In comp.lang.python, Fredrik Lundh once gave an excellent analogy in answer to
840this question:
841
842 The same way as you get the name of that cat you found on your porch: the cat
843 (object) itself cannot tell you its name, and it doesn't really care -- so
844 the only way to find out what it's called is to ask all your neighbours
845 (namespaces) if it's their cat (object)...
846
847 ....and don't be surprised if you'll find that it's known by many names, or
848 no name at all!
849
850
851What's up with the comma operator's precedence?
852-----------------------------------------------
853
854Comma is not an operator in Python. Consider this session::
855
856 >>> "a" in "b", "a"
Georg Brandl0cedb4b2009-12-20 14:20:16 +0000857 (False, 'a')
Georg Brandl6728c5a2009-10-11 18:31:23 +0000858
859Since the comma is not an operator, but a separator between expressions the
860above is evaluated as if you had entered::
861
R David Murrayff229842013-06-19 17:00:43 -0400862 ("a" in "b"), "a"
Georg Brandl6728c5a2009-10-11 18:31:23 +0000863
864not::
865
R David Murrayff229842013-06-19 17:00:43 -0400866 "a" in ("b", "a")
Georg Brandl6728c5a2009-10-11 18:31:23 +0000867
868The same is true of the various assignment operators (``=``, ``+=`` etc). They
869are not truly operators but syntactic delimiters in assignment statements.
870
871
872Is there an equivalent of C's "?:" ternary operator?
873----------------------------------------------------
874
875Yes, this feature was added in Python 2.5. The syntax would be as follows::
876
877 [on_true] if [expression] else [on_false]
878
879 x, y = 50, 25
880
881 small = x if x < y else y
882
883For versions previous to 2.5 the answer would be 'No'.
884
Georg Brandl6728c5a2009-10-11 18:31:23 +0000885
886Is it possible to write obfuscated one-liners in Python?
887--------------------------------------------------------
888
889Yes. Usually this is done by nesting :keyword:`lambda` within
890:keyword:`lambda`. See the following three examples, due to Ulf Bartelt::
891
892 # Primes < 1000
893 print filter(None,map(lambda y:y*reduce(lambda x,y:x*y!=0,
894 map(lambda x,y=y:y%x,range(2,int(pow(y,0.5)+1))),1),range(2,1000)))
895
896 # First 10 Fibonacci numbers
Georg Brandl0cedb4b2009-12-20 14:20:16 +0000897 print map(lambda x,f=lambda x,f:(f(x-1,f)+f(x-2,f)) if x>1 else 1: f(x,f),
Georg Brandl6728c5a2009-10-11 18:31:23 +0000898 range(10))
899
900 # Mandelbrot set
901 print (lambda Ru,Ro,Iu,Io,IM,Sx,Sy:reduce(lambda x,y:x+y,map(lambda y,
902 Iu=Iu,Io=Io,Ru=Ru,Ro=Ro,Sy=Sy,L=lambda yc,Iu=Iu,Io=Io,Ru=Ru,Ro=Ro,i=IM,
903 Sx=Sx,Sy=Sy:reduce(lambda x,y:x+y,map(lambda x,xc=Ru,yc=yc,Ru=Ru,Ro=Ro,
904 i=i,Sx=Sx,F=lambda xc,yc,x,y,k,f=lambda xc,yc,x,y,k,f:(k<=0)or (x*x+y*y
905 >=4.0) or 1+f(xc,yc,x*x-y*y+xc,2.0*x*y+yc,k-1,f):f(xc,yc,x,y,k,f):chr(
906 64+F(Ru+x*(Ro-Ru)/Sx,yc,0,0,i)),range(Sx))):L(Iu+y*(Io-Iu)/Sy),range(Sy
907 ))))(-2.1, 0.7, -1.2, 1.2, 30, 80, 24)
908 # \___ ___/ \___ ___/ | | |__ lines on screen
909 # V V | |______ columns on screen
910 # | | |__________ maximum of "iterations"
911 # | |_________________ range on y axis
912 # |____________________________ range on x axis
913
914Don't try this at home, kids!
915
916
917Numbers and strings
918===================
919
920How do I specify hexadecimal and octal integers?
921------------------------------------------------
922
Georg Brandl0cedb4b2009-12-20 14:20:16 +0000923To specify an octal digit, precede the octal value with a zero, and then a lower
924or uppercase "o". For example, to set the variable "a" to the octal value "10"
925(8 in decimal), type::
Georg Brandl6728c5a2009-10-11 18:31:23 +0000926
Georg Brandl0cedb4b2009-12-20 14:20:16 +0000927 >>> a = 0o10
Georg Brandl6728c5a2009-10-11 18:31:23 +0000928 >>> a
929 8
930
931Hexadecimal is just as easy. Simply precede the hexadecimal number with a zero,
932and then a lower or uppercase "x". Hexadecimal digits can be specified in lower
933or uppercase. For example, in the Python interpreter::
934
935 >>> a = 0xa5
936 >>> a
937 165
938 >>> b = 0XB2
939 >>> b
940 178
941
942
Georg Brandl0cedb4b2009-12-20 14:20:16 +0000943Why does -22 // 10 return -3?
944-----------------------------
Georg Brandl6728c5a2009-10-11 18:31:23 +0000945
946It's primarily driven by the desire that ``i % j`` have the same sign as ``j``.
947If you want that, and also want::
948
Georg Brandl0cedb4b2009-12-20 14:20:16 +0000949 i == (i // j) * j + (i % j)
Georg Brandl6728c5a2009-10-11 18:31:23 +0000950
951then integer division has to return the floor. C also requires that identity to
Georg Brandl0cedb4b2009-12-20 14:20:16 +0000952hold, and then compilers that truncate ``i // j`` need to make ``i % j`` have
953the same sign as ``i``.
Georg Brandl6728c5a2009-10-11 18:31:23 +0000954
955There are few real use cases for ``i % j`` when ``j`` is negative. When ``j``
956is positive, there are many, and in virtually all of them it's more useful for
957``i % j`` to be ``>= 0``. If the clock says 10 now, what did it say 200 hours
958ago? ``-190 % 12 == 2`` is useful; ``-190 % 12 == -10`` is a bug waiting to
959bite.
960
Georg Brandl0cedb4b2009-12-20 14:20:16 +0000961.. note::
962
963 On Python 2, ``a / b`` returns the same as ``a // b`` if
964 ``__future__.division`` is not in effect. This is also known as "classic"
965 division.
966
Georg Brandl6728c5a2009-10-11 18:31:23 +0000967
968How do I convert a string to a number?
969--------------------------------------
970
971For integers, use the built-in :func:`int` type constructor, e.g. ``int('144')
972== 144``. Similarly, :func:`float` converts to floating-point,
973e.g. ``float('144') == 144.0``.
974
975By default, these interpret the number as decimal, so that ``int('0144') ==
976144`` and ``int('0x144')`` raises :exc:`ValueError`. ``int(string, base)`` takes
977the base to convert from as a second optional argument, so ``int('0x144', 16) ==
978324``. If the base is specified as 0, the number is interpreted using Python's
979rules: a leading '0' indicates octal, and '0x' indicates a hex number.
980
981Do not use the built-in function :func:`eval` if all you need is to convert
982strings to numbers. :func:`eval` will be significantly slower and it presents a
983security risk: someone could pass you a Python expression that might have
984unwanted side effects. For example, someone could pass
985``__import__('os').system("rm -rf $HOME")`` which would erase your home
986directory.
987
988:func:`eval` also has the effect of interpreting numbers as Python expressions,
989so that e.g. ``eval('09')`` gives a syntax error because Python regards numbers
990starting with '0' as octal (base 8).
991
992
993How do I convert a number to a string?
994--------------------------------------
995
996To convert, e.g., the number 144 to the string '144', use the built-in type
997constructor :func:`str`. If you want a hexadecimal or octal representation, use
Georg Brandl0cedb4b2009-12-20 14:20:16 +0000998the built-in functions :func:`hex` or :func:`oct`. For fancy formatting, see
999the :ref:`formatstrings` section, e.g. ``"{:04d}".format(144)`` yields
1000``'0144'`` and ``"{:.3f}".format(1/3)`` yields ``'0.333'``. You may also use
1001:ref:`the % operator <string-formatting>` on strings. See the library reference
1002manual for details.
Georg Brandl6728c5a2009-10-11 18:31:23 +00001003
1004
1005How do I modify a string in place?
1006----------------------------------
1007
1008You can't, because strings are immutable. If you need an object with this
1009ability, try converting the string to a list or use the array module::
1010
R David Murrayff229842013-06-19 17:00:43 -04001011 >>> import io
Georg Brandl6728c5a2009-10-11 18:31:23 +00001012 >>> s = "Hello, world"
1013 >>> a = list(s)
1014 >>> print a
1015 ['H', 'e', 'l', 'l', 'o', ',', ' ', 'w', 'o', 'r', 'l', 'd']
1016 >>> a[7:] = list("there!")
1017 >>> ''.join(a)
1018 'Hello, there!'
1019
1020 >>> import array
1021 >>> a = array.array('c', s)
1022 >>> print a
1023 array('c', 'Hello, world')
Serhiy Storchakab7128732013-12-24 11:04:06 +02001024 >>> a[0] = 'y'; print a
R David Murrayff229842013-06-19 17:00:43 -04001025 array('c', 'yello, world')
Georg Brandl6728c5a2009-10-11 18:31:23 +00001026 >>> a.tostring()
1027 'yello, world'
1028
1029
1030How do I use strings to call functions/methods?
1031-----------------------------------------------
1032
1033There are various techniques.
1034
1035* The best is to use a dictionary that maps strings to functions. The primary
1036 advantage of this technique is that the strings do not need to match the names
1037 of the functions. This is also the primary technique used to emulate a case
1038 construct::
1039
1040 def a():
1041 pass
1042
1043 def b():
1044 pass
1045
1046 dispatch = {'go': a, 'stop': b} # Note lack of parens for funcs
1047
1048 dispatch[get_input()]() # Note trailing parens to call function
1049
1050* Use the built-in function :func:`getattr`::
1051
1052 import foo
1053 getattr(foo, 'bar')()
1054
1055 Note that :func:`getattr` works on any object, including classes, class
1056 instances, modules, and so on.
1057
1058 This is used in several places in the standard library, like this::
1059
1060 class Foo:
1061 def do_foo(self):
1062 ...
1063
1064 def do_bar(self):
1065 ...
1066
1067 f = getattr(foo_instance, 'do_' + opname)
1068 f()
1069
1070
1071* Use :func:`locals` or :func:`eval` to resolve the function name::
1072
1073 def myFunc():
1074 print "hello"
1075
1076 fname = "myFunc"
1077
1078 f = locals()[fname]
1079 f()
1080
1081 f = eval(fname)
1082 f()
1083
1084 Note: Using :func:`eval` is slow and dangerous. If you don't have absolute
1085 control over the contents of the string, someone could pass a string that
1086 resulted in an arbitrary function being executed.
1087
1088Is there an equivalent to Perl's chomp() for removing trailing newlines from strings?
1089-------------------------------------------------------------------------------------
1090
1091Starting with Python 2.2, you can use ``S.rstrip("\r\n")`` to remove all
Georg Brandl09302282010-10-06 09:32:48 +00001092occurrences of any line terminator from the end of the string ``S`` without
Georg Brandl6728c5a2009-10-11 18:31:23 +00001093removing other trailing whitespace. If the string ``S`` represents more than
1094one line, with several empty lines at the end, the line terminators for all the
1095blank lines will be removed::
1096
1097 >>> lines = ("line 1 \r\n"
1098 ... "\r\n"
1099 ... "\r\n")
1100 >>> lines.rstrip("\n\r")
Georg Brandl0cedb4b2009-12-20 14:20:16 +00001101 'line 1 '
Georg Brandl6728c5a2009-10-11 18:31:23 +00001102
1103Since this is typically only desired when reading text one line at a time, using
1104``S.rstrip()`` this way works well.
1105
Georg Brandl0cedb4b2009-12-20 14:20:16 +00001106For older versions of Python, there are two partial substitutes:
Georg Brandl6728c5a2009-10-11 18:31:23 +00001107
1108- If you want to remove all trailing whitespace, use the ``rstrip()`` method of
1109 string objects. This removes all trailing whitespace, not just a single
1110 newline.
1111
1112- Otherwise, if there is only one line in the string ``S``, use
1113 ``S.splitlines()[0]``.
1114
1115
1116Is there a scanf() or sscanf() equivalent?
1117------------------------------------------
1118
1119Not as such.
1120
1121For simple input parsing, the easiest approach is usually to split the line into
1122whitespace-delimited words using the :meth:`~str.split` method of string objects
1123and then convert decimal strings to numeric values using :func:`int` or
1124:func:`float`. ``split()`` supports an optional "sep" parameter which is useful
1125if the line uses something other than whitespace as a separator.
1126
Brian Curtine49aefc2010-09-23 13:48:06 +00001127For more complicated input parsing, regular expressions are more powerful
Sandro Tosi98ed08f2012-01-14 16:42:02 +01001128than C's :c:func:`sscanf` and better suited for the task.
Georg Brandl6728c5a2009-10-11 18:31:23 +00001129
1130
1131What does 'UnicodeError: ASCII [decoding,encoding] error: ordinal not in range(128)' mean?
1132------------------------------------------------------------------------------------------
1133
1134This error indicates that your Python installation can handle only 7-bit ASCII
1135strings. There are a couple ways to fix or work around the problem.
1136
1137If your programs must handle data in arbitrary character set encodings, the
1138environment the application runs in will generally identify the encoding of the
1139data it is handing you. You need to convert the input to Unicode data using
1140that encoding. For example, a program that handles email or web input will
1141typically find character set encoding information in Content-Type headers. This
1142can then be used to properly convert input data to Unicode. Assuming the string
1143referred to by ``value`` is encoded as UTF-8::
1144
1145 value = unicode(value, "utf-8")
1146
1147will return a Unicode object. If the data is not correctly encoded as UTF-8,
1148the above call will raise a :exc:`UnicodeError` exception.
1149
1150If you only want strings converted to Unicode which have non-ASCII data, you can
1151try converting them first assuming an ASCII encoding, and then generate Unicode
1152objects if that fails::
1153
1154 try:
1155 x = unicode(value, "ascii")
1156 except UnicodeError:
1157 value = unicode(value, "utf-8")
1158 else:
1159 # value was valid ASCII data
1160 pass
1161
1162It's possible to set a default encoding in a file called ``sitecustomize.py``
1163that's part of the Python library. However, this isn't recommended because
1164changing the Python-wide default encoding may cause third-party extension
1165modules to fail.
1166
1167Note that on Windows, there is an encoding known as "mbcs", which uses an
1168encoding specific to your current locale. In many cases, and particularly when
1169working with COM, this may be an appropriate default encoding to use.
1170
1171
1172Sequences (Tuples/Lists)
1173========================
1174
1175How do I convert between tuples and lists?
1176------------------------------------------
1177
1178The type constructor ``tuple(seq)`` converts any sequence (actually, any
1179iterable) into a tuple with the same items in the same order.
1180
1181For example, ``tuple([1, 2, 3])`` yields ``(1, 2, 3)`` and ``tuple('abc')``
1182yields ``('a', 'b', 'c')``. If the argument is a tuple, it does not make a copy
1183but returns the same object, so it is cheap to call :func:`tuple` when you
1184aren't sure that an object is already a tuple.
1185
1186The type constructor ``list(seq)`` converts any sequence or iterable into a list
1187with the same items in the same order. For example, ``list((1, 2, 3))`` yields
1188``[1, 2, 3]`` and ``list('abc')`` yields ``['a', 'b', 'c']``. If the argument
1189is a list, it makes a copy just like ``seq[:]`` would.
1190
1191
1192What's a negative index?
1193------------------------
1194
1195Python sequences are indexed with positive numbers and negative numbers. For
1196positive numbers 0 is the first index 1 is the second index and so forth. For
1197negative indices -1 is the last index and -2 is the penultimate (next to last)
1198index and so forth. Think of ``seq[-n]`` as the same as ``seq[len(seq)-n]``.
1199
1200Using negative indices can be very convenient. For example ``S[:-1]`` is all of
1201the string except for its last character, which is useful for removing the
1202trailing newline from a string.
1203
1204
1205How do I iterate over a sequence in reverse order?
1206--------------------------------------------------
1207
Georg Brandl6f82cd32010-02-06 18:44:44 +00001208Use the :func:`reversed` built-in function, which is new in Python 2.4::
Georg Brandl6728c5a2009-10-11 18:31:23 +00001209
1210 for x in reversed(sequence):
Serhiy Storchaka12d547a2016-05-10 13:45:32 +03001211 ... # do something with x ...
Georg Brandl6728c5a2009-10-11 18:31:23 +00001212
1213This won't touch your original sequence, but build a new copy with reversed
1214order to iterate over.
1215
1216With Python 2.3, you can use an extended slice syntax::
1217
1218 for x in sequence[::-1]:
Serhiy Storchaka12d547a2016-05-10 13:45:32 +03001219 ... # do something with x ...
Georg Brandl6728c5a2009-10-11 18:31:23 +00001220
1221
1222How do you remove duplicates from a list?
1223-----------------------------------------
1224
1225See the Python Cookbook for a long discussion of many ways to do this:
1226
Serhiy Storchakab4905ef2016-05-07 10:50:12 +03001227 https://code.activestate.com/recipes/52560/
Georg Brandl6728c5a2009-10-11 18:31:23 +00001228
1229If you don't mind reordering the list, sort it and then scan from the end of the
1230list, deleting duplicates as you go::
1231
Georg Brandl0cedb4b2009-12-20 14:20:16 +00001232 if mylist:
1233 mylist.sort()
1234 last = mylist[-1]
1235 for i in range(len(mylist)-2, -1, -1):
1236 if last == mylist[i]:
1237 del mylist[i]
Georg Brandl6728c5a2009-10-11 18:31:23 +00001238 else:
Georg Brandl0cedb4b2009-12-20 14:20:16 +00001239 last = mylist[i]
Georg Brandl6728c5a2009-10-11 18:31:23 +00001240
1241If all elements of the list may be used as dictionary keys (i.e. they are all
1242hashable) this is often faster ::
1243
1244 d = {}
Georg Brandl0cedb4b2009-12-20 14:20:16 +00001245 for x in mylist:
1246 d[x] = 1
1247 mylist = list(d.keys())
Georg Brandl6728c5a2009-10-11 18:31:23 +00001248
1249In Python 2.5 and later, the following is possible instead::
1250
Georg Brandl0cedb4b2009-12-20 14:20:16 +00001251 mylist = list(set(mylist))
Georg Brandl6728c5a2009-10-11 18:31:23 +00001252
1253This converts the list into a set, thereby removing duplicates, and then back
1254into a list.
1255
1256
1257How do you make an array in Python?
1258-----------------------------------
1259
1260Use a list::
1261
1262 ["this", 1, "is", "an", "array"]
1263
1264Lists are equivalent to C or Pascal arrays in their time complexity; the primary
1265difference is that a Python list can contain objects of many different types.
1266
1267The ``array`` module also provides methods for creating arrays of fixed types
1268with compact representations, but they are slower to index than lists. Also
1269note that the Numeric extensions and others define array-like structures with
1270various characteristics as well.
1271
1272To get Lisp-style linked lists, you can emulate cons cells using tuples::
1273
1274 lisp_list = ("like", ("this", ("example", None) ) )
1275
1276If mutability is desired, you could use lists instead of tuples. Here the
1277analogue of lisp car is ``lisp_list[0]`` and the analogue of cdr is
1278``lisp_list[1]``. Only do this if you're sure you really need to, because it's
1279usually a lot slower than using Python lists.
1280
1281
Martin Panter0ed1bcd2015-09-07 01:40:33 +00001282.. _faq-multidimensional-list:
1283
Georg Brandl6728c5a2009-10-11 18:31:23 +00001284How do I create a multidimensional list?
1285----------------------------------------
1286
1287You probably tried to make a multidimensional array like this::
1288
R David Murrayff229842013-06-19 17:00:43 -04001289 >>> A = [[None] * 2] * 3
Georg Brandl6728c5a2009-10-11 18:31:23 +00001290
1291This looks correct if you print it::
1292
1293 >>> A
1294 [[None, None], [None, None], [None, None]]
1295
1296But when you assign a value, it shows up in multiple places:
1297
1298 >>> A[0][0] = 5
1299 >>> A
1300 [[5, None], [5, None], [5, None]]
1301
1302The reason is that replicating a list with ``*`` doesn't create copies, it only
1303creates references to the existing objects. The ``*3`` creates a list
1304containing 3 references to the same list of length two. Changes to one row will
1305show in all rows, which is almost certainly not what you want.
1306
1307The suggested approach is to create a list of the desired length first and then
1308fill in each element with a newly created list::
1309
1310 A = [None] * 3
1311 for i in range(3):
1312 A[i] = [None] * 2
1313
1314This generates a list containing 3 different lists of length two. You can also
1315use a list comprehension::
1316
1317 w, h = 2, 3
1318 A = [[None] * w for i in range(h)]
1319
Benjamin Peterson01d25802016-05-26 22:51:32 -07001320Or, you can use an extension that provides a matrix datatype; `NumPy
Ezio Melottic49805e2013-06-09 01:04:21 +03001321<http://www.numpy.org/>`_ is the best known.
Georg Brandl6728c5a2009-10-11 18:31:23 +00001322
1323
1324How do I apply a method to a sequence of objects?
1325-------------------------------------------------
1326
1327Use a list comprehension::
1328
Georg Brandl0cedb4b2009-12-20 14:20:16 +00001329 result = [obj.method() for obj in mylist]
Georg Brandl6728c5a2009-10-11 18:31:23 +00001330
1331More generically, you can try the following function::
1332
1333 def method_map(objects, method, arguments):
1334 """method_map([a,b], "meth", (1,2)) gives [a.meth(1,2), b.meth(1,2)]"""
1335 nobjects = len(objects)
1336 methods = map(getattr, objects, [method]*nobjects)
1337 return map(apply, methods, [arguments]*nobjects)
1338
1339
R David Murrayed983ab2013-05-20 10:34:58 -04001340Why does a_tuple[i] += ['item'] raise an exception when the addition works?
1341---------------------------------------------------------------------------
1342
1343This is because of a combination of the fact that augmented assignment
1344operators are *assignment* operators, and the difference between mutable and
1345immutable objects in Python.
1346
1347This discussion applies in general when augmented assignment operators are
1348applied to elements of a tuple that point to mutable objects, but we'll use
1349a ``list`` and ``+=`` as our exemplar.
1350
1351If you wrote::
1352
1353 >>> a_tuple = (1, 2)
1354 >>> a_tuple[0] += 1
1355 Traceback (most recent call last):
1356 ...
1357 TypeError: 'tuple' object does not support item assignment
1358
1359The reason for the exception should be immediately clear: ``1`` is added to the
1360object ``a_tuple[0]`` points to (``1``), producing the result object, ``2``,
1361but when we attempt to assign the result of the computation, ``2``, to element
1362``0`` of the tuple, we get an error because we can't change what an element of
1363a tuple points to.
1364
1365Under the covers, what this augmented assignment statement is doing is
1366approximately this::
1367
R David Murraye6f2e6c2013-05-21 11:46:18 -04001368 >>> result = a_tuple[0] + 1
R David Murrayed983ab2013-05-20 10:34:58 -04001369 >>> a_tuple[0] = result
1370 Traceback (most recent call last):
1371 ...
1372 TypeError: 'tuple' object does not support item assignment
1373
1374It is the assignment part of the operation that produces the error, since a
1375tuple is immutable.
1376
1377When you write something like::
1378
1379 >>> a_tuple = (['foo'], 'bar')
1380 >>> a_tuple[0] += ['item']
1381 Traceback (most recent call last):
1382 ...
1383 TypeError: 'tuple' object does not support item assignment
1384
1385The exception is a bit more surprising, and even more surprising is the fact
1386that even though there was an error, the append worked::
1387
1388 >>> a_tuple[0]
1389 ['foo', 'item']
1390
R David Murraye6f2e6c2013-05-21 11:46:18 -04001391To see why this happens, you need to know that (a) if an object implements an
1392``__iadd__`` magic method, it gets called when the ``+=`` augmented assignment
1393is executed, and its return value is what gets used in the assignment statement;
1394and (b) for lists, ``__iadd__`` is equivalent to calling ``extend`` on the list
1395and returning the list. That's why we say that for lists, ``+=`` is a
1396"shorthand" for ``list.extend``::
R David Murrayed983ab2013-05-20 10:34:58 -04001397
1398 >>> a_list = []
1399 >>> a_list += [1]
1400 >>> a_list
1401 [1]
1402
R David Murraye6f2e6c2013-05-21 11:46:18 -04001403This is equivalent to::
R David Murrayed983ab2013-05-20 10:34:58 -04001404
1405 >>> result = a_list.__iadd__([1])
1406 >>> a_list = result
1407
1408The object pointed to by a_list has been mutated, and the pointer to the
1409mutated object is assigned back to ``a_list``. The end result of the
1410assignment is a no-op, since it is a pointer to the same object that ``a_list``
1411was previously pointing to, but the assignment still happens.
1412
1413Thus, in our tuple example what is happening is equivalent to::
1414
1415 >>> result = a_tuple[0].__iadd__(['item'])
1416 >>> a_tuple[0] = result
1417 Traceback (most recent call last):
1418 ...
1419 TypeError: 'tuple' object does not support item assignment
1420
1421The ``__iadd__`` succeeds, and thus the list is extended, but even though
1422``result`` points to the same object that ``a_tuple[0]`` already points to,
1423that final assignment still results in an error, because tuples are immutable.
1424
1425
Georg Brandl6728c5a2009-10-11 18:31:23 +00001426Dictionaries
1427============
1428
1429How can I get a dictionary to display its keys in a consistent order?
1430---------------------------------------------------------------------
1431
1432You can't. Dictionaries store their keys in an unpredictable order, so the
1433display order of a dictionary's elements will be similarly unpredictable.
1434
1435This can be frustrating if you want to save a printable version to a file, make
1436some changes and then compare it with some other printed dictionary. In this
1437case, use the ``pprint`` module to pretty-print the dictionary; the items will
1438be presented in order sorted by the key.
1439
Georg Brandl0cedb4b2009-12-20 14:20:16 +00001440A more complicated solution is to subclass ``dict`` to create a
Georg Brandl6728c5a2009-10-11 18:31:23 +00001441``SortedDict`` class that prints itself in a predictable order. Here's one
1442simpleminded implementation of such a class::
1443
Georg Brandl0cedb4b2009-12-20 14:20:16 +00001444 class SortedDict(dict):
Georg Brandl6728c5a2009-10-11 18:31:23 +00001445 def __repr__(self):
Georg Brandl0cedb4b2009-12-20 14:20:16 +00001446 keys = sorted(self.keys())
1447 result = ("{!r}: {!r}".format(k, self[k]) for k in keys)
1448 return "{{{}}}".format(", ".join(result))
Georg Brandl6728c5a2009-10-11 18:31:23 +00001449
Georg Brandl0cedb4b2009-12-20 14:20:16 +00001450 __str__ = __repr__
Georg Brandl6728c5a2009-10-11 18:31:23 +00001451
1452This will work for many common situations you might encounter, though it's far
1453from a perfect solution. The largest flaw is that if some values in the
1454dictionary are also dictionaries, their values won't be presented in any
1455particular order.
1456
1457
1458I want to do a complicated sort: can you do a Schwartzian Transform in Python?
1459------------------------------------------------------------------------------
1460
1461The technique, attributed to Randal Schwartz of the Perl community, sorts the
1462elements of a list by a metric which maps each element to its "sort value". In
1463Python, just use the ``key`` argument for the ``sort()`` method::
1464
1465 Isorted = L[:]
1466 Isorted.sort(key=lambda s: int(s[10:15]))
1467
1468The ``key`` argument is new in Python 2.4, for older versions this kind of
1469sorting is quite simple to do with list comprehensions. To sort a list of
1470strings by their uppercase values::
1471
Georg Brandl0cedb4b2009-12-20 14:20:16 +00001472 tmp1 = [(x.upper(), x) for x in L] # Schwartzian transform
Georg Brandl6728c5a2009-10-11 18:31:23 +00001473 tmp1.sort()
1474 Usorted = [x[1] for x in tmp1]
1475
1476To sort by the integer value of a subfield extending from positions 10-15 in
1477each string::
1478
Georg Brandl0cedb4b2009-12-20 14:20:16 +00001479 tmp2 = [(int(s[10:15]), s) for s in L] # Schwartzian transform
Georg Brandl6728c5a2009-10-11 18:31:23 +00001480 tmp2.sort()
1481 Isorted = [x[1] for x in tmp2]
1482
1483Note that Isorted may also be computed by ::
1484
1485 def intfield(s):
1486 return int(s[10:15])
1487
1488 def Icmp(s1, s2):
1489 return cmp(intfield(s1), intfield(s2))
1490
1491 Isorted = L[:]
1492 Isorted.sort(Icmp)
1493
1494but since this method calls ``intfield()`` many times for each element of L, it
1495is slower than the Schwartzian Transform.
1496
1497
1498How can I sort one list by values from another list?
1499----------------------------------------------------
1500
1501Merge them into a single list of tuples, sort the resulting list, and then pick
1502out the element you want. ::
1503
1504 >>> list1 = ["what", "I'm", "sorting", "by"]
1505 >>> list2 = ["something", "else", "to", "sort"]
1506 >>> pairs = zip(list1, list2)
1507 >>> pairs
1508 [('what', 'something'), ("I'm", 'else'), ('sorting', 'to'), ('by', 'sort')]
1509 >>> pairs.sort()
1510 >>> result = [ x[1] for x in pairs ]
1511 >>> result
1512 ['else', 'sort', 'to', 'something']
1513
1514An alternative for the last step is::
1515
Georg Brandl0cedb4b2009-12-20 14:20:16 +00001516 >>> result = []
1517 >>> for p in pairs: result.append(p[1])
Georg Brandl6728c5a2009-10-11 18:31:23 +00001518
1519If you find this more legible, you might prefer to use this instead of the final
1520list comprehension. However, it is almost twice as slow for long lists. Why?
1521First, the ``append()`` operation has to reallocate memory, and while it uses
1522some tricks to avoid doing that each time, it still has to do it occasionally,
1523and that costs quite a bit. Second, the expression "result.append" requires an
1524extra attribute lookup, and third, there's a speed reduction from having to make
1525all those function calls.
1526
1527
1528Objects
1529=======
1530
1531What is a class?
1532----------------
1533
1534A class is the particular object type created by executing a class statement.
1535Class objects are used as templates to create instance objects, which embody
1536both the data (attributes) and code (methods) specific to a datatype.
1537
1538A class can be based on one or more other classes, called its base class(es). It
1539then inherits the attributes and methods of its base classes. This allows an
1540object model to be successively refined by inheritance. You might have a
1541generic ``Mailbox`` class that provides basic accessor methods for a mailbox,
1542and subclasses such as ``MboxMailbox``, ``MaildirMailbox``, ``OutlookMailbox``
1543that handle various specific mailbox formats.
1544
1545
1546What is a method?
1547-----------------
1548
1549A method is a function on some object ``x`` that you normally call as
1550``x.name(arguments...)``. Methods are defined as functions inside the class
1551definition::
1552
1553 class C:
Serhiy Storchaka12d547a2016-05-10 13:45:32 +03001554 def meth(self, arg):
Georg Brandl6728c5a2009-10-11 18:31:23 +00001555 return arg * 2 + self.attribute
1556
1557
1558What is self?
1559-------------
1560
1561Self is merely a conventional name for the first argument of a method. A method
1562defined as ``meth(self, a, b, c)`` should be called as ``x.meth(a, b, c)`` for
1563some instance ``x`` of the class in which the definition occurs; the called
1564method will think it is called as ``meth(x, a, b, c)``.
1565
1566See also :ref:`why-self`.
1567
1568
1569How do I check if an object is an instance of a given class or of a subclass of it?
1570-----------------------------------------------------------------------------------
1571
1572Use the built-in function ``isinstance(obj, cls)``. You can check if an object
1573is an instance of any of a number of classes by providing a tuple instead of a
1574single class, e.g. ``isinstance(obj, (class1, class2, ...))``, and can also
1575check whether an object is one of Python's built-in types, e.g.
1576``isinstance(obj, str)`` or ``isinstance(obj, (int, long, float, complex))``.
1577
1578Note that most programs do not use :func:`isinstance` on user-defined classes
1579very often. If you are developing the classes yourself, a more proper
1580object-oriented style is to define methods on the classes that encapsulate a
1581particular behaviour, instead of checking the object's class and doing a
1582different thing based on what class it is. For example, if you have a function
1583that does something::
1584
Georg Brandl0cedb4b2009-12-20 14:20:16 +00001585 def search(obj):
Georg Brandl6728c5a2009-10-11 18:31:23 +00001586 if isinstance(obj, Mailbox):
Serhiy Storchaka12d547a2016-05-10 13:45:32 +03001587 ... # code to search a mailbox
Georg Brandl6728c5a2009-10-11 18:31:23 +00001588 elif isinstance(obj, Document):
Serhiy Storchaka12d547a2016-05-10 13:45:32 +03001589 ... # code to search a document
Georg Brandl6728c5a2009-10-11 18:31:23 +00001590 elif ...
1591
1592A better approach is to define a ``search()`` method on all the classes and just
1593call it::
1594
1595 class Mailbox:
1596 def search(self):
Serhiy Storchaka12d547a2016-05-10 13:45:32 +03001597 ... # code to search a mailbox
Georg Brandl6728c5a2009-10-11 18:31:23 +00001598
1599 class Document:
1600 def search(self):
Serhiy Storchaka12d547a2016-05-10 13:45:32 +03001601 ... # code to search a document
Georg Brandl6728c5a2009-10-11 18:31:23 +00001602
1603 obj.search()
1604
1605
1606What is delegation?
1607-------------------
1608
1609Delegation is an object oriented technique (also called a design pattern).
1610Let's say you have an object ``x`` and want to change the behaviour of just one
1611of its methods. You can create a new class that provides a new implementation
1612of the method you're interested in changing and delegates all other methods to
1613the corresponding method of ``x``.
1614
1615Python programmers can easily implement delegation. For example, the following
1616class implements a class that behaves like a file but converts all written data
1617to uppercase::
1618
1619 class UpperOut:
1620
1621 def __init__(self, outfile):
1622 self._outfile = outfile
1623
1624 def write(self, s):
1625 self._outfile.write(s.upper())
1626
1627 def __getattr__(self, name):
1628 return getattr(self._outfile, name)
1629
1630Here the ``UpperOut`` class redefines the ``write()`` method to convert the
1631argument string to uppercase before calling the underlying
1632``self.__outfile.write()`` method. All other methods are delegated to the
1633underlying ``self.__outfile`` object. The delegation is accomplished via the
1634``__getattr__`` method; consult :ref:`the language reference <attribute-access>`
1635for more information about controlling attribute access.
1636
1637Note that for more general cases delegation can get trickier. When attributes
1638must be set as well as retrieved, the class must define a :meth:`__setattr__`
1639method too, and it must do so carefully. The basic implementation of
1640:meth:`__setattr__` is roughly equivalent to the following::
1641
1642 class X:
1643 ...
1644 def __setattr__(self, name, value):
1645 self.__dict__[name] = value
1646 ...
1647
1648Most :meth:`__setattr__` implementations must modify ``self.__dict__`` to store
1649local state for self without causing an infinite recursion.
1650
1651
1652How do I call a method defined in a base class from a derived class that overrides it?
1653--------------------------------------------------------------------------------------
1654
1655If you're using new-style classes, use the built-in :func:`super` function::
1656
1657 class Derived(Base):
Serhiy Storchaka12d547a2016-05-10 13:45:32 +03001658 def meth(self):
Georg Brandl6728c5a2009-10-11 18:31:23 +00001659 super(Derived, self).meth()
1660
1661If you're using classic classes: For a class definition such as ``class
1662Derived(Base): ...`` you can call method ``meth()`` defined in ``Base`` (or one
1663of ``Base``'s base classes) as ``Base.meth(self, arguments...)``. Here,
1664``Base.meth`` is an unbound method, so you need to provide the ``self``
1665argument.
1666
1667
1668How can I organize my code to make it easier to change the base class?
1669----------------------------------------------------------------------
1670
1671You could define an alias for the base class, assign the real base class to it
1672before your class definition, and use the alias throughout your class. Then all
1673you have to change is the value assigned to the alias. Incidentally, this trick
1674is also handy if you want to decide dynamically (e.g. depending on availability
1675of resources) which base class to use. Example::
1676
1677 BaseAlias = <real base class>
1678
1679 class Derived(BaseAlias):
1680 def meth(self):
1681 BaseAlias.meth(self)
1682 ...
1683
1684
1685How do I create static class data and static class methods?
1686-----------------------------------------------------------
1687
Georg Brandl0cedb4b2009-12-20 14:20:16 +00001688Both static data and static methods (in the sense of C++ or Java) are supported
1689in Python.
Georg Brandl6728c5a2009-10-11 18:31:23 +00001690
1691For static data, simply define a class attribute. To assign a new value to the
1692attribute, you have to explicitly use the class name in the assignment::
1693
1694 class C:
1695 count = 0 # number of times C.__init__ called
1696
1697 def __init__(self):
1698 C.count = C.count + 1
1699
1700 def getcount(self):
1701 return C.count # or return self.count
1702
1703``c.count`` also refers to ``C.count`` for any ``c`` such that ``isinstance(c,
1704C)`` holds, unless overridden by ``c`` itself or by some class on the base-class
1705search path from ``c.__class__`` back to ``C``.
1706
1707Caution: within a method of C, an assignment like ``self.count = 42`` creates a
Georg Brandl0cedb4b2009-12-20 14:20:16 +00001708new and unrelated instance named "count" in ``self``'s own dict. Rebinding of a
1709class-static data name must always specify the class whether inside a method or
1710not::
Georg Brandl6728c5a2009-10-11 18:31:23 +00001711
1712 C.count = 314
1713
1714Static methods are possible since Python 2.2::
1715
1716 class C:
1717 def static(arg1, arg2, arg3):
1718 # No 'self' parameter!
1719 ...
1720 static = staticmethod(static)
1721
1722With Python 2.4's decorators, this can also be written as ::
1723
1724 class C:
1725 @staticmethod
1726 def static(arg1, arg2, arg3):
1727 # No 'self' parameter!
1728 ...
1729
1730However, a far more straightforward way to get the effect of a static method is
1731via a simple module-level function::
1732
1733 def getcount():
1734 return C.count
1735
1736If your code is structured so as to define one class (or tightly related class
1737hierarchy) per module, this supplies the desired encapsulation.
1738
1739
1740How can I overload constructors (or methods) in Python?
1741-------------------------------------------------------
1742
1743This answer actually applies to all methods, but the question usually comes up
1744first in the context of constructors.
1745
1746In C++ you'd write
1747
1748.. code-block:: c
1749
1750 class C {
1751 C() { cout << "No arguments\n"; }
1752 C(int i) { cout << "Argument is " << i << "\n"; }
1753 }
1754
1755In Python you have to write a single constructor that catches all cases using
1756default arguments. For example::
1757
1758 class C:
1759 def __init__(self, i=None):
1760 if i is None:
1761 print "No arguments"
1762 else:
1763 print "Argument is", i
1764
1765This is not entirely equivalent, but close enough in practice.
1766
1767You could also try a variable-length argument list, e.g. ::
1768
1769 def __init__(self, *args):
1770 ...
1771
1772The same approach works for all method definitions.
1773
1774
1775I try to use __spam and I get an error about _SomeClassName__spam.
1776------------------------------------------------------------------
1777
1778Variable names with double leading underscores are "mangled" to provide a simple
1779but effective way to define class private variables. Any identifier of the form
1780``__spam`` (at least two leading underscores, at most one trailing underscore)
1781is textually replaced with ``_classname__spam``, where ``classname`` is the
1782current class name with any leading underscores stripped.
1783
1784This doesn't guarantee privacy: an outside user can still deliberately access
1785the "_classname__spam" attribute, and private values are visible in the object's
1786``__dict__``. Many Python programmers never bother to use private variable
1787names at all.
1788
1789
1790My class defines __del__ but it is not called when I delete the object.
1791-----------------------------------------------------------------------
1792
1793There are several possible reasons for this.
1794
1795The del statement does not necessarily call :meth:`__del__` -- it simply
1796decrements the object's reference count, and if this reaches zero
1797:meth:`__del__` is called.
1798
1799If your data structures contain circular links (e.g. a tree where each child has
1800a parent reference and each parent has a list of children) the reference counts
1801will never go back to zero. Once in a while Python runs an algorithm to detect
1802such cycles, but the garbage collector might run some time after the last
1803reference to your data structure vanishes, so your :meth:`__del__` method may be
1804called at an inconvenient and random time. This is inconvenient if you're trying
1805to reproduce a problem. Worse, the order in which object's :meth:`__del__`
1806methods are executed is arbitrary. You can run :func:`gc.collect` to force a
1807collection, but there *are* pathological cases where objects will never be
1808collected.
1809
1810Despite the cycle collector, it's still a good idea to define an explicit
1811``close()`` method on objects to be called whenever you're done with them. The
1812``close()`` method can then remove attributes that refer to subobjecs. Don't
1813call :meth:`__del__` directly -- :meth:`__del__` should call ``close()`` and
1814``close()`` should make sure that it can be called more than once for the same
1815object.
1816
1817Another way to avoid cyclical references is to use the :mod:`weakref` module,
1818which allows you to point to objects without incrementing their reference count.
1819Tree data structures, for instance, should use weak references for their parent
1820and sibling references (if they need them!).
1821
1822If the object has ever been a local variable in a function that caught an
1823expression in an except clause, chances are that a reference to the object still
1824exists in that function's stack frame as contained in the stack trace.
1825Normally, calling :func:`sys.exc_clear` will take care of this by clearing the
1826last recorded exception.
1827
1828Finally, if your :meth:`__del__` method raises an exception, a warning message
1829is printed to :data:`sys.stderr`.
1830
1831
1832How do I get a list of all instances of a given class?
1833------------------------------------------------------
1834
1835Python does not keep track of all instances of a class (or of a built-in type).
1836You can program the class's constructor to keep track of all instances by
1837keeping a list of weak references to each instance.
1838
1839
Georg Brandl0f79cac2013-10-12 18:14:25 +02001840Why does the result of ``id()`` appear to be not unique?
1841--------------------------------------------------------
1842
1843The :func:`id` builtin returns an integer that is guaranteed to be unique during
1844the lifetime of the object. Since in CPython, this is the object's memory
1845address, it happens frequently that after an object is deleted from memory, the
1846next freshly created object is allocated at the same position in memory. This
1847is illustrated by this example:
1848
1849>>> id(1000)
185013901272
1851>>> id(2000)
185213901272
1853
1854The two ids belong to different integer objects that are created before, and
1855deleted immediately after execution of the ``id()`` call. To be sure that
1856objects whose id you want to examine are still alive, create another reference
1857to the object:
1858
1859>>> a = 1000; b = 2000
1860>>> id(a)
186113901272
1862>>> id(b)
186313891296
1864
1865
Georg Brandl6728c5a2009-10-11 18:31:23 +00001866Modules
1867=======
1868
1869How do I create a .pyc file?
1870----------------------------
1871
1872When a module is imported for the first time (or when the source is more recent
1873than the current compiled file) a ``.pyc`` file containing the compiled code
1874should be created in the same directory as the ``.py`` file.
1875
1876One reason that a ``.pyc`` file may not be created is permissions problems with
1877the directory. This can happen, for example, if you develop as one user but run
1878as another, such as if you are testing with a web server. Creation of a .pyc
1879file is automatic if you're importing a module and Python has the ability
1880(permissions, free space, etc...) to write the compiled module back to the
1881directory.
1882
R David Murrayff229842013-06-19 17:00:43 -04001883Running Python on a top level script is not considered an import and no
1884``.pyc`` will be created. For example, if you have a top-level module
1885``foo.py`` that imports another module ``xyz.py``, when you run ``foo``,
1886``xyz.pyc`` will be created since ``xyz`` is imported, but no ``foo.pyc`` file
1887will be created since ``foo.py`` isn't being imported.
Georg Brandl6728c5a2009-10-11 18:31:23 +00001888
R David Murrayff229842013-06-19 17:00:43 -04001889If you need to create ``foo.pyc`` -- that is, to create a ``.pyc`` file for a module
Georg Brandl6728c5a2009-10-11 18:31:23 +00001890that is not imported -- you can, using the :mod:`py_compile` and
1891:mod:`compileall` modules.
1892
1893The :mod:`py_compile` module can manually compile any module. One way is to use
1894the ``compile()`` function in that module interactively::
1895
1896 >>> import py_compile
R David Murrayff229842013-06-19 17:00:43 -04001897 >>> py_compile.compile('foo.py') # doctest: +SKIP
Georg Brandl6728c5a2009-10-11 18:31:23 +00001898
R David Murrayff229842013-06-19 17:00:43 -04001899This will write the ``.pyc`` to the same location as ``foo.py`` (or you can
Georg Brandl6728c5a2009-10-11 18:31:23 +00001900override that with the optional parameter ``cfile``).
1901
1902You can also automatically compile all files in a directory or directories using
1903the :mod:`compileall` module. You can do it from the shell prompt by running
1904``compileall.py`` and providing the path of a directory containing Python files
1905to compile::
1906
1907 python -m compileall .
1908
1909
1910How do I find the current module name?
1911--------------------------------------
1912
1913A module can find out its own module name by looking at the predefined global
1914variable ``__name__``. If this has the value ``'__main__'``, the program is
1915running as a script. Many modules that are usually used by importing them also
1916provide a command-line interface or a self-test, and only execute this code
1917after checking ``__name__``::
1918
1919 def main():
1920 print 'Running test...'
1921 ...
1922
1923 if __name__ == '__main__':
1924 main()
1925
1926
1927How can I have modules that mutually import each other?
1928-------------------------------------------------------
1929
1930Suppose you have the following modules:
1931
1932foo.py::
1933
1934 from bar import bar_var
1935 foo_var = 1
1936
1937bar.py::
1938
1939 from foo import foo_var
1940 bar_var = 2
1941
1942The problem is that the interpreter will perform the following steps:
1943
1944* main imports foo
1945* Empty globals for foo are created
1946* foo is compiled and starts executing
1947* foo imports bar
1948* Empty globals for bar are created
1949* bar is compiled and starts executing
1950* bar imports foo (which is a no-op since there already is a module named foo)
1951* bar.foo_var = foo.foo_var
1952
1953The last step fails, because Python isn't done with interpreting ``foo`` yet and
1954the global symbol dictionary for ``foo`` is still empty.
1955
1956The same thing happens when you use ``import foo``, and then try to access
1957``foo.foo_var`` in global code.
1958
1959There are (at least) three possible workarounds for this problem.
1960
1961Guido van Rossum recommends avoiding all uses of ``from <module> import ...``,
1962and placing all code inside functions. Initializations of global variables and
1963class variables should use constants or built-in functions only. This means
1964everything from an imported module is referenced as ``<module>.<name>``.
1965
1966Jim Roskind suggests performing steps in the following order in each module:
1967
1968* exports (globals, functions, and classes that don't need imported base
1969 classes)
1970* ``import`` statements
1971* active code (including globals that are initialized from imported values).
1972
1973van Rossum doesn't like this approach much because the imports appear in a
1974strange place, but it does work.
1975
1976Matthias Urlichs recommends restructuring your code so that the recursive import
1977is not necessary in the first place.
1978
1979These solutions are not mutually exclusive.
1980
1981
1982__import__('x.y.z') returns <module 'x'>; how do I get z?
1983---------------------------------------------------------
1984
Ezio Melottic468aba2014-08-04 19:34:29 +03001985Consider using the convenience function :func:`~importlib.import_module` from
1986:mod:`importlib` instead::
Georg Brandl6728c5a2009-10-11 18:31:23 +00001987
Ezio Melottic468aba2014-08-04 19:34:29 +03001988 z = importlib.import_module('x.y.z')
Georg Brandl6728c5a2009-10-11 18:31:23 +00001989
1990
1991When I edit an imported module and reimport it, the changes don't show up. Why does this happen?
1992-------------------------------------------------------------------------------------------------
1993
1994For reasons of efficiency as well as consistency, Python only reads the module
1995file on the first time a module is imported. If it didn't, in a program
1996consisting of many modules where each one imports the same basic module, the
1997basic module would be parsed and re-parsed many times. To force rereading of a
1998changed module, do this::
1999
2000 import modname
2001 reload(modname)
2002
2003Warning: this technique is not 100% fool-proof. In particular, modules
2004containing statements like ::
2005
2006 from modname import some_objects
2007
2008will continue to work with the old version of the imported objects. If the
2009module contains class definitions, existing class instances will *not* be
2010updated to use the new class definition. This can result in the following
2011paradoxical behaviour:
2012
2013 >>> import cls
2014 >>> c = cls.C() # Create an instance of C
2015 >>> reload(cls)
2016 <module 'cls' from 'cls.pyc'>
2017 >>> isinstance(c, cls.C) # isinstance is false?!?
2018 False
2019
2020The nature of the problem is made clear if you print out the class objects:
2021
2022 >>> c.__class__
2023 <class cls.C at 0x7352a0>
2024 >>> cls.C
2025 <class cls.C at 0x4198d0>
2026