5 Why does Python use indentation for grouping of statements?
6 -----------------------------------------------------------
8 Guido van Rossum believes that using indentation for grouping is extremely
9 elegant and contributes a lot to the clarity of the average Python program.
10 Most people learn to love this feature after a while.
12 Since there are no begin/end brackets there cannot be a disagreement between
13 grouping perceived by the parser and the human reader. Occasionally C
14 programmers will encounter a fragment of code like this::
21 Only the ``x++`` statement is executed if the condition is true, but the
22 indentation leads you to believe otherwise. Even experienced C programmers will
23 sometimes stare at it a long time wondering why ``y`` is being decremented even
26 Because there are no begin/end brackets, Python is much less prone to
27 coding-style conflicts. In C there are many different ways to place the braces.
28 If you're used to reading and writing code that uses one style, you will feel at
29 least slightly uneasy when reading (or being required to write) another style.
31 Many coding styles place begin/end brackets on a line by themself. This makes
32 programs considerably longer and wastes valuable screen space, making it harder
33 to get a good overview of a program. Ideally, a function should fit on one
34 screen (say, 20-30 lines). 20 lines of Python can do a lot more work than 20
35 lines of C. This is not solely due to the lack of begin/end brackets -- the
36 lack of declarations and the high-level data types are also responsible -- but
37 the indentation-based syntax certainly helps.
40 Why am I getting strange results with simple arithmetic operations?
41 -------------------------------------------------------------------
43 See the next question.
46 Why are floating point calculations so inaccurate?
47 --------------------------------------------------
49 People are often very surprised by results like this::
54 and think it is a bug in Python. It's not. This has nothing to do with Python,
55 but with how the underlying C platform handles floating point numbers, and
56 ultimately with the inaccuracies introduced when writing down numbers as a
57 string of a fixed number of digits.
59 The internal representation of floating point numbers uses a fixed number of
60 binary digits to represent a decimal number. Some decimal numbers can't be
61 represented exactly in binary, resulting in small roundoff errors.
63 In decimal math, there are many numbers that can't be represented with a fixed
64 number of decimal digits, e.g. 1/3 = 0.3333333333.......
66 In base 2, 1/2 = 0.1, 1/4 = 0.01, 1/8 = 0.001, etc. .2 equals 2/10 equals 1/5,
67 resulting in the binary fractional number 0.001100110011001...
69 Floating point numbers only have 32 or 64 bits of precision, so the digits are
70 cut off at some point, and the resulting number is 0.199999999999999996 in
73 A floating point number's ``repr()`` function prints as many digits are
74 necessary to make ``eval(repr(f)) == f`` true for any float f. The ``str()``
75 function prints fewer digits and this often results in the more sensible number
76 that was probably intended::
83 One of the consequences of this is that it is error-prone to compare the result
84 of some computation to a float with ``==``. Tiny inaccuracies may mean that
85 ``==`` fails. Instead, you have to check that the difference between the two
86 numbers is less than a certain threshold::
88 epsilon = 0.0000000000001 # Tiny allowed error
91 if expected_result-epsilon <= computation() <= expected_result+epsilon:
94 Please see the chapter on :ref:`floating point arithmetic <tut-fp-issues>` in
95 the Python tutorial for more information.
98 Why are Python strings immutable?
99 ---------------------------------
101 There are several advantages.
103 One is performance: knowing that a string is immutable means we can allocate
104 space for it at creation time, and the storage requirements are fixed and
105 unchanging. This is also one of the reasons for the distinction between tuples
108 Another advantage is that strings in Python are considered as "elemental" as
109 numbers. No amount of activity will change the value 8 to anything else, and in
110 Python, no amount of activity will change the string "eight" to anything else.
115 Why must 'self' be used explicitly in method definitions and calls?
116 -------------------------------------------------------------------
118 The idea was borrowed from Modula-3. It turns out to be very useful, for a
121 First, it's more obvious that you are using a method or instance attribute
122 instead of a local variable. Reading ``self.x`` or ``self.meth()`` makes it
123 absolutely clear that an instance variable or method is used even if you don't
124 know the class definition by heart. In C++, you can sort of tell by the lack of
125 a local variable declaration (assuming globals are rare or easily recognizable)
126 -- but in Python, there are no local variable declarations, so you'd have to
127 look up the class definition to be sure. Some C++ and Java coding standards
128 call for instance attributes to have an ``m_`` prefix, so this explicitness is
129 still useful in those languages, too.
131 Second, it means that no special syntax is necessary if you want to explicitly
132 reference or call the method from a particular class. In C++, if you want to
133 use a method from a base class which is overridden in a derived class, you have
134 to use the ``::`` operator -- in Python you can write
135 ``baseclass.methodname(self, <argument list>)``. This is particularly useful
136 for :meth:`__init__` methods, and in general in cases where a derived class
137 method wants to extend the base class method of the same name and thus has to
138 call the base class method somehow.
140 Finally, for instance variables it solves a syntactic problem with assignment:
141 since local variables in Python are (by definition!) those variables to which a
142 value is assigned in a function body (and that aren't explicitly declared
143 global), there has to be some way to tell the interpreter that an assignment was
144 meant to assign to an instance variable instead of to a local variable, and it
145 should preferably be syntactic (for efficiency reasons). C++ does this through
146 declarations, but Python doesn't have declarations and it would be a pity having
147 to introduce them just for this purpose. Using the explicit ``self.var`` solves
148 this nicely. Similarly, for using instance variables, having to write
149 ``self.var`` means that references to unqualified names inside a method don't
150 have to search the instance's directories. To put it another way, local
151 variables and instance variables live in two different namespaces, and you need
152 to tell Python which namespace to use.
155 Why can't I use an assignment in an expression?
156 -----------------------------------------------
158 Many people used to C or Perl complain that they want to use this C idiom:
162 while (line = readline(f)) {
163 // do something with line
166 where in Python you're forced to write this::
172 ... # do something with line
174 The reason for not allowing assignment in Python expressions is a common,
175 hard-to-find bug in those other languages, caused by this construct:
183 // code that only works for nonzero x
186 The error is a simple typo: ``x = 0``, which assigns 0 to the variable ``x``,
187 was written while the comparison ``x == 0`` is certainly what was intended.
189 Many alternatives have been proposed. Most are hacks that save some typing but
190 use arbitrary or cryptic syntax or keywords, and fail the simple criterion for
191 language change proposals: it should intuitively suggest the proper meaning to a
192 human reader who has not yet been introduced to the construct.
194 An interesting phenomenon is that most experienced Python programmers recognize
195 the ``while True`` idiom and don't seem to be missing the assignment in
196 expression construct much; it's only newcomers who express a strong desire to
197 add this to the language.
199 There's an alternative way of spelling this that seems attractive but is
200 generally less robust than the "while True" solution::
204 ... # do something with line...
207 The problem with this is that if you change your mind about exactly how you get
208 the next line (e.g. you want to change it into ``sys.stdin.readline()``) you
209 have to remember to change two places in your program -- the second occurrence
210 is hidden at the bottom of the loop.
212 The best approach is to use iterators, making it possible to loop through
213 objects using the ``for`` statement. For example, in the current version of
214 Python file objects support the iterator protocol, so you can now write simply::
217 ... # do something with line...
221 Why does Python use methods for some functionality (e.g. list.index()) but functions for other (e.g. len(list))?
222 ----------------------------------------------------------------------------------------------------------------
224 The major reason is history. Functions were used for those operations that were
225 generic for a group of types and which were intended to work even for objects
226 that didn't have methods at all (e.g. tuples). It is also convenient to have a
227 function that can readily be applied to an amorphous collection of objects when
228 you use the functional features of Python (``map()``, ``apply()`` et al).
230 In fact, implementing ``len()``, ``max()``, ``min()`` as a built-in function is
231 actually less code than implementing them as methods for each type. One can
232 quibble about individual cases but it's a part of Python, and it's too late to
233 make such fundamental changes now. The functions have to remain to avoid massive
236 .. XXX talk about protocols?
240 For string operations, Python has moved from external functions (the
241 ``string`` module) to methods. However, ``len()`` is still a function.
244 Why is join() a string method instead of a list or tuple method?
245 ----------------------------------------------------------------
247 Strings became much more like other standard types starting in Python 1.6, when
248 methods were added which give the same functionality that has always been
249 available using the functions of the string module. Most of these new methods
250 have been widely accepted, but the one which appears to make some programmers
251 feel uncomfortable is::
253 ", ".join(['1', '2', '4', '8', '16'])
255 which gives the result::
259 There are two common arguments against this usage.
261 The first runs along the lines of: "It looks really ugly using a method of a
262 string literal (string constant)", to which the answer is that it might, but a
263 string literal is just a fixed value. If the methods are to be allowed on names
264 bound to strings there is no logical reason to make them unavailable on
267 The second objection is typically cast as: "I am really telling a sequence to
268 join its members together with a string constant". Sadly, you aren't. For some
269 reason there seems to be much less difficulty with having :meth:`~str.split` as
270 a string method, since in that case it is easy to see that ::
272 "1, 2, 4, 8, 16".split(", ")
274 is an instruction to a string literal to return the substrings delimited by the
275 given separator (or, by default, arbitrary runs of white space). In this case a
276 Unicode string returns a list of Unicode strings, an ASCII string returns a list
277 of ASCII strings, and everyone is happy.
279 :meth:`~str.join` is a string method because in using it you are telling the
280 separator string to iterate over a sequence of strings and insert itself between
281 adjacent elements. This method can be used with any argument which obeys the
282 rules for sequence objects, including any new classes you might define yourself.
284 Because this is a string method it can work for Unicode strings as well as plain
285 ASCII strings. If ``join()`` were a method of the sequence types then the
286 sequence types would have to decide which type of string to return depending on
287 the type of the separator.
289 .. XXX remove next paragraph eventually
291 If none of these arguments persuade you, then for the moment you can continue to
292 use the ``join()`` function from the string module, which allows you to write ::
294 string.join(['1', '2', '4', '8', '16'], ", ")
297 How fast are exceptions?
298 ------------------------
300 A try/except block is extremely efficient. Actually catching an exception is
301 expensive. In versions of Python prior to 2.0 it was common to use this idiom::
306 mydict[key] = getvalue(key)
309 This only made sense when you expected the dict to have the key almost all the
310 time. If that wasn't the case, you coded it like this::
312 if mydict.has_key(key):
315 mydict[key] = getvalue(key)
320 In Python 2.0 and higher, you can code this as ``value =
321 mydict.setdefault(key, getvalue(key))``.
324 Why isn't there a switch or case statement in Python?
325 -----------------------------------------------------
327 You can do this easily enough with a sequence of ``if... elif... elif... else``.
328 There have been some proposals for switch statement syntax, but there is no
329 consensus (yet) on whether and how to do range tests. See :pep:`275` for
330 complete details and the current status.
332 For cases where you need to choose from a very large number of possibilities,
333 you can create a dictionary mapping case values to functions to call. For
339 functions = {'a': function_1,
341 'c': self.method_1, ...}
343 func = functions[value]
346 For calling methods on objects, you can simplify yet further by using the
347 :func:`getattr` built-in to retrieve methods with a particular name::
349 def visit_a(self, ...):
353 def dispatch(self, value):
354 method_name = 'visit_' + str(value)
355 method = getattr(self, method_name)
358 It's suggested that you use a prefix for the method names, such as ``visit_`` in
359 this example. Without such a prefix, if values are coming from an untrusted
360 source, an attacker would be able to call any method on your object.
363 Can't you emulate threads in the interpreter instead of relying on an OS-specific thread implementation?
364 --------------------------------------------------------------------------------------------------------
366 Answer 1: Unfortunately, the interpreter pushes at least one C stack frame for
367 each Python stack frame. Also, extensions can call back into Python at almost
368 random moments. Therefore, a complete threads implementation requires thread
371 Answer 2: Fortunately, there is `Stackless Python <http://www.stackless.com>`_,
372 which has a completely redesigned interpreter loop that avoids the C stack.
373 It's still experimental but looks very promising. Although it is binary
374 compatible with standard Python, it's still unclear whether Stackless will make
375 it into the core -- maybe it's just too revolutionary.
378 Why can't lambda forms contain statements?
379 ------------------------------------------
381 Python lambda forms cannot contain statements because Python's syntactic
382 framework can't handle statements nested inside expressions. However, in
383 Python, this is not a serious problem. Unlike lambda forms in other languages,
384 where they add functionality, Python lambdas are only a shorthand notation if
385 you're too lazy to define a function.
387 Functions are already first class objects in Python, and can be declared in a
388 local scope. Therefore the only advantage of using a lambda form instead of a
389 locally-defined function is that you don't need to invent a name for the
390 function -- but that's just a local variable to which the function object (which
391 is exactly the same type of object that a lambda form yields) is assigned!
394 Can Python be compiled to machine code, C or some other language?
395 -----------------------------------------------------------------
397 Not easily. Python's high level data types, dynamic typing of objects and
398 run-time invocation of the interpreter (using :func:`eval` or :keyword:`exec`)
399 together mean that a "compiled" Python program would probably consist mostly of
400 calls into the Python run-time system, even for seemingly simple operations like
403 Several projects described in the Python newsgroup or at past `Python
404 conferences <http://python.org/community/workshops/>`_ have shown that this
405 approach is feasible, although the speedups reached so far are only modest
406 (e.g. 2x). Jython uses the same strategy for compiling to Java bytecode. (Jim
407 Hugunin has demonstrated that in combination with whole-program analysis,
408 speedups of 1000x are feasible for small demo programs. See the proceedings
409 from the `1997 Python conference
410 <http://python.org/workshops/1997-10/proceedings/>`_ for more information.)
412 Internally, Python source code is always translated into a bytecode
413 representation, and this bytecode is then executed by the Python virtual
414 machine. In order to avoid the overhead of repeatedly parsing and translating
415 modules that rarely change, this byte code is written into a file whose name
416 ends in ".pyc" whenever a module is parsed. When the corresponding .py file is
417 changed, it is parsed and translated again and the .pyc file is rewritten.
419 There is no performance difference once the .pyc file has been loaded, as the
420 bytecode read from the .pyc file is exactly the same as the bytecode created by
421 direct translation. The only difference is that loading code from a .pyc file
422 is faster than parsing and translating a .py file, so the presence of
423 precompiled .pyc files improves the start-up time of Python scripts. If
424 desired, the Lib/compileall.py module can be used to create valid .pyc files for
425 a given set of modules.
427 Note that the main script executed by Python, even if its filename ends in .py,
428 is not compiled to a .pyc file. It is compiled to bytecode, but the bytecode is
429 not saved to a file. Usually main scripts are quite short, so this doesn't cost
432 .. XXX check which of these projects are still alive
434 There are also several programs which make it easier to intermingle Python and C
435 code in various ways to increase performance. See, for example, `Psyco
436 <http://psyco.sourceforge.net/>`_, `Pyrex
437 <http://www.cosc.canterbury.ac.nz/~greg/python/Pyrex/>`_, `PyInline
438 <http://pyinline.sourceforge.net/>`_, `Py2Cmod
439 <http://sourceforge.net/projects/py2cmod/>`_, and `Weave
440 <http://www.scipy.org/Weave>`_.
443 How does Python manage memory?
444 ------------------------------
446 The details of Python memory management depend on the implementation. The
447 standard C implementation of Python uses reference counting to detect
448 inaccessible objects, and another mechanism to collect reference cycles,
449 periodically executing a cycle detection algorithm which looks for inaccessible
450 cycles and deletes the objects involved. The :mod:`gc` module provides functions
451 to perform a garbage collection, obtain debugging statistics, and tune the
452 collector's parameters.
454 Jython relies on the Java runtime so the JVM's garbage collector is used. This
455 difference can cause some subtle porting problems if your Python code depends on
456 the behavior of the reference counting implementation.
458 .. XXX relevant for Python 2.6?
460 Sometimes objects get stuck in tracebacks temporarily and hence are not
461 deallocated when you might expect. Clear the tracebacks with::
465 sys.exc_traceback = sys.last_traceback = None
467 Tracebacks are used for reporting errors, implementing debuggers and related
468 things. They contain a portion of the program state extracted during the
469 handling of an exception (usually the most recent exception).
471 In the absence of circularities and tracebacks, Python programs do not need to
472 manage memory explicitly.
474 Why doesn't Python use a more traditional garbage collection scheme? For one
475 thing, this is not a C standard feature and hence it's not portable. (Yes, we
476 know about the Boehm GC library. It has bits of assembler code for *most*
477 common platforms, not for all of them, and although it is mostly transparent, it
478 isn't completely transparent; patches are required to get Python to work with
481 Traditional GC also becomes a problem when Python is embedded into other
482 applications. While in a standalone Python it's fine to replace the standard
483 malloc() and free() with versions provided by the GC library, an application
484 embedding Python may want to have its *own* substitute for malloc() and free(),
485 and may not want Python's. Right now, Python works with anything that
486 implements malloc() and free() properly.
488 In Jython, the following code (which is fine in CPython) will probably run out
489 of file descriptors long before it runs out of memory::
491 for file in very_long_list_of_files:
495 Using the current reference counting and destructor scheme, each new assignment
496 to f closes the previous file. Using GC, this is not guaranteed. If you want
497 to write code that will work with any Python implementation, you should
498 explicitly close the file or use the :keyword:`with` statement; this will work
501 for file in very_long_list_of_files:
502 with open(file) as f:
506 Why isn't all memory freed when Python exits?
507 ---------------------------------------------
509 Objects referenced from the global namespaces of Python modules are not always
510 deallocated when Python exits. This may happen if there are circular
511 references. There are also certain bits of memory that are allocated by the C
512 library that are impossible to free (e.g. a tool like Purify will complain about
513 these). Python is, however, aggressive about cleaning up memory on exit and
514 does try to destroy every single object.
516 If you want to force Python to delete certain things on deallocation use the
517 :mod:`atexit` module to run a function that will force those deletions.
520 Why are there separate tuple and list data types?
521 -------------------------------------------------
523 Lists and tuples, while similar in many respects, are generally used in
524 fundamentally different ways. Tuples can be thought of as being similar to
525 Pascal records or C structs; they're small collections of related data which may
526 be of different types which are operated on as a group. For example, a
527 Cartesian coordinate is appropriately represented as a tuple of two or three
530 Lists, on the other hand, are more like arrays in other languages. They tend to
531 hold a varying number of objects all of which have the same type and which are
532 operated on one-by-one. For example, ``os.listdir('.')`` returns a list of
533 strings representing the files in the current directory. Functions which
534 operate on this output would generally not break if you added another file or
535 two to the directory.
537 Tuples are immutable, meaning that once a tuple has been created, you can't
538 replace any of its elements with a new value. Lists are mutable, meaning that
539 you can always change a list's elements. Only immutable elements can be used as
540 dictionary keys, and hence only tuples and not lists can be used as keys.
543 How are lists implemented?
544 --------------------------
546 Python's lists are really variable-length arrays, not Lisp-style linked lists.
547 The implementation uses a contiguous array of references to other objects, and
548 keeps a pointer to this array and the array's length in a list head structure.
550 This makes indexing a list ``a[i]`` an operation whose cost is independent of
551 the size of the list or the value of the index.
553 When items are appended or inserted, the array of references is resized. Some
554 cleverness is applied to improve the performance of appending items repeatedly;
555 when the array must be grown, some extra space is allocated so the next few
556 times don't require an actual resize.
559 How are dictionaries implemented?
560 ---------------------------------
562 Python's dictionaries are implemented as resizable hash tables. Compared to
563 B-trees, this gives better performance for lookup (the most common operation by
564 far) under most circumstances, and the implementation is simpler.
566 Dictionaries work by computing a hash code for each key stored in the dictionary
567 using the :func:`hash` built-in function. The hash code varies widely depending
568 on the key; for example, "Python" hashes to -539294296 while "python", a string
569 that differs by a single bit, hashes to 1142331976. The hash code is then used
570 to calculate a location in an internal array where the value will be stored.
571 Assuming that you're storing keys that all have different hash values, this
572 means that dictionaries take constant time -- O(1), in computer science notation
573 -- to retrieve a key. It also means that no sorted order of the keys is
574 maintained, and traversing the array as the ``.keys()`` and ``.items()`` do will
575 output the dictionary's content in some arbitrary jumbled order.
578 Why must dictionary keys be immutable?
579 --------------------------------------
581 The hash table implementation of dictionaries uses a hash value calculated from
582 the key value to find the key. If the key were a mutable object, its value
583 could change, and thus its hash could also change. But since whoever changes
584 the key object can't tell that it was being used as a dictionary key, it can't
585 move the entry around in the dictionary. Then, when you try to look up the same
586 object in the dictionary it won't be found because its hash value is different.
587 If you tried to look up the old value it wouldn't be found either, because the
588 value of the object found in that hash bin would be different.
590 If you want a dictionary indexed with a list, simply convert the list to a tuple
591 first; the function ``tuple(L)`` creates a tuple with the same entries as the
592 list ``L``. Tuples are immutable and can therefore be used as dictionary keys.
594 Some unacceptable solutions that have been proposed:
596 - Hash lists by their address (object ID). This doesn't work because if you
597 construct a new list with the same value it won't be found; e.g.::
599 mydict = {[1, 2]: '12'}
602 would raise a KeyError exception because the id of the ``[1, 2]`` used in the
603 second line differs from that in the first line. In other words, dictionary
604 keys should be compared using ``==``, not using :keyword:`is`.
606 - Make a copy when using a list as a key. This doesn't work because the list,
607 being a mutable object, could contain a reference to itself, and then the
608 copying code would run into an infinite loop.
610 - Allow lists as keys but tell the user not to modify them. This would allow a
611 class of hard-to-track bugs in programs when you forgot or modified a list by
612 accident. It also invalidates an important invariant of dictionaries: every
613 value in ``d.keys()`` is usable as a key of the dictionary.
615 - Mark lists as read-only once they are used as a dictionary key. The problem
616 is that it's not just the top-level object that could change its value; you
617 could use a tuple containing a list as a key. Entering anything as a key into
618 a dictionary would require marking all objects reachable from there as
619 read-only -- and again, self-referential objects could cause an infinite loop.
621 There is a trick to get around this if you need to, but use it at your own risk:
622 You can wrap a mutable structure inside a class instance which has both a
623 :meth:`__eq__` and a :meth:`__hash__` method. You must then make sure that the
624 hash value for all such wrapper objects that reside in a dictionary (or other
625 hash based structure), remain fixed while the object is in the dictionary (or
629 def __init__(self, the_list):
630 self.the_list = the_list
631 def __eq__(self, other):
632 return self.the_list == other.the_list
635 result = 98767 - len(l)*555
636 for i, el in enumerate(l):
638 result = result + (hash(el) % 9999999) * 1001 + i
640 result = (result % 7777777) + i * 333
643 Note that the hash computation is complicated by the possibility that some
644 members of the list may be unhashable and also by the possibility of arithmetic
647 Furthermore it must always be the case that if ``o1 == o2`` (ie ``o1.__eq__(o2)
648 is True``) then ``hash(o1) == hash(o2)`` (ie, ``o1.__hash__() == o2.__hash__()``),
649 regardless of whether the object is in a dictionary or not. If you fail to meet
650 these restrictions dictionaries and other hash based structures will misbehave.
652 In the case of ListWrapper, whenever the wrapper object is in a dictionary the
653 wrapped list must not change to avoid anomalies. Don't do this unless you are
654 prepared to think hard about the requirements and the consequences of not
655 meeting them correctly. Consider yourself warned.
658 Why doesn't list.sort() return the sorted list?
659 -----------------------------------------------
661 In situations where performance matters, making a copy of the list just to sort
662 it would be wasteful. Therefore, :meth:`list.sort` sorts the list in place. In
663 order to remind you of that fact, it does not return the sorted list. This way,
664 you won't be fooled into accidentally overwriting a list when you need a sorted
665 copy but also need to keep the unsorted version around.
667 In Python 2.4 a new builtin -- :func:`sorted` -- has been added. This function
668 creates a new list from a provided iterable, sorts it and returns it. For
669 example, here's how to iterate over the keys of a dictionary in sorted order::
671 for key in sorted(mydict):
672 ... # do whatever with mydict[key]...
675 How do you specify and enforce an interface spec in Python?
676 -----------------------------------------------------------
678 An interface specification for a module as provided by languages such as C++ and
679 Java describes the prototypes for the methods and functions of the module. Many
680 feel that compile-time enforcement of interface specifications helps in the
681 construction of large programs.
683 Python 2.6 adds an :mod:`abc` module that lets you define Abstract Base Classes
684 (ABCs). You can then use :func:`isinstance` and :func:`issubclass` to check
685 whether an instance or a class implements a particular ABC. The
686 :mod:`collections` modules defines a set of useful ABCs such as
687 :class:`Iterable`, :class:`Container`, and :class:`MutableMapping`.
689 For Python, many of the advantages of interface specifications can be obtained
690 by an appropriate test discipline for components. There is also a tool,
691 PyChecker, which can be used to find problems due to subclassing.
693 A good test suite for a module can both provide a regression test and serve as a
694 module interface specification and a set of examples. Many Python modules can
695 be run as a script to provide a simple "self test." Even modules which use
696 complex external interfaces can often be tested in isolation using trivial
697 "stub" emulations of the external interface. The :mod:`doctest` and
698 :mod:`unittest` modules or third-party test frameworks can be used to construct
699 exhaustive test suites that exercise every line of code in a module.
701 An appropriate testing discipline can help build large complex applications in
702 Python as well as having interface specifications would. In fact, it can be
703 better because an interface specification cannot test certain properties of a
704 program. For example, the :meth:`append` method is expected to add new elements
705 to the end of some internal list; an interface specification cannot test that
706 your :meth:`append` implementation will actually do this correctly, but it's
707 trivial to check this property in a test suite.
709 Writing test suites is very helpful, and you might want to design your code with
710 an eye to making it easily tested. One increasingly popular technique,
711 test-directed development, calls for writing parts of the test suite first,
712 before you write any of the actual code. Of course Python allows you to be
713 sloppy and not write test cases at all.
716 Why are default values shared between objects?
717 ----------------------------------------------
719 This type of bug commonly bites neophyte programmers. Consider this function::
721 def foo(mydict={}): # Danger: shared reference to one dict for all calls
722 ... compute something ...
726 The first time you call this function, ``mydict`` contains a single item. The
727 second time, ``mydict`` contains two items because when ``foo()`` begins
728 executing, ``mydict`` starts out with an item already in it.
730 It is often expected that a function call creates new objects for default
731 values. This is not what happens. Default values are created exactly once, when
732 the function is defined. If that object is changed, like the dictionary in this
733 example, subsequent calls to the function will refer to this changed object.
735 By definition, immutable objects such as numbers, strings, tuples, and ``None``,
736 are safe from change. Changes to mutable objects such as dictionaries, lists,
737 and class instances can lead to confusion.
739 Because of this feature, it is good programming practice to not use mutable
740 objects as default values. Instead, use ``None`` as the default value and
741 inside the function, check if the parameter is ``None`` and create a new
742 list/dictionary/whatever if it is. For example, don't write::
749 def foo(mydict=None):
751 mydict = {} # create a new dict for local namespace
753 This feature can be useful. When you have a function that's time-consuming to
754 compute, a common technique is to cache the parameters and the resulting value
755 of each call to the function, and return the cached value if the same value is
756 requested again. This is called "memoizing", and can be implemented like this::
758 # Callers will never provide a third parameter for this function.
759 def expensive (arg1, arg2, _cache={}):
760 if (arg1, arg2) in _cache:
761 return _cache[(arg1, arg2)]
763 # Calculate the value
764 result = ... expensive computation ...
765 _cache[(arg1, arg2)] = result # Store result in the cache
768 You could use a global variable containing a dictionary instead of the default
769 value; it's a matter of taste.
772 Why is there no goto?
773 ---------------------
775 You can use exceptions to provide a "structured goto" that even works across
776 function calls. Many feel that exceptions can conveniently emulate all
777 reasonable uses of the "go" or "goto" constructs of C, Fortran, and other
778 languages. For example::
780 class label: pass # declare a label
784 if (condition): raise label() # goto label
786 except label: # where to goto
790 This doesn't allow you to jump into the middle of a loop, but that's usually
791 considered an abuse of goto anyway. Use sparingly.
794 Why can't raw strings (r-strings) end with a backslash?
795 -------------------------------------------------------
797 More precisely, they can't end with an odd number of backslashes: the unpaired
798 backslash at the end escapes the closing quote character, leaving an
801 Raw strings were designed to ease creating input for processors (chiefly regular
802 expression engines) that want to do their own backslash escape processing. Such
803 processors consider an unmatched trailing backslash to be an error anyway, so
804 raw strings disallow that. In return, they allow you to pass on the string
805 quote character by escaping it with a backslash. These rules work well when
806 r-strings are used for their intended purpose.
808 If you're trying to build Windows pathnames, note that all Windows system calls
809 accept forward slashes too::
811 f = open("/mydir/file.txt") # works fine!
813 If you're trying to build a pathname for a DOS command, try e.g. one of ::
815 dir = r"\this\is\my\dos\dir" "\\"
816 dir = r"\this\is\my\dos\dir\ "[:-1]
817 dir = "\\this\\is\\my\\dos\\dir\\"
820 Why doesn't Python have a "with" statement for attribute assignments?
821 ---------------------------------------------------------------------
823 Python has a 'with' statement that wraps the execution of a block, calling code
824 on the entrance and exit from the block. Some language have a construct that
828 a = 1 # equivalent to obj.a = 1
829 total = total + 1 # obj.total = obj.total + 1
831 In Python, such a construct would be ambiguous.
833 Other languages, such as Object Pascal, Delphi, and C++, use static types, so
834 it's possible to know, in an unambiguous way, what member is being assigned
835 to. This is the main point of static typing -- the compiler *always* knows the
836 scope of every variable at compile time.
838 Python uses dynamic types. It is impossible to know in advance which attribute
839 will be referenced at runtime. Member attributes may be added or removed from
840 objects on the fly. This makes it impossible to know, from a simple reading,
841 what attribute is being referenced: a local one, a global one, or a member
844 For instance, take the following incomplete snippet::
850 The snippet assumes that "a" must have a member attribute called "x". However,
851 there is nothing in Python that tells the interpreter this. What should happen
852 if "a" is, let us say, an integer? If there is a global variable named "x",
853 will it be used inside the with block? As you see, the dynamic nature of Python
854 makes such choices much harder.
856 The primary benefit of "with" and similar language features (reduction of code
857 volume) can, however, easily be achieved in Python by assignment. Instead of::
859 function(args).mydict[index][index].a = 21
860 function(args).mydict[index][index].b = 42
861 function(args).mydict[index][index].c = 63
865 ref = function(args).mydict[index][index]
870 This also has the side-effect of increasing execution speed because name
871 bindings are resolved at run-time in Python, and the second version only needs
872 to perform the resolution once.
875 Why are colons required for the if/while/def/class statements?
876 --------------------------------------------------------------
878 The colon is required primarily to enhance readability (one of the results of
879 the experimental ABC language). Consider this::
889 Notice how the second one is slightly easier to read. Notice further how a
890 colon sets off the example in this FAQ answer; it's a standard usage in English.
892 Another minor reason is that the colon makes it easier for editors with syntax
893 highlighting; they can look for colons to decide when indentation needs to be
894 increased instead of having to do a more elaborate parsing of the program text.
897 Why does Python allow commas at the end of lists and tuples?
898 ------------------------------------------------------------
900 Python lets you add a trailing comma at the end of lists, tuples, and
907 "B": [6, 7], # last trailing comma is optional but good style
911 There are several reasons to allow this.
913 When you have a literal value for a list, tuple, or dictionary spread across
914 multiple lines, it's easier to add more elements because you don't have to
915 remember to add a comma to the previous line. The lines can also be sorted in
916 your editor without creating a syntax error.
918 Accidentally omitting the comma can lead to errors that are hard to diagnose.
928 This list looks like it has four elements, but it actually contains three:
929 "fee", "fiefoo" and "fum". Always adding the comma avoids this source of error.
931 Allowing the trailing comma may also make programmatic code generation easier.