blob: 23891be14f90cd378848f14ae546e2224468e977 [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
31for Windows Extensions <http://sourceforge.net/projects/pywin32/>`__ project and
32as a part of the ActivePython distribution (see
Georg Brandlfa55a312014-10-29 09:24:54 +010033http://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
47http://www.gnu.org/software/ddd.
48
49There are a number of commercial Python IDEs that include graphical debuggers.
50They include:
51
52* Wing IDE (http://wingware.com/)
Georg Brandlfa55a312014-10-29 09:24:54 +010053* Komodo IDE (http://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
66`Pylint <http://www.logilab.org/projects/pylint>`_ is another tool that checks
67if 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.
Georg Brandlfa55a312014-10-29 09:24:54 +010072http://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):
356 ... 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):
383 ... 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
702 args = {'a':' old-value', 'b': 99}
703 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
818 class A:
819 pass
820
821 B = A
822
823 a = B()
824 b = a
825 print b
Georg Brandl0cedb4b2009-12-20 14:20:16 +0000826 <__main__.A instance at 0x16D07CC>
Georg Brandl6728c5a2009-10-11 18:31:23 +0000827 print a
Georg Brandl0cedb4b2009-12-20 14:20:16 +0000828 <__main__.A instance at 0x16D07CC>
Georg Brandl6728c5a2009-10-11 18:31:23 +0000829
830Arguably the class has a name: even though it is bound to two names and invoked
831through the name B the created instance is still reported as an instance of
832class A. However, it is impossible to say whether the instance's name is a or
833b, since both names are bound to the same value.
834
835Generally speaking it should not be necessary for your code to "know the names"
836of particular values. Unless you are deliberately writing introspective
837programs, this is usually an indication that a change of approach might be
838beneficial.
839
840In comp.lang.python, Fredrik Lundh once gave an excellent analogy in answer to
841this question:
842
843 The same way as you get the name of that cat you found on your porch: the cat
844 (object) itself cannot tell you its name, and it doesn't really care -- so
845 the only way to find out what it's called is to ask all your neighbours
846 (namespaces) if it's their cat (object)...
847
848 ....and don't be surprised if you'll find that it's known by many names, or
849 no name at all!
850
851
852What's up with the comma operator's precedence?
853-----------------------------------------------
854
855Comma is not an operator in Python. Consider this session::
856
857 >>> "a" in "b", "a"
Georg Brandl0cedb4b2009-12-20 14:20:16 +0000858 (False, 'a')
Georg Brandl6728c5a2009-10-11 18:31:23 +0000859
860Since the comma is not an operator, but a separator between expressions the
861above is evaluated as if you had entered::
862
R David Murrayff229842013-06-19 17:00:43 -0400863 ("a" in "b"), "a"
Georg Brandl6728c5a2009-10-11 18:31:23 +0000864
865not::
866
R David Murrayff229842013-06-19 17:00:43 -0400867 "a" in ("b", "a")
Georg Brandl6728c5a2009-10-11 18:31:23 +0000868
869The same is true of the various assignment operators (``=``, ``+=`` etc). They
870are not truly operators but syntactic delimiters in assignment statements.
871
872
873Is there an equivalent of C's "?:" ternary operator?
874----------------------------------------------------
875
876Yes, this feature was added in Python 2.5. The syntax would be as follows::
877
878 [on_true] if [expression] else [on_false]
879
880 x, y = 50, 25
881
882 small = x if x < y else y
883
884For versions previous to 2.5 the answer would be 'No'.
885
Georg Brandl6728c5a2009-10-11 18:31:23 +0000886
887Is it possible to write obfuscated one-liners in Python?
888--------------------------------------------------------
889
890Yes. Usually this is done by nesting :keyword:`lambda` within
891:keyword:`lambda`. See the following three examples, due to Ulf Bartelt::
892
893 # Primes < 1000
894 print filter(None,map(lambda y:y*reduce(lambda x,y:x*y!=0,
895 map(lambda x,y=y:y%x,range(2,int(pow(y,0.5)+1))),1),range(2,1000)))
896
897 # First 10 Fibonacci numbers
Georg Brandl0cedb4b2009-12-20 14:20:16 +0000898 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 +0000899 range(10))
900
901 # Mandelbrot set
902 print (lambda Ru,Ro,Iu,Io,IM,Sx,Sy:reduce(lambda x,y:x+y,map(lambda y,
903 Iu=Iu,Io=Io,Ru=Ru,Ro=Ro,Sy=Sy,L=lambda yc,Iu=Iu,Io=Io,Ru=Ru,Ro=Ro,i=IM,
904 Sx=Sx,Sy=Sy:reduce(lambda x,y:x+y,map(lambda x,xc=Ru,yc=yc,Ru=Ru,Ro=Ro,
905 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
906 >=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(
907 64+F(Ru+x*(Ro-Ru)/Sx,yc,0,0,i)),range(Sx))):L(Iu+y*(Io-Iu)/Sy),range(Sy
908 ))))(-2.1, 0.7, -1.2, 1.2, 30, 80, 24)
909 # \___ ___/ \___ ___/ | | |__ lines on screen
910 # V V | |______ columns on screen
911 # | | |__________ maximum of "iterations"
912 # | |_________________ range on y axis
913 # |____________________________ range on x axis
914
915Don't try this at home, kids!
916
917
918Numbers and strings
919===================
920
921How do I specify hexadecimal and octal integers?
922------------------------------------------------
923
Georg Brandl0cedb4b2009-12-20 14:20:16 +0000924To specify an octal digit, precede the octal value with a zero, and then a lower
925or uppercase "o". For example, to set the variable "a" to the octal value "10"
926(8 in decimal), type::
Georg Brandl6728c5a2009-10-11 18:31:23 +0000927
Georg Brandl0cedb4b2009-12-20 14:20:16 +0000928 >>> a = 0o10
Georg Brandl6728c5a2009-10-11 18:31:23 +0000929 >>> a
930 8
931
932Hexadecimal is just as easy. Simply precede the hexadecimal number with a zero,
933and then a lower or uppercase "x". Hexadecimal digits can be specified in lower
934or uppercase. For example, in the Python interpreter::
935
936 >>> a = 0xa5
937 >>> a
938 165
939 >>> b = 0XB2
940 >>> b
941 178
942
943
Georg Brandl0cedb4b2009-12-20 14:20:16 +0000944Why does -22 // 10 return -3?
945-----------------------------
Georg Brandl6728c5a2009-10-11 18:31:23 +0000946
947It's primarily driven by the desire that ``i % j`` have the same sign as ``j``.
948If you want that, and also want::
949
Georg Brandl0cedb4b2009-12-20 14:20:16 +0000950 i == (i // j) * j + (i % j)
Georg Brandl6728c5a2009-10-11 18:31:23 +0000951
952then integer division has to return the floor. C also requires that identity to
Georg Brandl0cedb4b2009-12-20 14:20:16 +0000953hold, and then compilers that truncate ``i // j`` need to make ``i % j`` have
954the same sign as ``i``.
Georg Brandl6728c5a2009-10-11 18:31:23 +0000955
956There are few real use cases for ``i % j`` when ``j`` is negative. When ``j``
957is positive, there are many, and in virtually all of them it's more useful for
958``i % j`` to be ``>= 0``. If the clock says 10 now, what did it say 200 hours
959ago? ``-190 % 12 == 2`` is useful; ``-190 % 12 == -10`` is a bug waiting to
960bite.
961
Georg Brandl0cedb4b2009-12-20 14:20:16 +0000962.. note::
963
964 On Python 2, ``a / b`` returns the same as ``a // b`` if
965 ``__future__.division`` is not in effect. This is also known as "classic"
966 division.
967
Georg Brandl6728c5a2009-10-11 18:31:23 +0000968
969How do I convert a string to a number?
970--------------------------------------
971
972For integers, use the built-in :func:`int` type constructor, e.g. ``int('144')
973== 144``. Similarly, :func:`float` converts to floating-point,
974e.g. ``float('144') == 144.0``.
975
976By default, these interpret the number as decimal, so that ``int('0144') ==
977144`` and ``int('0x144')`` raises :exc:`ValueError`. ``int(string, base)`` takes
978the base to convert from as a second optional argument, so ``int('0x144', 16) ==
979324``. If the base is specified as 0, the number is interpreted using Python's
980rules: a leading '0' indicates octal, and '0x' indicates a hex number.
981
982Do not use the built-in function :func:`eval` if all you need is to convert
983strings to numbers. :func:`eval` will be significantly slower and it presents a
984security risk: someone could pass you a Python expression that might have
985unwanted side effects. For example, someone could pass
986``__import__('os').system("rm -rf $HOME")`` which would erase your home
987directory.
988
989:func:`eval` also has the effect of interpreting numbers as Python expressions,
990so that e.g. ``eval('09')`` gives a syntax error because Python regards numbers
991starting with '0' as octal (base 8).
992
993
994How do I convert a number to a string?
995--------------------------------------
996
997To convert, e.g., the number 144 to the string '144', use the built-in type
998constructor :func:`str`. If you want a hexadecimal or octal representation, use
Georg Brandl0cedb4b2009-12-20 14:20:16 +0000999the built-in functions :func:`hex` or :func:`oct`. For fancy formatting, see
1000the :ref:`formatstrings` section, e.g. ``"{:04d}".format(144)`` yields
1001``'0144'`` and ``"{:.3f}".format(1/3)`` yields ``'0.333'``. You may also use
1002:ref:`the % operator <string-formatting>` on strings. See the library reference
1003manual for details.
Georg Brandl6728c5a2009-10-11 18:31:23 +00001004
1005
1006How do I modify a string in place?
1007----------------------------------
1008
1009You can't, because strings are immutable. If you need an object with this
1010ability, try converting the string to a list or use the array module::
1011
R David Murrayff229842013-06-19 17:00:43 -04001012 >>> import io
Georg Brandl6728c5a2009-10-11 18:31:23 +00001013 >>> s = "Hello, world"
1014 >>> a = list(s)
1015 >>> print a
1016 ['H', 'e', 'l', 'l', 'o', ',', ' ', 'w', 'o', 'r', 'l', 'd']
1017 >>> a[7:] = list("there!")
1018 >>> ''.join(a)
1019 'Hello, there!'
1020
1021 >>> import array
1022 >>> a = array.array('c', s)
1023 >>> print a
1024 array('c', 'Hello, world')
Serhiy Storchakab7128732013-12-24 11:04:06 +02001025 >>> a[0] = 'y'; print a
R David Murrayff229842013-06-19 17:00:43 -04001026 array('c', 'yello, world')
Georg Brandl6728c5a2009-10-11 18:31:23 +00001027 >>> a.tostring()
1028 'yello, world'
1029
1030
1031How do I use strings to call functions/methods?
1032-----------------------------------------------
1033
1034There are various techniques.
1035
1036* The best is to use a dictionary that maps strings to functions. The primary
1037 advantage of this technique is that the strings do not need to match the names
1038 of the functions. This is also the primary technique used to emulate a case
1039 construct::
1040
1041 def a():
1042 pass
1043
1044 def b():
1045 pass
1046
1047 dispatch = {'go': a, 'stop': b} # Note lack of parens for funcs
1048
1049 dispatch[get_input()]() # Note trailing parens to call function
1050
1051* Use the built-in function :func:`getattr`::
1052
1053 import foo
1054 getattr(foo, 'bar')()
1055
1056 Note that :func:`getattr` works on any object, including classes, class
1057 instances, modules, and so on.
1058
1059 This is used in several places in the standard library, like this::
1060
1061 class Foo:
1062 def do_foo(self):
1063 ...
1064
1065 def do_bar(self):
1066 ...
1067
1068 f = getattr(foo_instance, 'do_' + opname)
1069 f()
1070
1071
1072* Use :func:`locals` or :func:`eval` to resolve the function name::
1073
1074 def myFunc():
1075 print "hello"
1076
1077 fname = "myFunc"
1078
1079 f = locals()[fname]
1080 f()
1081
1082 f = eval(fname)
1083 f()
1084
1085 Note: Using :func:`eval` is slow and dangerous. If you don't have absolute
1086 control over the contents of the string, someone could pass a string that
1087 resulted in an arbitrary function being executed.
1088
1089Is there an equivalent to Perl's chomp() for removing trailing newlines from strings?
1090-------------------------------------------------------------------------------------
1091
1092Starting with Python 2.2, you can use ``S.rstrip("\r\n")`` to remove all
Georg Brandl09302282010-10-06 09:32:48 +00001093occurrences of any line terminator from the end of the string ``S`` without
Georg Brandl6728c5a2009-10-11 18:31:23 +00001094removing other trailing whitespace. If the string ``S`` represents more than
1095one line, with several empty lines at the end, the line terminators for all the
1096blank lines will be removed::
1097
1098 >>> lines = ("line 1 \r\n"
1099 ... "\r\n"
1100 ... "\r\n")
1101 >>> lines.rstrip("\n\r")
Georg Brandl0cedb4b2009-12-20 14:20:16 +00001102 'line 1 '
Georg Brandl6728c5a2009-10-11 18:31:23 +00001103
1104Since this is typically only desired when reading text one line at a time, using
1105``S.rstrip()`` this way works well.
1106
Georg Brandl0cedb4b2009-12-20 14:20:16 +00001107For older versions of Python, there are two partial substitutes:
Georg Brandl6728c5a2009-10-11 18:31:23 +00001108
1109- If you want to remove all trailing whitespace, use the ``rstrip()`` method of
1110 string objects. This removes all trailing whitespace, not just a single
1111 newline.
1112
1113- Otherwise, if there is only one line in the string ``S``, use
1114 ``S.splitlines()[0]``.
1115
1116
1117Is there a scanf() or sscanf() equivalent?
1118------------------------------------------
1119
1120Not as such.
1121
1122For simple input parsing, the easiest approach is usually to split the line into
1123whitespace-delimited words using the :meth:`~str.split` method of string objects
1124and then convert decimal strings to numeric values using :func:`int` or
1125:func:`float`. ``split()`` supports an optional "sep" parameter which is useful
1126if the line uses something other than whitespace as a separator.
1127
Brian Curtine49aefc2010-09-23 13:48:06 +00001128For more complicated input parsing, regular expressions are more powerful
Sandro Tosi98ed08f2012-01-14 16:42:02 +01001129than C's :c:func:`sscanf` and better suited for the task.
Georg Brandl6728c5a2009-10-11 18:31:23 +00001130
1131
1132What does 'UnicodeError: ASCII [decoding,encoding] error: ordinal not in range(128)' mean?
1133------------------------------------------------------------------------------------------
1134
1135This error indicates that your Python installation can handle only 7-bit ASCII
1136strings. There are a couple ways to fix or work around the problem.
1137
1138If your programs must handle data in arbitrary character set encodings, the
1139environment the application runs in will generally identify the encoding of the
1140data it is handing you. You need to convert the input to Unicode data using
1141that encoding. For example, a program that handles email or web input will
1142typically find character set encoding information in Content-Type headers. This
1143can then be used to properly convert input data to Unicode. Assuming the string
1144referred to by ``value`` is encoded as UTF-8::
1145
1146 value = unicode(value, "utf-8")
1147
1148will return a Unicode object. If the data is not correctly encoded as UTF-8,
1149the above call will raise a :exc:`UnicodeError` exception.
1150
1151If you only want strings converted to Unicode which have non-ASCII data, you can
1152try converting them first assuming an ASCII encoding, and then generate Unicode
1153objects if that fails::
1154
1155 try:
1156 x = unicode(value, "ascii")
1157 except UnicodeError:
1158 value = unicode(value, "utf-8")
1159 else:
1160 # value was valid ASCII data
1161 pass
1162
1163It's possible to set a default encoding in a file called ``sitecustomize.py``
1164that's part of the Python library. However, this isn't recommended because
1165changing the Python-wide default encoding may cause third-party extension
1166modules to fail.
1167
1168Note that on Windows, there is an encoding known as "mbcs", which uses an
1169encoding specific to your current locale. In many cases, and particularly when
1170working with COM, this may be an appropriate default encoding to use.
1171
1172
1173Sequences (Tuples/Lists)
1174========================
1175
1176How do I convert between tuples and lists?
1177------------------------------------------
1178
1179The type constructor ``tuple(seq)`` converts any sequence (actually, any
1180iterable) into a tuple with the same items in the same order.
1181
1182For example, ``tuple([1, 2, 3])`` yields ``(1, 2, 3)`` and ``tuple('abc')``
1183yields ``('a', 'b', 'c')``. If the argument is a tuple, it does not make a copy
1184but returns the same object, so it is cheap to call :func:`tuple` when you
1185aren't sure that an object is already a tuple.
1186
1187The type constructor ``list(seq)`` converts any sequence or iterable into a list
1188with the same items in the same order. For example, ``list((1, 2, 3))`` yields
1189``[1, 2, 3]`` and ``list('abc')`` yields ``['a', 'b', 'c']``. If the argument
1190is a list, it makes a copy just like ``seq[:]`` would.
1191
1192
1193What's a negative index?
1194------------------------
1195
1196Python sequences are indexed with positive numbers and negative numbers. For
1197positive numbers 0 is the first index 1 is the second index and so forth. For
1198negative indices -1 is the last index and -2 is the penultimate (next to last)
1199index and so forth. Think of ``seq[-n]`` as the same as ``seq[len(seq)-n]``.
1200
1201Using negative indices can be very convenient. For example ``S[:-1]`` is all of
1202the string except for its last character, which is useful for removing the
1203trailing newline from a string.
1204
1205
1206How do I iterate over a sequence in reverse order?
1207--------------------------------------------------
1208
Georg Brandl6f82cd32010-02-06 18:44:44 +00001209Use the :func:`reversed` built-in function, which is new in Python 2.4::
Georg Brandl6728c5a2009-10-11 18:31:23 +00001210
1211 for x in reversed(sequence):
1212 ... # do something with x...
1213
1214This won't touch your original sequence, but build a new copy with reversed
1215order to iterate over.
1216
1217With Python 2.3, you can use an extended slice syntax::
1218
1219 for x in sequence[::-1]:
1220 ... # do something with x...
1221
1222
1223How do you remove duplicates from a list?
1224-----------------------------------------
1225
1226See the Python Cookbook for a long discussion of many ways to do this:
1227
Georg Brandlfa55a312014-10-29 09:24:54 +01001228 http://code.activestate.com/recipes/52560/
Georg Brandl6728c5a2009-10-11 18:31:23 +00001229
1230If you don't mind reordering the list, sort it and then scan from the end of the
1231list, deleting duplicates as you go::
1232
Georg Brandl0cedb4b2009-12-20 14:20:16 +00001233 if mylist:
1234 mylist.sort()
1235 last = mylist[-1]
1236 for i in range(len(mylist)-2, -1, -1):
1237 if last == mylist[i]:
1238 del mylist[i]
Georg Brandl6728c5a2009-10-11 18:31:23 +00001239 else:
Georg Brandl0cedb4b2009-12-20 14:20:16 +00001240 last = mylist[i]
Georg Brandl6728c5a2009-10-11 18:31:23 +00001241
1242If all elements of the list may be used as dictionary keys (i.e. they are all
1243hashable) this is often faster ::
1244
1245 d = {}
Georg Brandl0cedb4b2009-12-20 14:20:16 +00001246 for x in mylist:
1247 d[x] = 1
1248 mylist = list(d.keys())
Georg Brandl6728c5a2009-10-11 18:31:23 +00001249
1250In Python 2.5 and later, the following is possible instead::
1251
Georg Brandl0cedb4b2009-12-20 14:20:16 +00001252 mylist = list(set(mylist))
Georg Brandl6728c5a2009-10-11 18:31:23 +00001253
1254This converts the list into a set, thereby removing duplicates, and then back
1255into a list.
1256
1257
1258How do you make an array in Python?
1259-----------------------------------
1260
1261Use a list::
1262
1263 ["this", 1, "is", "an", "array"]
1264
1265Lists are equivalent to C or Pascal arrays in their time complexity; the primary
1266difference is that a Python list can contain objects of many different types.
1267
1268The ``array`` module also provides methods for creating arrays of fixed types
1269with compact representations, but they are slower to index than lists. Also
1270note that the Numeric extensions and others define array-like structures with
1271various characteristics as well.
1272
1273To get Lisp-style linked lists, you can emulate cons cells using tuples::
1274
1275 lisp_list = ("like", ("this", ("example", None) ) )
1276
1277If mutability is desired, you could use lists instead of tuples. Here the
1278analogue of lisp car is ``lisp_list[0]`` and the analogue of cdr is
1279``lisp_list[1]``. Only do this if you're sure you really need to, because it's
1280usually a lot slower than using Python lists.
1281
1282
1283How do I create a multidimensional list?
1284----------------------------------------
1285
1286You probably tried to make a multidimensional array like this::
1287
R David Murrayff229842013-06-19 17:00:43 -04001288 >>> A = [[None] * 2] * 3
Georg Brandl6728c5a2009-10-11 18:31:23 +00001289
1290This looks correct if you print it::
1291
1292 >>> A
1293 [[None, None], [None, None], [None, None]]
1294
1295But when you assign a value, it shows up in multiple places:
1296
1297 >>> A[0][0] = 5
1298 >>> A
1299 [[5, None], [5, None], [5, None]]
1300
1301The reason is that replicating a list with ``*`` doesn't create copies, it only
1302creates references to the existing objects. The ``*3`` creates a list
1303containing 3 references to the same list of length two. Changes to one row will
1304show in all rows, which is almost certainly not what you want.
1305
1306The suggested approach is to create a list of the desired length first and then
1307fill in each element with a newly created list::
1308
1309 A = [None] * 3
1310 for i in range(3):
1311 A[i] = [None] * 2
1312
1313This generates a list containing 3 different lists of length two. You can also
1314use a list comprehension::
1315
1316 w, h = 2, 3
1317 A = [[None] * w for i in range(h)]
1318
1319Or, you can use an extension that provides a matrix datatype; `Numeric Python
Ezio Melottic49805e2013-06-09 01:04:21 +03001320<http://www.numpy.org/>`_ is the best known.
Georg Brandl6728c5a2009-10-11 18:31:23 +00001321
1322
1323How do I apply a method to a sequence of objects?
1324-------------------------------------------------
1325
1326Use a list comprehension::
1327
Georg Brandl0cedb4b2009-12-20 14:20:16 +00001328 result = [obj.method() for obj in mylist]
Georg Brandl6728c5a2009-10-11 18:31:23 +00001329
1330More generically, you can try the following function::
1331
1332 def method_map(objects, method, arguments):
1333 """method_map([a,b], "meth", (1,2)) gives [a.meth(1,2), b.meth(1,2)]"""
1334 nobjects = len(objects)
1335 methods = map(getattr, objects, [method]*nobjects)
1336 return map(apply, methods, [arguments]*nobjects)
1337
1338
R David Murrayed983ab2013-05-20 10:34:58 -04001339Why does a_tuple[i] += ['item'] raise an exception when the addition works?
1340---------------------------------------------------------------------------
1341
1342This is because of a combination of the fact that augmented assignment
1343operators are *assignment* operators, and the difference between mutable and
1344immutable objects in Python.
1345
1346This discussion applies in general when augmented assignment operators are
1347applied to elements of a tuple that point to mutable objects, but we'll use
1348a ``list`` and ``+=`` as our exemplar.
1349
1350If you wrote::
1351
1352 >>> a_tuple = (1, 2)
1353 >>> a_tuple[0] += 1
1354 Traceback (most recent call last):
1355 ...
1356 TypeError: 'tuple' object does not support item assignment
1357
1358The reason for the exception should be immediately clear: ``1`` is added to the
1359object ``a_tuple[0]`` points to (``1``), producing the result object, ``2``,
1360but when we attempt to assign the result of the computation, ``2``, to element
1361``0`` of the tuple, we get an error because we can't change what an element of
1362a tuple points to.
1363
1364Under the covers, what this augmented assignment statement is doing is
1365approximately this::
1366
R David Murraye6f2e6c2013-05-21 11:46:18 -04001367 >>> result = a_tuple[0] + 1
R David Murrayed983ab2013-05-20 10:34:58 -04001368 >>> a_tuple[0] = result
1369 Traceback (most recent call last):
1370 ...
1371 TypeError: 'tuple' object does not support item assignment
1372
1373It is the assignment part of the operation that produces the error, since a
1374tuple is immutable.
1375
1376When you write something like::
1377
1378 >>> a_tuple = (['foo'], 'bar')
1379 >>> a_tuple[0] += ['item']
1380 Traceback (most recent call last):
1381 ...
1382 TypeError: 'tuple' object does not support item assignment
1383
1384The exception is a bit more surprising, and even more surprising is the fact
1385that even though there was an error, the append worked::
1386
1387 >>> a_tuple[0]
1388 ['foo', 'item']
1389
R David Murraye6f2e6c2013-05-21 11:46:18 -04001390To see why this happens, you need to know that (a) if an object implements an
1391``__iadd__`` magic method, it gets called when the ``+=`` augmented assignment
1392is executed, and its return value is what gets used in the assignment statement;
1393and (b) for lists, ``__iadd__`` is equivalent to calling ``extend`` on the list
1394and returning the list. That's why we say that for lists, ``+=`` is a
1395"shorthand" for ``list.extend``::
R David Murrayed983ab2013-05-20 10:34:58 -04001396
1397 >>> a_list = []
1398 >>> a_list += [1]
1399 >>> a_list
1400 [1]
1401
R David Murraye6f2e6c2013-05-21 11:46:18 -04001402This is equivalent to::
R David Murrayed983ab2013-05-20 10:34:58 -04001403
1404 >>> result = a_list.__iadd__([1])
1405 >>> a_list = result
1406
1407The object pointed to by a_list has been mutated, and the pointer to the
1408mutated object is assigned back to ``a_list``. The end result of the
1409assignment is a no-op, since it is a pointer to the same object that ``a_list``
1410was previously pointing to, but the assignment still happens.
1411
1412Thus, in our tuple example what is happening is equivalent to::
1413
1414 >>> result = a_tuple[0].__iadd__(['item'])
1415 >>> a_tuple[0] = result
1416 Traceback (most recent call last):
1417 ...
1418 TypeError: 'tuple' object does not support item assignment
1419
1420The ``__iadd__`` succeeds, and thus the list is extended, but even though
1421``result`` points to the same object that ``a_tuple[0]`` already points to,
1422that final assignment still results in an error, because tuples are immutable.
1423
1424
Georg Brandl6728c5a2009-10-11 18:31:23 +00001425Dictionaries
1426============
1427
1428How can I get a dictionary to display its keys in a consistent order?
1429---------------------------------------------------------------------
1430
1431You can't. Dictionaries store their keys in an unpredictable order, so the
1432display order of a dictionary's elements will be similarly unpredictable.
1433
1434This can be frustrating if you want to save a printable version to a file, make
1435some changes and then compare it with some other printed dictionary. In this
1436case, use the ``pprint`` module to pretty-print the dictionary; the items will
1437be presented in order sorted by the key.
1438
Georg Brandl0cedb4b2009-12-20 14:20:16 +00001439A more complicated solution is to subclass ``dict`` to create a
Georg Brandl6728c5a2009-10-11 18:31:23 +00001440``SortedDict`` class that prints itself in a predictable order. Here's one
1441simpleminded implementation of such a class::
1442
Georg Brandl0cedb4b2009-12-20 14:20:16 +00001443 class SortedDict(dict):
Georg Brandl6728c5a2009-10-11 18:31:23 +00001444 def __repr__(self):
Georg Brandl0cedb4b2009-12-20 14:20:16 +00001445 keys = sorted(self.keys())
1446 result = ("{!r}: {!r}".format(k, self[k]) for k in keys)
1447 return "{{{}}}".format(", ".join(result))
Georg Brandl6728c5a2009-10-11 18:31:23 +00001448
Georg Brandl0cedb4b2009-12-20 14:20:16 +00001449 __str__ = __repr__
Georg Brandl6728c5a2009-10-11 18:31:23 +00001450
1451This will work for many common situations you might encounter, though it's far
1452from a perfect solution. The largest flaw is that if some values in the
1453dictionary are also dictionaries, their values won't be presented in any
1454particular order.
1455
1456
1457I want to do a complicated sort: can you do a Schwartzian Transform in Python?
1458------------------------------------------------------------------------------
1459
1460The technique, attributed to Randal Schwartz of the Perl community, sorts the
1461elements of a list by a metric which maps each element to its "sort value". In
1462Python, just use the ``key`` argument for the ``sort()`` method::
1463
1464 Isorted = L[:]
1465 Isorted.sort(key=lambda s: int(s[10:15]))
1466
1467The ``key`` argument is new in Python 2.4, for older versions this kind of
1468sorting is quite simple to do with list comprehensions. To sort a list of
1469strings by their uppercase values::
1470
Georg Brandl0cedb4b2009-12-20 14:20:16 +00001471 tmp1 = [(x.upper(), x) for x in L] # Schwartzian transform
Georg Brandl6728c5a2009-10-11 18:31:23 +00001472 tmp1.sort()
1473 Usorted = [x[1] for x in tmp1]
1474
1475To sort by the integer value of a subfield extending from positions 10-15 in
1476each string::
1477
Georg Brandl0cedb4b2009-12-20 14:20:16 +00001478 tmp2 = [(int(s[10:15]), s) for s in L] # Schwartzian transform
Georg Brandl6728c5a2009-10-11 18:31:23 +00001479 tmp2.sort()
1480 Isorted = [x[1] for x in tmp2]
1481
1482Note that Isorted may also be computed by ::
1483
1484 def intfield(s):
1485 return int(s[10:15])
1486
1487 def Icmp(s1, s2):
1488 return cmp(intfield(s1), intfield(s2))
1489
1490 Isorted = L[:]
1491 Isorted.sort(Icmp)
1492
1493but since this method calls ``intfield()`` many times for each element of L, it
1494is slower than the Schwartzian Transform.
1495
1496
1497How can I sort one list by values from another list?
1498----------------------------------------------------
1499
1500Merge them into a single list of tuples, sort the resulting list, and then pick
1501out the element you want. ::
1502
1503 >>> list1 = ["what", "I'm", "sorting", "by"]
1504 >>> list2 = ["something", "else", "to", "sort"]
1505 >>> pairs = zip(list1, list2)
1506 >>> pairs
1507 [('what', 'something'), ("I'm", 'else'), ('sorting', 'to'), ('by', 'sort')]
1508 >>> pairs.sort()
1509 >>> result = [ x[1] for x in pairs ]
1510 >>> result
1511 ['else', 'sort', 'to', 'something']
1512
1513An alternative for the last step is::
1514
Georg Brandl0cedb4b2009-12-20 14:20:16 +00001515 >>> result = []
1516 >>> for p in pairs: result.append(p[1])
Georg Brandl6728c5a2009-10-11 18:31:23 +00001517
1518If you find this more legible, you might prefer to use this instead of the final
1519list comprehension. However, it is almost twice as slow for long lists. Why?
1520First, the ``append()`` operation has to reallocate memory, and while it uses
1521some tricks to avoid doing that each time, it still has to do it occasionally,
1522and that costs quite a bit. Second, the expression "result.append" requires an
1523extra attribute lookup, and third, there's a speed reduction from having to make
1524all those function calls.
1525
1526
1527Objects
1528=======
1529
1530What is a class?
1531----------------
1532
1533A class is the particular object type created by executing a class statement.
1534Class objects are used as templates to create instance objects, which embody
1535both the data (attributes) and code (methods) specific to a datatype.
1536
1537A class can be based on one or more other classes, called its base class(es). It
1538then inherits the attributes and methods of its base classes. This allows an
1539object model to be successively refined by inheritance. You might have a
1540generic ``Mailbox`` class that provides basic accessor methods for a mailbox,
1541and subclasses such as ``MboxMailbox``, ``MaildirMailbox``, ``OutlookMailbox``
1542that handle various specific mailbox formats.
1543
1544
1545What is a method?
1546-----------------
1547
1548A method is a function on some object ``x`` that you normally call as
1549``x.name(arguments...)``. Methods are defined as functions inside the class
1550definition::
1551
1552 class C:
1553 def meth (self, arg):
1554 return arg * 2 + self.attribute
1555
1556
1557What is self?
1558-------------
1559
1560Self is merely a conventional name for the first argument of a method. A method
1561defined as ``meth(self, a, b, c)`` should be called as ``x.meth(a, b, c)`` for
1562some instance ``x`` of the class in which the definition occurs; the called
1563method will think it is called as ``meth(x, a, b, c)``.
1564
1565See also :ref:`why-self`.
1566
1567
1568How do I check if an object is an instance of a given class or of a subclass of it?
1569-----------------------------------------------------------------------------------
1570
1571Use the built-in function ``isinstance(obj, cls)``. You can check if an object
1572is an instance of any of a number of classes by providing a tuple instead of a
1573single class, e.g. ``isinstance(obj, (class1, class2, ...))``, and can also
1574check whether an object is one of Python's built-in types, e.g.
1575``isinstance(obj, str)`` or ``isinstance(obj, (int, long, float, complex))``.
1576
1577Note that most programs do not use :func:`isinstance` on user-defined classes
1578very often. If you are developing the classes yourself, a more proper
1579object-oriented style is to define methods on the classes that encapsulate a
1580particular behaviour, instead of checking the object's class and doing a
1581different thing based on what class it is. For example, if you have a function
1582that does something::
1583
Georg Brandl0cedb4b2009-12-20 14:20:16 +00001584 def search(obj):
Georg Brandl6728c5a2009-10-11 18:31:23 +00001585 if isinstance(obj, Mailbox):
1586 # ... code to search a mailbox
1587 elif isinstance(obj, Document):
1588 # ... code to search a document
1589 elif ...
1590
1591A better approach is to define a ``search()`` method on all the classes and just
1592call it::
1593
1594 class Mailbox:
1595 def search(self):
1596 # ... code to search a mailbox
1597
1598 class Document:
1599 def search(self):
1600 # ... code to search a document
1601
1602 obj.search()
1603
1604
1605What is delegation?
1606-------------------
1607
1608Delegation is an object oriented technique (also called a design pattern).
1609Let's say you have an object ``x`` and want to change the behaviour of just one
1610of its methods. You can create a new class that provides a new implementation
1611of the method you're interested in changing and delegates all other methods to
1612the corresponding method of ``x``.
1613
1614Python programmers can easily implement delegation. For example, the following
1615class implements a class that behaves like a file but converts all written data
1616to uppercase::
1617
1618 class UpperOut:
1619
1620 def __init__(self, outfile):
1621 self._outfile = outfile
1622
1623 def write(self, s):
1624 self._outfile.write(s.upper())
1625
1626 def __getattr__(self, name):
1627 return getattr(self._outfile, name)
1628
1629Here the ``UpperOut`` class redefines the ``write()`` method to convert the
1630argument string to uppercase before calling the underlying
1631``self.__outfile.write()`` method. All other methods are delegated to the
1632underlying ``self.__outfile`` object. The delegation is accomplished via the
1633``__getattr__`` method; consult :ref:`the language reference <attribute-access>`
1634for more information about controlling attribute access.
1635
1636Note that for more general cases delegation can get trickier. When attributes
1637must be set as well as retrieved, the class must define a :meth:`__setattr__`
1638method too, and it must do so carefully. The basic implementation of
1639:meth:`__setattr__` is roughly equivalent to the following::
1640
1641 class X:
1642 ...
1643 def __setattr__(self, name, value):
1644 self.__dict__[name] = value
1645 ...
1646
1647Most :meth:`__setattr__` implementations must modify ``self.__dict__`` to store
1648local state for self without causing an infinite recursion.
1649
1650
1651How do I call a method defined in a base class from a derived class that overrides it?
1652--------------------------------------------------------------------------------------
1653
1654If you're using new-style classes, use the built-in :func:`super` function::
1655
1656 class Derived(Base):
1657 def meth (self):
1658 super(Derived, self).meth()
1659
1660If you're using classic classes: For a class definition such as ``class
1661Derived(Base): ...`` you can call method ``meth()`` defined in ``Base`` (or one
1662of ``Base``'s base classes) as ``Base.meth(self, arguments...)``. Here,
1663``Base.meth`` is an unbound method, so you need to provide the ``self``
1664argument.
1665
1666
1667How can I organize my code to make it easier to change the base class?
1668----------------------------------------------------------------------
1669
1670You could define an alias for the base class, assign the real base class to it
1671before your class definition, and use the alias throughout your class. Then all
1672you have to change is the value assigned to the alias. Incidentally, this trick
1673is also handy if you want to decide dynamically (e.g. depending on availability
1674of resources) which base class to use. Example::
1675
1676 BaseAlias = <real base class>
1677
1678 class Derived(BaseAlias):
1679 def meth(self):
1680 BaseAlias.meth(self)
1681 ...
1682
1683
1684How do I create static class data and static class methods?
1685-----------------------------------------------------------
1686
Georg Brandl0cedb4b2009-12-20 14:20:16 +00001687Both static data and static methods (in the sense of C++ or Java) are supported
1688in Python.
Georg Brandl6728c5a2009-10-11 18:31:23 +00001689
1690For static data, simply define a class attribute. To assign a new value to the
1691attribute, you have to explicitly use the class name in the assignment::
1692
1693 class C:
1694 count = 0 # number of times C.__init__ called
1695
1696 def __init__(self):
1697 C.count = C.count + 1
1698
1699 def getcount(self):
1700 return C.count # or return self.count
1701
1702``c.count`` also refers to ``C.count`` for any ``c`` such that ``isinstance(c,
1703C)`` holds, unless overridden by ``c`` itself or by some class on the base-class
1704search path from ``c.__class__`` back to ``C``.
1705
1706Caution: within a method of C, an assignment like ``self.count = 42`` creates a
Georg Brandl0cedb4b2009-12-20 14:20:16 +00001707new and unrelated instance named "count" in ``self``'s own dict. Rebinding of a
1708class-static data name must always specify the class whether inside a method or
1709not::
Georg Brandl6728c5a2009-10-11 18:31:23 +00001710
1711 C.count = 314
1712
1713Static methods are possible since Python 2.2::
1714
1715 class C:
1716 def static(arg1, arg2, arg3):
1717 # No 'self' parameter!
1718 ...
1719 static = staticmethod(static)
1720
1721With Python 2.4's decorators, this can also be written as ::
1722
1723 class C:
1724 @staticmethod
1725 def static(arg1, arg2, arg3):
1726 # No 'self' parameter!
1727 ...
1728
1729However, a far more straightforward way to get the effect of a static method is
1730via a simple module-level function::
1731
1732 def getcount():
1733 return C.count
1734
1735If your code is structured so as to define one class (or tightly related class
1736hierarchy) per module, this supplies the desired encapsulation.
1737
1738
1739How can I overload constructors (or methods) in Python?
1740-------------------------------------------------------
1741
1742This answer actually applies to all methods, but the question usually comes up
1743first in the context of constructors.
1744
1745In C++ you'd write
1746
1747.. code-block:: c
1748
1749 class C {
1750 C() { cout << "No arguments\n"; }
1751 C(int i) { cout << "Argument is " << i << "\n"; }
1752 }
1753
1754In Python you have to write a single constructor that catches all cases using
1755default arguments. For example::
1756
1757 class C:
1758 def __init__(self, i=None):
1759 if i is None:
1760 print "No arguments"
1761 else:
1762 print "Argument is", i
1763
1764This is not entirely equivalent, but close enough in practice.
1765
1766You could also try a variable-length argument list, e.g. ::
1767
1768 def __init__(self, *args):
1769 ...
1770
1771The same approach works for all method definitions.
1772
1773
1774I try to use __spam and I get an error about _SomeClassName__spam.
1775------------------------------------------------------------------
1776
1777Variable names with double leading underscores are "mangled" to provide a simple
1778but effective way to define class private variables. Any identifier of the form
1779``__spam`` (at least two leading underscores, at most one trailing underscore)
1780is textually replaced with ``_classname__spam``, where ``classname`` is the
1781current class name with any leading underscores stripped.
1782
1783This doesn't guarantee privacy: an outside user can still deliberately access
1784the "_classname__spam" attribute, and private values are visible in the object's
1785``__dict__``. Many Python programmers never bother to use private variable
1786names at all.
1787
1788
1789My class defines __del__ but it is not called when I delete the object.
1790-----------------------------------------------------------------------
1791
1792There are several possible reasons for this.
1793
1794The del statement does not necessarily call :meth:`__del__` -- it simply
1795decrements the object's reference count, and if this reaches zero
1796:meth:`__del__` is called.
1797
1798If your data structures contain circular links (e.g. a tree where each child has
1799a parent reference and each parent has a list of children) the reference counts
1800will never go back to zero. Once in a while Python runs an algorithm to detect
1801such cycles, but the garbage collector might run some time after the last
1802reference to your data structure vanishes, so your :meth:`__del__` method may be
1803called at an inconvenient and random time. This is inconvenient if you're trying
1804to reproduce a problem. Worse, the order in which object's :meth:`__del__`
1805methods are executed is arbitrary. You can run :func:`gc.collect` to force a
1806collection, but there *are* pathological cases where objects will never be
1807collected.
1808
1809Despite the cycle collector, it's still a good idea to define an explicit
1810``close()`` method on objects to be called whenever you're done with them. The
1811``close()`` method can then remove attributes that refer to subobjecs. Don't
1812call :meth:`__del__` directly -- :meth:`__del__` should call ``close()`` and
1813``close()`` should make sure that it can be called more than once for the same
1814object.
1815
1816Another way to avoid cyclical references is to use the :mod:`weakref` module,
1817which allows you to point to objects without incrementing their reference count.
1818Tree data structures, for instance, should use weak references for their parent
1819and sibling references (if they need them!).
1820
1821If the object has ever been a local variable in a function that caught an
1822expression in an except clause, chances are that a reference to the object still
1823exists in that function's stack frame as contained in the stack trace.
1824Normally, calling :func:`sys.exc_clear` will take care of this by clearing the
1825last recorded exception.
1826
1827Finally, if your :meth:`__del__` method raises an exception, a warning message
1828is printed to :data:`sys.stderr`.
1829
1830
1831How do I get a list of all instances of a given class?
1832------------------------------------------------------
1833
1834Python does not keep track of all instances of a class (or of a built-in type).
1835You can program the class's constructor to keep track of all instances by
1836keeping a list of weak references to each instance.
1837
1838
Georg Brandl0f79cac2013-10-12 18:14:25 +02001839Why does the result of ``id()`` appear to be not unique?
1840--------------------------------------------------------
1841
1842The :func:`id` builtin returns an integer that is guaranteed to be unique during
1843the lifetime of the object. Since in CPython, this is the object's memory
1844address, it happens frequently that after an object is deleted from memory, the
1845next freshly created object is allocated at the same position in memory. This
1846is illustrated by this example:
1847
1848>>> id(1000)
184913901272
1850>>> id(2000)
185113901272
1852
1853The two ids belong to different integer objects that are created before, and
1854deleted immediately after execution of the ``id()`` call. To be sure that
1855objects whose id you want to examine are still alive, create another reference
1856to the object:
1857
1858>>> a = 1000; b = 2000
1859>>> id(a)
186013901272
1861>>> id(b)
186213891296
1863
1864
Georg Brandl6728c5a2009-10-11 18:31:23 +00001865Modules
1866=======
1867
1868How do I create a .pyc file?
1869----------------------------
1870
1871When a module is imported for the first time (or when the source is more recent
1872than the current compiled file) a ``.pyc`` file containing the compiled code
1873should be created in the same directory as the ``.py`` file.
1874
1875One reason that a ``.pyc`` file may not be created is permissions problems with
1876the directory. This can happen, for example, if you develop as one user but run
1877as another, such as if you are testing with a web server. Creation of a .pyc
1878file is automatic if you're importing a module and Python has the ability
1879(permissions, free space, etc...) to write the compiled module back to the
1880directory.
1881
R David Murrayff229842013-06-19 17:00:43 -04001882Running Python on a top level script is not considered an import and no
1883``.pyc`` will be created. For example, if you have a top-level module
1884``foo.py`` that imports another module ``xyz.py``, when you run ``foo``,
1885``xyz.pyc`` will be created since ``xyz`` is imported, but no ``foo.pyc`` file
1886will be created since ``foo.py`` isn't being imported.
Georg Brandl6728c5a2009-10-11 18:31:23 +00001887
R David Murrayff229842013-06-19 17:00:43 -04001888If you need to create ``foo.pyc`` -- that is, to create a ``.pyc`` file for a module
Georg Brandl6728c5a2009-10-11 18:31:23 +00001889that is not imported -- you can, using the :mod:`py_compile` and
1890:mod:`compileall` modules.
1891
1892The :mod:`py_compile` module can manually compile any module. One way is to use
1893the ``compile()`` function in that module interactively::
1894
1895 >>> import py_compile
R David Murrayff229842013-06-19 17:00:43 -04001896 >>> py_compile.compile('foo.py') # doctest: +SKIP
Georg Brandl6728c5a2009-10-11 18:31:23 +00001897
R David Murrayff229842013-06-19 17:00:43 -04001898This will write the ``.pyc`` to the same location as ``foo.py`` (or you can
Georg Brandl6728c5a2009-10-11 18:31:23 +00001899override that with the optional parameter ``cfile``).
1900
1901You can also automatically compile all files in a directory or directories using
1902the :mod:`compileall` module. You can do it from the shell prompt by running
1903``compileall.py`` and providing the path of a directory containing Python files
1904to compile::
1905
1906 python -m compileall .
1907
1908
1909How do I find the current module name?
1910--------------------------------------
1911
1912A module can find out its own module name by looking at the predefined global
1913variable ``__name__``. If this has the value ``'__main__'``, the program is
1914running as a script. Many modules that are usually used by importing them also
1915provide a command-line interface or a self-test, and only execute this code
1916after checking ``__name__``::
1917
1918 def main():
1919 print 'Running test...'
1920 ...
1921
1922 if __name__ == '__main__':
1923 main()
1924
1925
1926How can I have modules that mutually import each other?
1927-------------------------------------------------------
1928
1929Suppose you have the following modules:
1930
1931foo.py::
1932
1933 from bar import bar_var
1934 foo_var = 1
1935
1936bar.py::
1937
1938 from foo import foo_var
1939 bar_var = 2
1940
1941The problem is that the interpreter will perform the following steps:
1942
1943* main imports foo
1944* Empty globals for foo are created
1945* foo is compiled and starts executing
1946* foo imports bar
1947* Empty globals for bar are created
1948* bar is compiled and starts executing
1949* bar imports foo (which is a no-op since there already is a module named foo)
1950* bar.foo_var = foo.foo_var
1951
1952The last step fails, because Python isn't done with interpreting ``foo`` yet and
1953the global symbol dictionary for ``foo`` is still empty.
1954
1955The same thing happens when you use ``import foo``, and then try to access
1956``foo.foo_var`` in global code.
1957
1958There are (at least) three possible workarounds for this problem.
1959
1960Guido van Rossum recommends avoiding all uses of ``from <module> import ...``,
1961and placing all code inside functions. Initializations of global variables and
1962class variables should use constants or built-in functions only. This means
1963everything from an imported module is referenced as ``<module>.<name>``.
1964
1965Jim Roskind suggests performing steps in the following order in each module:
1966
1967* exports (globals, functions, and classes that don't need imported base
1968 classes)
1969* ``import`` statements
1970* active code (including globals that are initialized from imported values).
1971
1972van Rossum doesn't like this approach much because the imports appear in a
1973strange place, but it does work.
1974
1975Matthias Urlichs recommends restructuring your code so that the recursive import
1976is not necessary in the first place.
1977
1978These solutions are not mutually exclusive.
1979
1980
1981__import__('x.y.z') returns <module 'x'>; how do I get z?
1982---------------------------------------------------------
1983
Ezio Melottic468aba2014-08-04 19:34:29 +03001984Consider using the convenience function :func:`~importlib.import_module` from
1985:mod:`importlib` instead::
Georg Brandl6728c5a2009-10-11 18:31:23 +00001986
Ezio Melottic468aba2014-08-04 19:34:29 +03001987 z = importlib.import_module('x.y.z')
Georg Brandl6728c5a2009-10-11 18:31:23 +00001988
1989
1990When I edit an imported module and reimport it, the changes don't show up. Why does this happen?
1991-------------------------------------------------------------------------------------------------
1992
1993For reasons of efficiency as well as consistency, Python only reads the module
1994file on the first time a module is imported. If it didn't, in a program
1995consisting of many modules where each one imports the same basic module, the
1996basic module would be parsed and re-parsed many times. To force rereading of a
1997changed module, do this::
1998
1999 import modname
2000 reload(modname)
2001
2002Warning: this technique is not 100% fool-proof. In particular, modules
2003containing statements like ::
2004
2005 from modname import some_objects
2006
2007will continue to work with the old version of the imported objects. If the
2008module contains class definitions, existing class instances will *not* be
2009updated to use the new class definition. This can result in the following
2010paradoxical behaviour:
2011
2012 >>> import cls
2013 >>> c = cls.C() # Create an instance of C
2014 >>> reload(cls)
2015 <module 'cls' from 'cls.pyc'>
2016 >>> isinstance(c, cls.C) # isinstance is false?!?
2017 False
2018
2019The nature of the problem is made clear if you print out the class objects:
2020
2021 >>> c.__class__
2022 <class cls.C at 0x7352a0>
2023 >>> cls.C
2024 <class cls.C at 0x4198d0>
2025