<HTML xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcq="http://purl.org/dc/qualifiers/1.0/" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:fn="http://www.w3.org/2005/xpath-functions">
<HEAD>
<TITLE>Google Python Style Guide</TITLE>
<META http-equiv="Content-Type" content="text/html; charset=utf-8">
<LINK HREF="http://www.google.com/favicon.ico" type="image/x-icon" rel="shortcut icon">
<LINK HREF="styleguide.css" type="text/css" rel="stylesheet">
<SCRIPT language="javascript" type="text/javascript">

                function GetElementsByName(name) {
                  // Workaround a bug on old versions of opera.
                  if (document.getElementsByName) {
                    return document.getElementsByName(name);
                  } else {
                    return [document.getElementById(name)];
                  }
                }

                /**
                 * @param {string} namePrefix The prefix of the body name.
                 * @param {function(boolean): boolean} getVisibility Computes the new
                 *     visibility state, given the current one.
                 */
                function ChangeVisibility(namePrefix, getVisibility) {
                  var bodyName = namePrefix + '__body';
                  var buttonName = namePrefix + '__button';
                  var bodyElements = GetElementsByName(bodyName);
                  var linkElement = GetElementsByName('link-' + buttonName)[0];
                  if (bodyElements.length != 1) {
                    throw Error('ShowHideByName() got the wrong number of bodyElements:  ' + 
                        bodyElements.length);
                  } else {
                    var bodyElement = bodyElements[0];
                    var buttonElement = GetElementsByName(buttonName)[0];
                    var isVisible = bodyElement.style.display != "none";
                    if (getVisibility(isVisible)) {
                      bodyElement.style.display = "inline";
                      linkElement.style.display = "block";
                      buttonElement.innerHTML = '▽';
                    } else {
                      bodyElement.style.display = "none";
                      linkElement.style.display = "none";
                      buttonElement.innerHTML = '▶';
                    }
                  }
                }

                function ShowHideByName(namePrefix) {
                  ChangeVisibility(namePrefix, function(old) { return !old; });
                }

                function ShowByName(namePrefix) {
                  ChangeVisibility(namePrefix, function() { return true; });
                }

                function ShowHideAll() {
                  var allButton = GetElementsByName("show_hide_all_button")[0];
                  if (allButton.innerHTML == '▽') {
                    allButton.innerHTML = '▶';
                    SetHiddenState(document.getElementsByTagName("body")[0].childNodes, "none", '▶');
                  } else {
                    allButton.innerHTML = '▽';
                    SetHiddenState(document.getElementsByTagName("body")[0].childNodes, "inline", '▽');
                  }
                }

                // Recursively sets state of all children
                // of a particular node.
                function SetHiddenState(root, newState, newButton) {
                  for (var i = 0; i != root.length; i++) {
                    SetHiddenState(root[i].childNodes, newState, newButton);
                    if (root[i].className == 'showhide_button')  {
                      root[i].innerHTML = newButton;
                    }
                    if (root[i].className == 'stylepoint_body' ||
                        root[i].className == 'link_button')  {
                      root[i].style.display = newState;
                    }
                  }
                }


                function EndsWith(str, suffix) {
                  var l = str.length - suffix.length;
                  return l >= 0 && str.indexOf(suffix, l) == l;
                }

                function RefreshVisibilityFromHashParam() {
                  var hashRegexp = new RegExp('#([^&#]*)$');
                  var hashMatch = hashRegexp.exec(window.location.href);
                  var anchor = hashMatch && GetElementsByName(hashMatch[1])[0];
                  var node = anchor;
                  var suffix = '__body';
                  while (node) {
                    var id = node.id;
                    var matched = id && EndsWith(id, suffix);
                    if (matched) {
                      var len = id.length - suffix.length;
                      ShowByName(id.substring(0, len));
                      if (anchor.scrollIntoView) {
                        anchor.scrollIntoView();
                      }

                      return;
                    }
                    node = node.parentNode;
                  }
                }

                window.onhashchange = RefreshVisibilityFromHashParam;

                window.onload = function() {
                  // if the URL contains "?showall=y", expand the details of all children
                  var showHideAllRegex = new RegExp("[\\?&](showall)=([^&#]*)");
                  var showHideAllValue = showHideAllRegex.exec(window.location.href);
                  if (showHideAllValue != null) {
                    if (showHideAllValue[2] == "y") {
                      SetHiddenState(document.getElementsByTagName("body")[0].childNodes, 
                          "inline", '▽');
                    } else {
                      SetHiddenState(document.getElementsByTagName("body")[0].childNodes, 
                          "none", '▶');
                    }
                  }
                  var showOneRegex = new RegExp("[\\?&](showone)=([^&#]*)");
                  var showOneValue = showOneRegex.exec(window.location.href);
                  if (showOneValue) {
                    ShowHideByName(showOneValue[2]);
                  }


                  RefreshVisibilityFromHashParam();
                }
              </SCRIPT>
</HEAD>
<BODY>
<H1>Google Python Style Guide</H1>
  <p align="right">

    Revision 2.59
  </p>
  
  <address>
    Amit Patel<br>
    Antoine Picard<br>
    Eugene Jhong<br>
    Jeremy Hylton<br>
    Matt Smart<br>
    Mike Shields<br>
  </address>
  <DIV style="margin-left: 50%; font-size: 75%;">
<P>
        Each style point has a summary for which additional information is available
        by toggling the accompanying arrow button that looks this way:
        <SPAN class="showhide_button" style="margin-left: 0; float: none">▶</SPAN>.
        You may toggle all summaries with the big arrow button:
      </P>
<DIV style=" font-size: larger; margin-left: +2em;">
<SPAN class="showhide_button" style="font-size: 180%; float: none" onclick="javascript:ShowHideAll()" name="show_hide_all_button" id="show_hide_all_button">▶</SPAN>
        Toggle all summaries
      </DIV>
</DIV>
<DIV class="toc">
<DIV class="toc_title">Table of Contents</DIV>
<TABLE>
<TR valign="top" class="">
<TD><DIV class="toc_category"><A href="#Python_Language_Rules">Python Language Rules</A></DIV></TD>
<TD><DIV class="toc_stylepoint">
<SPAN style="padding-right: 1em; white-space:nowrap;" class=""><A href="#Lint">Lint</A></SPAN> <SPAN style="padding-right: 1em; white-space:nowrap;" class=""><A href="#Imports">Imports</A></SPAN> <SPAN style="padding-right: 1em; white-space:nowrap;" class=""><A href="#Packages">Packages</A></SPAN> <SPAN style="padding-right: 1em; white-space:nowrap;" class=""><A href="#Exceptions">Exceptions</A></SPAN> <SPAN style="padding-right: 1em; white-space:nowrap;" class=""><A href="#Global_variables">Global variables</A></SPAN> <SPAN style="padding-right: 1em; white-space:nowrap;" class=""><A href="#Nested/Local/Inner_Classes_and_Functions">Nested/Local/Inner Classes and Functions</A></SPAN> <SPAN style="padding-right: 1em; white-space:nowrap;" class=""><A href="#List_Comprehensions">List Comprehensions</A></SPAN> <SPAN style="padding-right: 1em; white-space:nowrap;" class=""><A href="#Default_Iterators_and_Operators">Default Iterators and Operators</A></SPAN> <SPAN style="padding-right: 1em; white-space:nowrap;" class=""><A href="#Generators">Generators</A></SPAN> <SPAN style="padding-right: 1em; white-space:nowrap;" class=""><A href="#Lambda_Functions">Lambda Functions</A></SPAN> <SPAN style="padding-right: 1em; white-space:nowrap;" class=""><A href="#Conditional_Expressions">Conditional Expressions</A></SPAN> <SPAN style="padding-right: 1em; white-space:nowrap;" class=""><A href="#Default_Argument_Values">Default Argument Values</A></SPAN> <SPAN style="padding-right: 1em; white-space:nowrap;" class=""><A href="#Properties">Properties</A></SPAN> <SPAN style="padding-right: 1em; white-space:nowrap;" class=""><A href="#True/False_evaluations">True/False evaluations</A></SPAN> <SPAN style="padding-right: 1em; white-space:nowrap;" class=""><A href="#Deprecated_Language_Features">Deprecated Language Features</A></SPAN> <SPAN style="padding-right: 1em; white-space:nowrap;" class=""><A href="#Lexical_Scoping">Lexical Scoping</A></SPAN> <SPAN style="padding-right: 1em; white-space:nowrap;" class=""><A href="#Function_and_Method_Decorators">Function and Method Decorators</A></SPAN> <SPAN style="padding-right: 1em; white-space:nowrap;" class=""><A href="#Threading">Threading</A></SPAN> <SPAN style="padding-right: 1em; white-space:nowrap;" class=""><A href="#Power_Features">Power Features</A></SPAN> </DIV></TD>
</TR>
<TR valign="top" class="">
<TD><DIV class="toc_category"><A href="#Python_Style_Rules">Python Style Rules</A></DIV></TD>
<TD><DIV class="toc_stylepoint">
<SPAN style="padding-right: 1em; white-space:nowrap;" class=""><A href="#Semicolons">Semicolons</A></SPAN> <SPAN style="padding-right: 1em; white-space:nowrap;" class=""><A href="#Line_length">Line length</A></SPAN> <SPAN style="padding-right: 1em; white-space:nowrap;" class=""><A href="#Parentheses">Parentheses</A></SPAN> <SPAN style="padding-right: 1em; white-space:nowrap;" class=""><A href="#Indentation">Indentation</A></SPAN> <SPAN style="padding-right: 1em; white-space:nowrap;" class=""><A href="#Blank_Lines">Blank Lines</A></SPAN> <SPAN style="padding-right: 1em; white-space:nowrap;" class=""><A href="#Whitespace">Whitespace</A></SPAN> <SPAN style="padding-right: 1em; white-space:nowrap;" class=""><A href="#Shebang_Line">Shebang Line</A></SPAN> <SPAN style="padding-right: 1em; white-space:nowrap;" class=""><A href="#Comments">Comments</A></SPAN> <SPAN style="padding-right: 1em; white-space:nowrap;" class=""><A href="#Classes">Classes</A></SPAN> <SPAN style="padding-right: 1em; white-space:nowrap;" class=""><A href="#Strings">Strings</A></SPAN> <SPAN style="padding-right: 1em; white-space:nowrap;" class=""><A href="#Files_and_Sockets">Files and Sockets</A></SPAN> <SPAN style="padding-right: 1em; white-space:nowrap;" class=""><A href="#TODO_Comments">TODO Comments</A></SPAN> <SPAN style="padding-right: 1em; white-space:nowrap;" class=""><A href="#Imports_formatting">Imports formatting</A></SPAN> <SPAN style="padding-right: 1em; white-space:nowrap;" class=""><A href="#Statements">Statements</A></SPAN> <SPAN style="padding-right: 1em; white-space:nowrap;" class=""><A href="#Access_Control">Access Control</A></SPAN> <SPAN style="padding-right: 1em; white-space:nowrap;" class=""><A href="#Naming">Naming</A></SPAN> <SPAN style="padding-right: 1em; white-space:nowrap;" class=""><A href="#Main">Main</A></SPAN> </DIV></TD>
</TR>
</TABLE>
</DIV>
  <DIV class="">
<H2 name="Important_Note" id="Important_Note">Important Note</H2>
    <DIV class="">
<H3><A name="Displaying_Hidden_Details_in_this_Guide" id="Displaying_Hidden_Details_in_this_Guide">Displaying Hidden Details in this Guide</A></H3>
<SPAN class="link_button" id="link-Displaying_Hidden_Details_in_this_Guide__button" name="link-Displaying_Hidden_Details_in_this_Guide__button"><A href="?showone=Displaying_Hidden_Details_in_this_Guide#Displaying_Hidden_Details_in_this_Guide">
          link
        </A></SPAN><SPAN class="showhide_button" onclick="javascript:ShowHideByName('Displaying_Hidden_Details_in_this_Guide')" name="Displaying_Hidden_Details_in_this_Guide__button" id="Displaying_Hidden_Details_in_this_Guide__button">▶</SPAN>
      <DIV style="display:inline;" class="">
       This style guide contains many details that are initially
       hidden from view.  They are marked by the triangle icon, which you
       see here on your left.  Click it now.
       You should see "Hooray" appear below.
      </DIV>
      <DIV class=""><DIV class="stylepoint_body" name="Displaying_Hidden_Details_in_this_Guide__body" id="Displaying_Hidden_Details_in_this_Guide__body" style="display: none">
       <p>
        Hooray!  Now you know you can expand points to get more
        details.  Alternatively, there's a "toggle all" at the
        top of this document.
       </p>
      </DIV></DIV>
    </DIV>
  </DIV>
  <DIV class="">
<H2 name="Background" id="Background">Background</H2>
    <p>
      Python is the main scripting language used at Google.  This
      style guide is a list of <em>do</em>s and <em>don't</em>s for Python
      programs.
    </p>
    
    <p>
      To help you format code correctly, we've created a <a href="google_python_style.vim">settings
      file for Vim</a>.  For Emacs, the default settings should be fine.
    </p>
    
    
  </DIV>
  
  <DIV class="">
<H2 name="Python_Language_Rules" id="Python_Language_Rules">Python Language Rules</H2>
     <DIV class="">
<H3><A name="Lint" id="Lint">Lint</A></H3>
<SPAN class="link_button" id="link-Lint__button" name="link-Lint__button"><A href="?showone=Lint#Lint">
          link
        </A></SPAN><SPAN class="showhide_button" onclick="javascript:ShowHideByName('Lint')" name="Lint__button" id="Lint__button">▶</SPAN>
      <DIV style="display:inline;" class="">
        Run <code>pylint</code> over your code.
      </DIV>
      <DIV class=""><DIV class="stylepoint_body" name="Lint__body" id="Lint__body" style="display: none">
        <P class="">
<SPAN class="stylepoint_section">Definition:  </SPAN>
        pylint
        is a tool for finding bugs and style problems in Python source
        code. It finds
        problems that are typically caught by a compiler for less dynamic
        languages like C and C++.
        
        Because of the
        dynamic nature of Python, some warnings may be incorrect; however,
        spurious warnings should be fairly infrequent.
        </P>
        <P class="">
<SPAN class="stylepoint_section">Pros:  </SPAN>
        Catches easy-to-miss errors like typos, using-vars-before-assignment, etc.
        </P>
        <P class="">
<SPAN class="stylepoint_section">Cons: </SPAN>
        <code>pylint</code>
        isn't perfect.  To take advantage of it, we'll need to sometimes:
        a) Write around it b) Suppress its warnings or c) Improve it.
        </P>
        <P class="">
<SPAN class="stylepoint_section">Decision:  </SPAN>
        Make sure you run <code>pylint</code> on your code.
        Suppress warnings if they are inappropriate so that other issues are
        not hidden.
        </P>
        
        <p>
          To suppress warnings, you can set a line-level comment:
        </p>
        
        <DIV class=""><PRE>
<span class="external"></span>dict = 'something awful'  # Bad Idea... pylint: disable=redefined-builtin</PRE></DIV>
        <p>
          pylint
          warnings are each identified by a alphanumeric code
          (<code>C0112</code>) and a symbolic name
          (<code>empty-docstring</code>).  Prefer the symbolic
          names in new code or when updating existing code.
          
        </p>
        <p>
          If the reason for the suppression is not clear from the symbolic name,
          add an explanation.
        </p>
        <p>
          Suppressing in this way has the advantage that we can easily search
          for suppressions and revisit them.
        </p>
        <p>
          You can get a list of
          pylint
          warnings by doing
          <code>pylint --list-msgs</code>.
          To get more information on a particular message, use
          <code>pylint --help-msg=C6409</code>.
        </p>
        <p>
          Prefer <code>pylint: disable</code> to the deprecated older form
          <code>pylint: disable-msg</code>.
        </p>
        <p>
        Unused argument warnings can be suppressed by using `_' as the
        identifier for the unused argument or prefixing the argument name with
        `unused_'.  In situations where changing the argument names is
        infeasible, you can mention them at the beginning of the function.
        For example:
        </p>
        <DIV class=""><PRE>
<span class="external"></span>def foo(a, unused_b, unused_c, d=None, e=None):
  <span class="external">  </span>_ = d, e
  <span class="external">  </span>return a
<span class="external"></span>
</PRE></DIV>
      </DIV></DIV>
    </DIV>
    <DIV class="">
<H3><A name="Imports" id="Imports">Imports</A></H3>
<SPAN class="link_button" id="link-Imports__button" name="link-Imports__button"><A href="?showone=Imports#Imports">
          link
        </A></SPAN><SPAN class="showhide_button" onclick="javascript:ShowHideByName('Imports')" name="Imports__button" id="Imports__button">▶</SPAN>
      <DIV style="display:inline;" class="">
        Use <code>import</code>s for packages and modules only.
      </DIV>
      <DIV class=""><DIV class="stylepoint_body" name="Imports__body" id="Imports__body" style="display: none">
        <P class="">
<SPAN class="stylepoint_section">Definition:  </SPAN>
          Reusability mechanism for sharing code from one module to another.
        </P>
        <P class="">
<SPAN class="stylepoint_section">Pros:  </SPAN>
          The namespace management convention is simple.  The source of each
          identifier is indicated in a consistent way; <code>x.Obj</code> says
          that object <code>Obj</code> is defined in module <code>x</code>.
        </P>
        <P class="">
<SPAN class="stylepoint_section">Cons: </SPAN> Module names can still collide.  Some module names are
          inconveniently long.
        </P>
        <P class="">
<SPAN class="stylepoint_section">Decision:  </SPAN>
          Use <code>import x</code> for importing packages and modules.
          <br>
          Use <code>from x import y</code> where <code>x</code> is
          the package prefix and <code>y</code> is the module name with no
          prefix.
          <br>
          Use <code>from x import y as z</code> if two modules named
          <code>y</code> are to be imported or if <code>y</code> is an
          inconveniently long name.
        </P>
        For example the module
        <code>sound.effects.echo</code> may be imported as follows:
    <DIV class=""><PRE>
<span class="external"></span>from sound.effects import echo
<span class="external"></span>...
<span class="external"></span>echo.EchoFilter(input, output, delay=0.7, atten=4)
<span class="external"></span>
</PRE></DIV>
    <p>
      Do not use relative names in imports. Even if the module is in the
      same package, use the full package name.  This helps prevent
      unintentionally importing a package twice.
    </p>
      </DIV></DIV>
    </DIV>
    <DIV class="">
<H3><A name="Packages" id="Packages">Packages</A></H3>
<SPAN class="link_button" id="link-Packages__button" name="link-Packages__button"><A href="?showone=Packages#Packages">
          link
        </A></SPAN><SPAN class="showhide_button" onclick="javascript:ShowHideByName('Packages')" name="Packages__button" id="Packages__button">▶</SPAN>
      <DIV style="display:inline;" class="">
        Import each module using the full pathname location of the module.
      </DIV>
      <DIV class=""><DIV class="stylepoint_body" name="Packages__body" id="Packages__body" style="display: none">
        <P class="">
<SPAN class="stylepoint_section">Pros:  </SPAN>
      Avoids conflicts in module names.  Makes it easier to find modules.
        </P>
        <P class="">
<SPAN class="stylepoint_section">Cons: </SPAN>
      Makes it harder to deploy code because you have to replicate the
      package hierarchy.
        </P>
        <P class="">
<SPAN class="stylepoint_section">Decision:  </SPAN>
          All new code should import each module by its full package name.
        </P>
      <p>
        Imports should be as follows:
      </p>
    
    <DIV class=""><PRE># Reference in code with complete name.
import sound.effects.echo

# Reference in code with just module name (preferred).
from sound.effects import echo
</PRE></DIV>
      </DIV></DIV>
    </DIV>
    <DIV class="">
<H3><A name="Exceptions" id="Exceptions">Exceptions</A></H3>
<SPAN class="link_button" id="link-Exceptions__button" name="link-Exceptions__button"><A href="?showone=Exceptions#Exceptions">
          link
        </A></SPAN><SPAN class="showhide_button" onclick="javascript:ShowHideByName('Exceptions')" name="Exceptions__button" id="Exceptions__button">▶</SPAN>
      <DIV style="display:inline;" class="">
        Exceptions are allowed but must be used carefully.
      </DIV>
      <DIV class=""><DIV class="stylepoint_body" name="Exceptions__body" id="Exceptions__body" style="display: none">
        <P class="">
<SPAN class="stylepoint_section">Definition:  </SPAN>
      Exceptions are a means of breaking out of the normal flow of control
      of a code block to handle errors or other exceptional conditions.
        </P>
        <P class="">
<SPAN class="stylepoint_section">Pros:  </SPAN>
      The control flow of normal operation code is not cluttered by
      error-handling code. It also allows the control flow to skip multiple
      frames when a certain condition occurs, e.g., returning from N
      nested functions in one step instead of having to carry-through
      error codes.
        </P>
        <P class="">
<SPAN class="stylepoint_section">Cons: </SPAN>
      May cause the control flow to be confusing. Easy to miss error
      cases when making library calls.
        </P>
        <P class="">
<SPAN class="stylepoint_section">Decision:  </SPAN>
        
        
      Exceptions must follow certain conditions:
        
        <ul>
          <li>Raise exceptions like this: <code>raise MyException('Error
            message')</code> or <code>raise MyException</code>.  Do not
            use the two-argument form (<code>raise MyException, 'Error
            message'</code>) or deprecated string-based exceptions
            (<code>raise 'Error message'</code>).</li>
          <li>Modules or packages should define their own domain-specific
            base exception class, which should inherit from the built-in
            Exception class.  The base exception for a module should be called
            <code>Error</code>.
            <DIV class=""><PRE>
<span class="external"></span>class Error(Exception):
  <span class="external">  </span>pass</PRE></DIV>
</li>
          <li>Never use catch-all <code>except:</code> statements, or
            catch <code>Exception</code> or <code>StandardError</code>,
            unless you are re-raising the exception or in the outermost
            block in your thread (and printing an error message).  Python
            is very tolerant in this regard and <code>except:</code> will
            really catch everything including misspelled names, sys.exit()
            calls, Ctrl+C interrupts, unittest failures and all kinds of
            other exceptions that you simply don't want to catch.</li>
          <li>Minimize the amount of code in a
            <code>try</code>/<code>except</code> block.  The larger the
            body of the <code>try</code>, the more likely that an
            exception will be raised by a line of code that you didn't
            expect to raise an exception.  In those cases,
            the <code>try</code>/<code>except</code> block hides a real
            error.</li>
          <li>Use the <code>finally</code> clause to execute code whether
            or not an exception is raised in the <code>try</code> block.
            This is often useful for cleanup, i.e., closing a file.</li>
          <li>When capturing an exception, use <code>as</code> rather than
            a comma.  For example:
            <DIV class=""><PRE>
<span class="external"></span>try:
  <span class="external">  </span>raise Error
<span class="external"></span>except Error as error:
  <span class="external">  </span>pass</PRE></DIV>
</li>
        </ul>
        </P>
      </DIV></DIV>
    </DIV>
    <DIV class="">
<H3><A name="Global_variables" id="Global_variables">Global variables</A></H3>
<SPAN class="link_button" id="link-Global_variables__button" name="link-Global_variables__button"><A href="?showone=Global_variables#Global_variables">
          link
        </A></SPAN><SPAN class="showhide_button" onclick="javascript:ShowHideByName('Global_variables')" name="Global_variables__button" id="Global_variables__button">▶</SPAN>
      <DIV style="display:inline;" class="">
        Avoid global variables.
      </DIV>
      <DIV class=""><DIV class="stylepoint_body" name="Global_variables__body" id="Global_variables__body" style="display: none">
        <P class="">
<SPAN class="stylepoint_section">Definition:  </SPAN>
      Variables that are declared at the module level.
        </P>
        <P class="">
<SPAN class="stylepoint_section">Pros:  </SPAN>
      Occasionally useful.
        </P>
        <P class="">
<SPAN class="stylepoint_section">Cons: </SPAN>
      Has the potential to change module behavior during the import,
      because assignments to module-level variables are done when the
      module is imported.
        </P>
        <P class="">
<SPAN class="stylepoint_section">Decision:  </SPAN>
      Avoid global variables in favor of class variables.  Some
      exceptions are:
      <ul>
        <li>Default options for scripts.</li>
        <li>Module-level constants.  For example: <code>PI = 3.14159</code>.
          Constants should be named using all caps with underscores;
          see <a HREF="#Naming">Naming</a> below.</li>
        <li>It is sometimes useful for globals to cache values needed
          or returned by functions.</li>
        <li>If needed, globals should be made internal to the module
          and accessed through public module level functions;
          see <a HREF="#Naming">Naming</a> below.</li>
      </ul>
        </P>
      </DIV></DIV>
    </DIV>
    <DIV class="">
<H3><A name="Nested/Local/Inner_Classes_and_Functions" id="Nested/Local/Inner_Classes_and_Functions">Nested/Local/Inner Classes and Functions</A></H3>
<SPAN class="link_button" id="link-Nested/Local/Inner_Classes_and_Functions__button" name="link-Nested/Local/Inner_Classes_and_Functions__button"><A href="?showone=Nested/Local/Inner_Classes_and_Functions#Nested/Local/Inner_Classes_and_Functions">
          link
        </A></SPAN><SPAN class="showhide_button" onclick="javascript:ShowHideByName('Nested/Local/Inner_Classes_and_Functions')" name="Nested/Local/Inner_Classes_and_Functions__button" id="Nested/Local/Inner_Classes_and_Functions__button">▶</SPAN>
      <DIV style="display:inline;" class="">
        Nested/local/inner classes and functions are fine.
      </DIV>
      <DIV class=""><DIV class="stylepoint_body" name="Nested/Local/Inner_Classes_and_Functions__body" id="Nested/Local/Inner_Classes_and_Functions__body" style="display: none">
        <P class="">
<SPAN class="stylepoint_section">Definition:  </SPAN>
      A class can be defined inside of a method, function, or class.  A
      function can be defined inside a method or function.  Nested functions
      have read-only access to variables defined in enclosing scopes.
        </P>
        <P class="">
<SPAN class="stylepoint_section">Pros:  </SPAN>
      Allows definition of utility classes and functions that are only
      used inside of a very limited scope. Very <a HREF="http://en.wikipedia.org/wiki/Abstract_data_type">ADT</a>-y.
        </P>
        <P class="">
<SPAN class="stylepoint_section">Cons: </SPAN>
      Instances of nested or local classes cannot be pickled.
        </P>
        <P class="">
<SPAN class="stylepoint_section">Decision:  </SPAN>
      They are fine.
        </P>
      </DIV></DIV>
    </DIV>
    <DIV class="">
<H3><A name="List_Comprehensions" id="List_Comprehensions">List Comprehensions</A></H3>
<SPAN class="link_button" id="link-List_Comprehensions__button" name="link-List_Comprehensions__button"><A href="?showone=List_Comprehensions#List_Comprehensions">
          link
        </A></SPAN><SPAN class="showhide_button" onclick="javascript:ShowHideByName('List_Comprehensions')" name="List_Comprehensions__button" id="List_Comprehensions__button">▶</SPAN>
      <DIV style="display:inline;" class="">
        Okay to use for simple cases.
      </DIV>
      <DIV class=""><DIV class="stylepoint_body" name="List_Comprehensions__body" id="List_Comprehensions__body" style="display: none">
        <P class="">
<SPAN class="stylepoint_section">Definition:  </SPAN>
      List comprehensions and generator expressions provide a concise
      and efficient way to create lists and iterators without
      resorting to the use of <code>map()</code>,
      <code>filter()</code>, or <code>lambda</code>.
        </P>
        <P class="">
<SPAN class="stylepoint_section">Pros:  </SPAN>
      Simple list comprehensions can be clearer and simpler than
      other list creation techniques.  Generator expressions can be
      very efficient, since they avoid the creation of a list
      entirely.
        </P>
        <P class="">
<SPAN class="stylepoint_section">Cons: </SPAN>
      Complicated list comprehensions or generator expressions can be
      hard to read.
        </P>
        <P class="">
<SPAN class="stylepoint_section">Decision:  </SPAN>
      Okay to use for simple cases.  Each portion must fit on one line:
      mapping expression, <code>for</code> clause, filter expression.
      Multiple <code>for</code> clauses or filter expressions are not
      permitted.  Use loops instead when things get more complicated.
        </P>

<DIV class=""><PRE>Ye<span class="external"></span>s:
  <span class="external"></span>result = []
  <span class="external"></span>for x in range(10):
    <span class="external">  </span>for y in range(5):
      <span class="external">    </span>if x * y &gt; 10:
        <span class="external">      </span>result.append((x, y))

  <span class="external"></span>for x in xrange(5):
    <span class="external">  </span>for y in xrange(5):
      <span class="external">    </span>if x != y:
        <span class="external">      </span>for z in xrange(5):
          <span class="external">        </span>if y != z:
            <span class="external">          </span>yield (x, y, z)

  <span class="external"></span>return ((x, complicated_transform(x))
  <span class="external"></span>        for x in long_generator_function(parameter)
  <span class="external"></span>        if x is not None)

  <span class="external"></span>squares = [x * x for x in range(10)]

  <span class="external"></span>eat(jelly_bean for jelly_bean in jelly_beans
  <span class="external"></span>    if jelly_bean.color == 'black')</PRE></DIV>
<DIV class=""><PRE class="badcode">No<span class="external"></span>:
  <span class="external"></span>result = [(x, y) for x in range(10) for y in range(5) if x * y &gt; 10]

  <span class="external"></span>return ((x, y, z)
  <span class="external"></span>        for x in xrange(5)
  <span class="external"></span>        for y in xrange(5)
  <span class="external"></span>        if x != y
  <span class="external"></span>        for z in xrange(5)
  <span class="external"></span>        if y != z)</PRE></DIV>
      </DIV></DIV>
    </DIV>
    <DIV class="">
<H3><A name="Default_Iterators_and_Operators" id="Default_Iterators_and_Operators">Default Iterators and Operators</A></H3>
<SPAN class="link_button" id="link-Default_Iterators_and_Operators__button" name="link-Default_Iterators_and_Operators__button"><A href="?showone=Default_Iterators_and_Operators#Default_Iterators_and_Operators">
          link
        </A></SPAN><SPAN class="showhide_button" onclick="javascript:ShowHideByName('Default_Iterators_and_Operators')" name="Default_Iterators_and_Operators__button" id="Default_Iterators_and_Operators__button">▶</SPAN>
      <DIV style="display:inline;" class="">
        Use default iterators and operators for types that support them,
        like lists, dictionaries, and files.
      </DIV>
      <DIV class=""><DIV class="stylepoint_body" name="Default_Iterators_and_Operators__body" id="Default_Iterators_and_Operators__body" style="display: none">
        <P class="">
<SPAN class="stylepoint_section">Definition:  </SPAN>
      Container types, like dictionaries and lists, define default
      iterators and membership test operators ("in" and "not in").
        </P>
        <P class="">
<SPAN class="stylepoint_section">Pros:  </SPAN>
      The default iterators and operators are simple and efficient.
      They express the operation directly, without extra method calls.
      A function that uses default operators is generic. It can be
      used with any type that supports the operation.
        </P>
        <P class="">
<SPAN class="stylepoint_section">Cons: </SPAN>
      You can't tell the type of objects by reading the method names
      (e.g. has_key() means a dictionary).  This is also an advantage.
        </P>
        <P class="">
<SPAN class="stylepoint_section">Decision:  </SPAN> Use default iterators and operators for types
      that support them, like lists, dictionaries, and files.  The
      built-in types define iterator methods, too.  Prefer these
      methods to methods that return lists, except that you should not
      mutate a container while iterating over it.

<DIV class=""><PRE>Yes:  <span class="external"></span>for key in adict: ...
      <span class="external"></span>if key not in adict: ...
      <span class="external"></span>if obj in alist: ...
      <span class="external"></span>for line in afile: ...
      <span class="external"></span>for k, v in dict.iteritems(): ...</PRE></DIV>
<DIV class=""><PRE class="badcode">No:   <span class="external"></span>for key in adict.keys(): ...
      <span class="external"></span>if not adict.has_key(key): ...
      <span class="external"></span>for line in afile.readlines(): ...</PRE></DIV>
        </P>
      </DIV></DIV>
    </DIV>
    <DIV class="">
<H3><A name="Generators" id="Generators">Generators</A></H3>
<SPAN class="link_button" id="link-Generators__button" name="link-Generators__button"><A href="?showone=Generators#Generators">
          link
        </A></SPAN><SPAN class="showhide_button" onclick="javascript:ShowHideByName('Generators')" name="Generators__button" id="Generators__button">▶</SPAN>
      <DIV style="display:inline;" class="">
        Use generators as needed.
      </DIV>
      <DIV class=""><DIV class="stylepoint_body" name="Generators__body" id="Generators__body" style="display: none">
        <P class="">
<SPAN class="stylepoint_section">Definition:  </SPAN>
      A generator function returns an iterator that yields a value each
      time it executes a yield statement.  After it yields a value, the
      runtime state of the generator function is suspended until the
      next value is needed.
        </P>
        <P class="">
<SPAN class="stylepoint_section">Pros:  </SPAN>
      Simpler code, because the state of local variables and control flow
      are preserved for each call.  A generator uses less memory than a
      function that creates an entire list of values at once.
        </P>
        <P class="">
<SPAN class="stylepoint_section">Cons: </SPAN>
          None.
        </P>
        <P class="">
<SPAN class="stylepoint_section">Decision:  </SPAN>
      Fine.  Use "Yields:" rather than "Returns:" in the
      doc string for generator functions.
        </P>
      </DIV></DIV>
    </DIV>
    <DIV class="">
<H3><A name="Lambda_Functions" id="Lambda_Functions">Lambda Functions</A></H3>
<SPAN class="link_button" id="link-Lambda_Functions__button" name="link-Lambda_Functions__button"><A href="?showone=Lambda_Functions#Lambda_Functions">
          link
        </A></SPAN><SPAN class="showhide_button" onclick="javascript:ShowHideByName('Lambda_Functions')" name="Lambda_Functions__button" id="Lambda_Functions__button">▶</SPAN>
      <DIV style="display:inline;" class="">
        Okay for one-liners.
      </DIV>
      <DIV class=""><DIV class="stylepoint_body" name="Lambda_Functions__body" id="Lambda_Functions__body" style="display: none">
        <P class="">
<SPAN class="stylepoint_section">Definition:  </SPAN>
      Lambdas define anonymous functions in an expression, as
      opposed to a statement.  They are often used to define callbacks or
      operators for higher-order functions like <code>map()</code> and
      <code>filter()</code>.
        </P>
        <P class="">
<SPAN class="stylepoint_section">Pros:  </SPAN>
      Convenient.
        </P>
        <P class="">
<SPAN class="stylepoint_section">Cons: </SPAN> Harder to read and debug than local functions.  The
      lack of names means stack traces are more difficult to
      understand.  Expressiveness is limited because the function may
      only contain an expression.
        </P>
        <P class="">
<SPAN class="stylepoint_section">Decision:  </SPAN>
      Okay to use them for one-liners. If the code inside the lambda
      function is any longer than 60–80 chars, it's probably better to
      define it as a regular (nested) function.
       <p>
         For common operations like multiplication, use the functions from the
         <code>operator</code> module instead of lambda functions.  For
         example, prefer <code>operator.mul</code> to <code>lambda
         x, y: x * y</code>.
       </p>
        </P>
      </DIV></DIV>
    </DIV>
    <DIV class="">
<H3><A name="Conditional_Expressions" id="Conditional_Expressions">Conditional Expressions</A></H3>
<SPAN class="link_button" id="link-Conditional_Expressions__button" name="link-Conditional_Expressions__button"><A href="?showone=Conditional_Expressions#Conditional_Expressions">
          link
        </A></SPAN><SPAN class="showhide_button" onclick="javascript:ShowHideByName('Conditional_Expressions')" name="Conditional_Expressions__button" id="Conditional_Expressions__button">▶</SPAN>
      <DIV style="display:inline;" class="">
        Okay for one-liners.
      </DIV>
      <DIV class=""><DIV class="stylepoint_body" name="Conditional_Expressions__body" id="Conditional_Expressions__body" style="display: none">
        <P class="">
<SPAN class="stylepoint_section">Definition:  </SPAN>
      Conditional expressions are mechanisms that provide a shorter syntax
      for if statements. For example:
      <code>x = 1 if cond else 2</code>.
        </P>
        <P class="">
<SPAN class="stylepoint_section">Pros:  </SPAN>
      Shorter and more convenient than an if statement.
        </P>
        <P class="">
<SPAN class="stylepoint_section">Cons: </SPAN>
      May be harder to read than an if statement. The condition may be difficult
      to locate if the expression is long.
        </P>
        <P class="">
<SPAN class="stylepoint_section">Decision:  </SPAN>
      Okay to use for one-liners. In other cases prefer to use a complete if
      statement.
        </P>
      </DIV></DIV>
    </DIV>
    <DIV class="">
<H3><A name="Default_Argument_Values" id="Default_Argument_Values">Default Argument Values</A></H3>
<SPAN class="link_button" id="link-Default_Argument_Values__button" name="link-Default_Argument_Values__button"><A href="?showone=Default_Argument_Values#Default_Argument_Values">
          link
        </A></SPAN><SPAN class="showhide_button" onclick="javascript:ShowHideByName('Default_Argument_Values')" name="Default_Argument_Values__button" id="Default_Argument_Values__button">▶</SPAN>
      <DIV style="display:inline;" class="">
        Okay in most cases.
      </DIV>
      <DIV class=""><DIV class="stylepoint_body" name="Default_Argument_Values__body" id="Default_Argument_Values__body" style="display: none">
        <P class="">
<SPAN class="stylepoint_section">Definition:  </SPAN>
      You can specify values for variables at the end of a function's
      parameter list, e.g., <code>def foo(a, b=0):</code>. If
      <code>foo</code> is called with only one argument,
      <code>b</code> is set to 0. If it is called with two arguments,
      <code>b</code> has the value of the second argument.
        </P>
        <P class="">
<SPAN class="stylepoint_section">Pros:  </SPAN>
      Often you have a function that uses lots of default values,
      but—rarely—you want to override the
      defaults. Default argument values provide an easy way to do this,
      without having to define lots of functions for the rare
      exceptions. Also, Python does not support overloaded
      methods/functions and default arguments are an easy way of
      "faking" the overloading behavior.
        </P>
        <P class="">
<SPAN class="stylepoint_section">Cons: </SPAN>
      Default arguments are evaluated once at module load
      time.  This may cause problems if the argument is a mutable
      object such as a list or a dictionary.  If the function modifies
      the object (e.g., by appending an item to a list), the default
      value is modified.
        </P>
        <P class="">
<SPAN class="stylepoint_section">Decision:  </SPAN>
      Okay to use with the following caveat:
      <p>
        Do not use mutable objects as default values in the function or method
        definition.
      </p>
<DIV class=""><PRE>Yes: <span class="external"></span>def foo(a, b=None):
       <span class="external">  </span>if b is None:
         <span class="external">    </span>b = []</PRE></DIV>
<DIV class=""><PRE class="badcode">No:  <span class="external"></span>def foo(a, b=[]):
       <span class="external">  </span>...
No:  <span class="external"></span>def foo(a, b=time.time()):  # The time the module was loaded???
       <span class="external">  </span>...
No:  <span class="external"></span>def foo(a, b=FLAGS.my_thing):  # sys.argv has not yet been parsed...
       <span class="external">  </span>...</PRE></DIV>
        </P>
      </DIV></DIV>
    </DIV>
    <DIV class="">
<H3><A name="Properties" id="Properties">Properties</A></H3>
<SPAN class="link_button" id="link-Properties__button" name="link-Properties__button"><A href="?showone=Properties#Properties">
          link
        </A></SPAN><SPAN class="showhide_button" onclick="javascript:ShowHideByName('Properties')" name="Properties__button" id="Properties__button">▶</SPAN>
      <DIV style="display:inline;" class="">
        Use properties for accessing or setting data where you would
        normally have used simple, lightweight accessor or setter methods.
      </DIV>
      <DIV class=""><DIV class="stylepoint_body" name="Properties__body" id="Properties__body" style="display: none">
        <P class="">
<SPAN class="stylepoint_section">Definition:  </SPAN> A way to wrap method calls for getting and
      setting an attribute as a standard attribute access when the
      computation is lightweight.
        </P>
        <P class="">
<SPAN class="stylepoint_section">Pros:  </SPAN> Readability is increased by eliminating explicit
      get and set method calls for simple attribute access.  Allows
      calculations to be lazy.  Considered the Pythonic way to
      maintain the interface of a class.  In terms of performance,
      allowing properties bypasses needing trivial accessor methods
      when a direct variable access is reasonable. This also allows
      accessor methods to be added in the future without breaking the
      interface.
        </P>
        <P class="">
<SPAN class="stylepoint_section">Cons: </SPAN> Properties are specified after the getter and
      setter methods are declared, requiring one to notice they are
      used for properties farther down in the code (except for readonly
      properties created with the <code>@property</code> decorator - see
      below).  Must inherit from
      <code>object</code>.  Can hide side-effects much like operator
      overloading.  Can be confusing for subclasses.
        </P>
        <P class="">
<SPAN class="stylepoint_section">Decision:  </SPAN> Use properties in new code to access or
      set data where you would normally have used simple, lightweight
      accessor or setter methods.  Read-only properties should be created
      with the <code>@property</code>
      <a HREF="#Function_and_Method_Decorators">decorator</a>.

     <p><a id="properties-template-dp">
      Inheritance with properties can be non-obvious if the property itself is
      not overridden.  Thus one must make sure that accessor methods are
      called indirectly to ensure methods overridden in subclasses are called
      by the property (using the Template Method DP).
     </a></p>

     <DIV class=""><PRE>Yes: <span class="external"></span>import math

     <span class="external"></span>class Square(object):
       <span class="external">  </span>"""A square with two properties: a writable area and a read-only perimeter.

       <span class="external">  </span>To use:
       <span class="external">  </span>&gt;&gt;&gt; sq = Square(3)
       <span class="external">  </span>&gt;&gt;&gt; sq.area
       <span class="external">  </span>9
       <span class="external">  </span>&gt;&gt;&gt; sq.perimeter
       <span class="external">  </span>12
       <span class="external">  </span>&gt;&gt;&gt; sq.area = 16
       <span class="external">  </span>&gt;&gt;&gt; sq.side
       <span class="external">  </span>4
       <span class="external">  </span>&gt;&gt;&gt; sq.perimeter
       <span class="external">  </span>16
       <span class="external">  </span>"""

       <span class="external">  </span>def __init__(self, side):
         <span class="external">    </span>self.side = side

       <span class="external">  </span>def __get_area(self):
         <span class="external">    </span>"""Calculates the 'area' property."""
         <span class="external">    </span>return self.side ** 2

       <span class="external">  </span>def ___get_area(self):
         <span class="external">    </span>"""Indirect accessor for 'area' property."""
         <span class="external">    </span>return self.__get_area()

       <span class="external">  </span>def __set_area(self, area):
         <span class="external">    </span>"""Sets the 'area' property."""
         <span class="external">    </span>self.side = math.sqrt(area)

       <span class="external">  </span>def ___set_area(self, area):
         <span class="external">    </span>"""Indirect setter for 'area' property."""
         <span class="external">    </span>self.__set_area(area)

       <span class="external">  </span>area = property(___get_area, ___set_area,
       <span class="external">  </span>                doc="""Gets or sets the area of the square.""")

       <span class="external">  </span>@property
       <span class="external">  </span>def perimeter(self):
         <span class="external">    </span>return self.side * 4
<span class="external"></span>
</PRE></DIV>
        </P>
      </DIV></DIV>
    </DIV>
    <DIV class="">
<H3><A name="True/False_evaluations" id="True/False_evaluations">True/False evaluations</A></H3>
<SPAN class="link_button" id="link-True/False_evaluations__button" name="link-True/False_evaluations__button"><A href="?showone=True/False_evaluations#True/False_evaluations">
          link
        </A></SPAN><SPAN class="showhide_button" onclick="javascript:ShowHideByName('True/False_evaluations')" name="True/False_evaluations__button" id="True/False_evaluations__button">▶</SPAN>
      <DIV style="display:inline;" class="">
        Use the "implicit" false if at all possible.
      </DIV>
      <DIV class=""><DIV class="stylepoint_body" name="True/False_evaluations__body" id="True/False_evaluations__body" style="display: none">
        <P class="">
<SPAN class="stylepoint_section">Definition:  </SPAN> Python evaluates certain values as <code>false</code>
      when in a boolean context. A quick "rule of thumb" is that all
      "empty" values are considered <code>false</code> so <code>0, None, [], {},
      ''</code> all evaluate as <code>false</code> in a boolean context.
        </P>
        <P class="">
<SPAN class="stylepoint_section">Pros:  </SPAN> Conditions using Python booleans are easier to read
      and less error-prone. In most cases, they're also faster.
        </P>
        <P class="">
<SPAN class="stylepoint_section">Cons: </SPAN>
      May look strange to C/C++ developers.
        </P>
        <P class="">
<SPAN class="stylepoint_section">Decision:  </SPAN>
      Use the "implicit" false if at all possible, e.g., <code>if
      foo:</code> rather than <code>if foo != []:</code>.  There are a
      few caveats that you should keep in mind though:
    <ul>
      <li>
        Never use <code>==</code> or <code>!=</code> to compare
        singletons like <code>None</code>.  Use <code>is</code>
        or <code>is not</code>.</li>

      <li>Beware of writing <code>if x:</code> when you really mean
        <code>if x is not None:</code>—e.g., when testing whether
        a variable or argument that defaults to <code>None</code> was
        set to some other value.  The other value might be a value
        that's false in a boolean context!</li>

      <li>
        Never compare a boolean variable to <code>False</code> using
        <code>==</code>.  Use <code>if not x:</code> instead. If
        you need to distinguish <code>False</code> from
        <code>None</code> then chain the expressions,
        such as <code>if not x and x is not None:</code>.
        </li>

      <li>
        For sequences (strings, lists, tuples), use the fact that
        empty sequences are false, so <code>if not seq:</code> or
        <code>if seq:</code> is preferable to <code>if
        len(seq):</code> or <code>if not
          len(seq):</code>.</li>

      <li>
        When handling integers, implicit false may involve more risk than
        benefit (i.e., accidentally handling <code>None</code> as 0).  You may
        compare a value which is known to be an integer (and is not the
        result of <code>len()</code>) against the integer 0.
<DIV class=""><PRE>Yes: <span class="external"></span>if not users:
       <span class="external">  </span>print 'no users'

     <span class="external"></span>if foo == 0:
       <span class="external">  </span>self.handle_zero()

     <span class="external"></span>if i % 10 == 0:
       <span class="external">  </span>self.handle_multiple_of_ten()</PRE></DIV>
<DIV class=""><PRE class="badcode">No:  <span class="external"></span>if len(users) == 0:
       <span class="external">  </span>print 'no users'

     <span class="external"></span>if foo is not None and not foo:
       <span class="external">  </span>self.handle_zero()

     <span class="external"></span>if not i % 10:
       <span class="external">  </span>self.handle_multiple_of_ten()</PRE></DIV>
</li>

      <li>
        Note that <code>'0'</code> (i.e., <code>0</code> as string)
        evaluates to true.</li>
    </ul>
        </P>
      </DIV></DIV>
    </DIV>
    <DIV class="">
<H3><A name="Deprecated_Language_Features" id="Deprecated_Language_Features">Deprecated Language Features</A></H3>
<SPAN class="link_button" id="link-Deprecated_Language_Features__button" name="link-Deprecated_Language_Features__button"><A href="?showone=Deprecated_Language_Features#Deprecated_Language_Features">
          link
        </A></SPAN><SPAN class="showhide_button" onclick="javascript:ShowHideByName('Deprecated_Language_Features')" name="Deprecated_Language_Features__button" id="Deprecated_Language_Features__button">▶</SPAN>
      <DIV style="display:inline;" class="">
        Use string methods instead of the <code>string</code> module
        where possible.  Use function call syntax instead
        of <code>apply</code>.  Use list comprehensions
        and <code>for</code> loops instead of <code>filter</code> and
        <code>map</code> when the function argument would have been an
        inlined lambda anyway.  Use <code>for</code> loops instead of
        <code>reduce</code>.
      </DIV>
      <DIV class=""><DIV class="stylepoint_body" name="Deprecated_Language_Features__body" id="Deprecated_Language_Features__body" style="display: none">
        <P class="">
<SPAN class="stylepoint_section">Definition:  </SPAN>
          Current versions of Python provide alternative constructs
          that people find generally preferable.
        </P>
        <P class="">
<SPAN class="stylepoint_section">Decision:  </SPAN>
          We do not use any Python version which does not support
          these features, so there is no reason not to use the new
          styles.
<DIV class=""><PRE>Yes: <span class="external"></span>words = foo.split(':')

     <span class="external"></span>[x[1] for x in my_list if x[2] == 5]

     <span class="external"></span>map(math.sqrt, data)    # Ok. No inlined lambda expression.

     <span class="external"></span>fn(*args, **kwargs)</PRE></DIV>
<DIV class=""><PRE class="badcode">No:  <span class="external"></span>words = string.split(foo, ':')

     <span class="external"></span>map(lambda x: x[1], filter(lambda x: x[2] == 5, my_list))

     <span class="external"></span>apply(fn, args, kwargs)</PRE></DIV>
        </P>
      </DIV></DIV>
    </DIV>
    <DIV class="">
<H3><A name="Lexical_Scoping" id="Lexical_Scoping">Lexical Scoping</A></H3>
<SPAN class="link_button" id="link-Lexical_Scoping__button" name="link-Lexical_Scoping__button"><A href="?showone=Lexical_Scoping#Lexical_Scoping">
          link
        </A></SPAN><SPAN class="showhide_button" onclick="javascript:ShowHideByName('Lexical_Scoping')" name="Lexical_Scoping__button" id="Lexical_Scoping__button">▶</SPAN>
      <DIV style="display:inline;" class="">
        Okay to use.
      </DIV>
      <DIV class=""><DIV class="stylepoint_body" name="Lexical_Scoping__body" id="Lexical_Scoping__body" style="display: none">
        <P class="">
<SPAN class="stylepoint_section">Definition:  </SPAN>
      A nested Python function can refer to variables defined in
      enclosing functions, but can not assign to them.  Variable
      bindings are resolved using lexical scoping, that is, based on
      the static program text.  Any assignment to a name in a block
      will cause Python to treat all references to that name as a
      local variable, even if the use precedes the assignment.  If a
      global declaration occurs, the name is treated as a global
      variable.

    <p>
      An example of the use of this feature is:
    </p>

    <DIV class=""><PRE>
<span class="external"></span>def get_adder(summand1):
  <span class="external">  </span>"""Returns a function that adds numbers to a given number."""
  <span class="external">  </span>def adder(summand2):
    <span class="external">    </span>return summand1 + summand2

  <span class="external">  </span>return adder
<span class="external"></span>
</PRE></DIV>
        </P>
        <P class="">
<SPAN class="stylepoint_section">Pros:  </SPAN>
      Often results in clearer, more elegant code.  Especially comforting
      to experienced Lisp and Scheme (and Haskell and ML and …)
      programmers.
        </P>
        <P class="">
<SPAN class="stylepoint_section">Cons: </SPAN>
      Can lead to confusing bugs. Such as this example based on
      <a HREF="http://www.python.org/dev/peps/pep-0227/">PEP-0227</a>:
<DIV class=""><PRE class="badcode">
<span class="external"></span>i = 4
<span class="external"></span>def foo(x):
  <span class="external">  </span>def bar():
    <span class="external">    </span>print i,
  <span class="external">  </span># ...
  <span class="external">  </span># A bunch of code here
  <span class="external">  </span># ...
  <span class="external">  </span>for i in x:  # Ah, i *is* local to Foo, so this is what Bar sees
    <span class="external">    </span>print i,
  <span class="external">  </span>bar()</PRE></DIV>
      <p>
        So <code>foo([1, 2, 3])</code> will print <code>1 2 3 3</code>, not
        <code>1 2 3 4</code>.
      </p>
        </P>
        <P class="">
<SPAN class="stylepoint_section">Decision:  </SPAN>
      Okay to use.
        </P>
      </DIV></DIV>
    </DIV>
    <DIV class="">
<H3><A name="Function_and_Method_Decorators" id="Function_and_Method_Decorators">Function and Method Decorators</A></H3>
<SPAN class="link_button" id="link-Function_and_Method_Decorators__button" name="link-Function_and_Method_Decorators__button"><A href="?showone=Function_and_Method_Decorators#Function_and_Method_Decorators">
          link
        </A></SPAN><SPAN class="showhide_button" onclick="javascript:ShowHideByName('Function_and_Method_Decorators')" name="Function_and_Method_Decorators__button" id="Function_and_Method_Decorators__button">▶</SPAN>
      <DIV style="display:inline;" class="">
        Use decorators judiciously when there is a clear advantage.
      </DIV>
      <DIV class=""><DIV class="stylepoint_body" name="Function_and_Method_Decorators__body" id="Function_and_Method_Decorators__body" style="display: none">
        <P class="">
<SPAN class="stylepoint_section">Definition:  </SPAN>
      
      <a HREF="http://www.python.org/doc/2.4.3/whatsnew/node6.html">Decorators
       for Functions and Methods</a>
      (a.k.a "the <code>@</code> notation").
      The most common decorators are <code>@classmethod</code> and
      <code>@staticmethod</code>, for converting ordinary methods to class or
      static methods. However, the decorator syntax allows for
      user-defined decorators as well. Specifically, for some function
      <code>my_decorator</code>, this:
      <DIV class=""><PRE>
<span class="external"></span>class C(object):
  <span class="external">  </span>@my_decorator
  <span class="external">  </span>def method(self):
    <span class="external">    </span># method body ...
<span class="external"></span>
</PRE></DIV>

      is equivalent to:
      <DIV class=""><PRE>
<span class="external"></span>class C(object):
  <span class="external">  </span>def method(self):
    <span class="external">    </span># method body ...
  <span class="external">  </span>method = my_decorator(method)
<span class="external"></span>
</PRE></DIV>
        </P>
        <P class="">
<SPAN class="stylepoint_section">Pros:  </SPAN> Elegantly specifies some transformation on a method; the
      transformation might eliminate some repetitive code, enforce invariants,
      etc.
        </P>
        <P class="">
<SPAN class="stylepoint_section">Cons: </SPAN> Decorators can perform arbitrary operations on a
      function's arguments or return values, resulting in surprising
      implicit behavior.
      Additionally, decorators execute at import time.  Failures in decorator
      code are pretty much impossible to recover from.
        </P>
        <P class="">
<SPAN class="stylepoint_section">Decision:  </SPAN> Use decorators judiciously when there is a clear
      advantage.  Decorators should follow the same import and naming
      guidelines as functions.  Decorator pydoc should clearly state that the
      function is a decorator.  Write unit tests for decorators.

    <p>
      Avoid external dependencies in the decorator itself (e.g. don't rely on
      files, sockets, database connections, etc.), since they might not be
      available when the decorator runs (at import time, perhaps from
      <code>pydoc</code> or other tools).  A decorator that is
      called with valid parameters should (as much as possible) be guaranteed
      to succeed in all cases.
    </p>
    <p>
      Decorators are a special case of "top level code" - see
      <a HREF="#Main">main</a> for more discussion.
    </p>
        </P>
      </DIV></DIV>
    </DIV>
    <DIV class="">
<H3><A name="Threading" id="Threading">Threading</A></H3>
<SPAN class="link_button" id="link-Threading__button" name="link-Threading__button"><A href="?showone=Threading#Threading">
          link
        </A></SPAN><SPAN class="showhide_button" onclick="javascript:ShowHideByName('Threading')" name="Threading__button" id="Threading__button">▶</SPAN>
      <DIV style="display:inline;" class="">
        Do not rely on the atomicity of built-in types.
      </DIV>
      <DIV class=""><DIV class="stylepoint_body" name="Threading__body" id="Threading__body" style="display: none">
        <p>
          While Python's built-in data types such as dictionaries appear
          to have atomic operations, there are corner cases where they
          aren't atomic (e.g. if <code>__hash__</code> or
          <code>__eq__</code> are implemented as Python methods) and their
          atomicity should not be relied upon.  Neither should you rely on
          atomic variable assignment (since this in turn depends on
          dictionaries).
        </p>

        <p>
          Use the Queue module's <code>Queue</code> data type as the preferred
          way to
          communicate data between threads.  Otherwise, use the threading
          module and its locking primitives.  Learn about the proper use
          of condition variables so you can use
          <code>threading.Condition</code> instead of using lower-level
          locks.
        </p>
      </DIV></DIV>
    </DIV>
    <DIV class="">
<H3><A name="Power_Features" id="Power_Features">Power Features</A></H3>
<SPAN class="link_button" id="link-Power_Features__button" name="link-Power_Features__button"><A href="?showone=Power_Features#Power_Features">
          link
        </A></SPAN><SPAN class="showhide_button" onclick="javascript:ShowHideByName('Power_Features')" name="Power_Features__button" id="Power_Features__button">▶</SPAN>
      <DIV style="display:inline;" class="">
        Avoid these features.
      </DIV>
      <DIV class=""><DIV class="stylepoint_body" name="Power_Features__body" id="Power_Features__body" style="display: none">
        <P class="">
<SPAN class="stylepoint_section">Definition:  </SPAN> Python is an extremely flexible language and
      gives you many fancy features such as metaclasses, access to bytecode,
      on-the-fly compilation, dynamic inheritance, object reparenting,
      import hacks, reflection, modification of system internals,
      etc.
        </P>
        <P class="">
<SPAN class="stylepoint_section">Pros:  </SPAN> These are powerful language features.  They can
      make your code more compact.
        </P>
        <P class="">
<SPAN class="stylepoint_section">Cons: </SPAN> It's very tempting to use these "cool" features
      when they're not absolutely necessary.  It's harder to read,
      understand, and debug code that's using unusual features
      underneath.  It doesn't seem that way at first (to the original
      author), but when revisiting the code, it tends to be more
      difficult than code that is longer but is straightforward.
        </P>
        <P class="">
<SPAN class="stylepoint_section">Decision:  </SPAN>
          Avoid these features in 
          your code.
        </P>
      </DIV></DIV>
    </DIV>
  </DIV>
  <DIV class="">
<H2 name="Python_Style_Rules" id="Python_Style_Rules">Python Style Rules</H2>
    <DIV class="">
<H3><A name="Semicolons" id="Semicolons">Semicolons</A></H3>
<SPAN class="link_button" id="link-Semicolons__button" name="link-Semicolons__button"><A href="?showone=Semicolons#Semicolons">
          link
        </A></SPAN><SPAN class="showhide_button" onclick="javascript:ShowHideByName('Semicolons')" name="Semicolons__button" id="Semicolons__button">▶</SPAN>
      <DIV style="display:inline;" class="">
        Do not terminate your lines with semi-colons and do not use
        semi-colons to put two commands on the same line.
      </DIV>
      <DIV class=""><DIV class="stylepoint_body" name="Semicolons__body" id="Semicolons__body" style="display: none">
      </DIV></DIV>
    </DIV>
    <DIV class="">
<H3><A name="Line_length" id="Line_length">Line length</A></H3>
<SPAN class="link_button" id="link-Line_length__button" name="link-Line_length__button"><A href="?showone=Line_length#Line_length">
          link
        </A></SPAN><SPAN class="showhide_button" onclick="javascript:ShowHideByName('Line_length')" name="Line_length__button" id="Line_length__button">▶</SPAN>
      <DIV style="display:inline;" class="">
        Maximum line length is <em>80 characters</em>.
      </DIV>
      <DIV class=""><DIV class="stylepoint_body" name="Line_length__body" id="Line_length__body" style="display: none">
    <p>
      Exceptions:
      <ul>
        <li>Long import statements.</li>
        <li>URLs in comments.</li>
        
      </ul>
    </p>

    <p>
      Do not use backslash line continuation.
    </p>

    <p>
      Make use of Python's
      
      <a HREF="http://docs.python.org/reference/lexical_analysis.html#implicit-line-joining">implicit
      line joining inside parentheses, brackets and braces</a>.
      If necessary, you can add an extra pair of parentheses around an
      expression.
    </p>

    
    <DIV class=""><PRE>Yes: foo_bar(self, width, height, color='black', design=None, x='foo',
             emphasis=None, highlight=0)

     if (width == 0 and height == 0 and
         color == 'red' and emphasis == 'strong'):</PRE></DIV>


    <p>
      When a literal string won't fit on a single line, use parentheses for
      implicit line joining.
    </p>

    <DIV class=""><PRE>
<span class="external"></span>x = ('This will build a very long long '
<span class="external"></span>     'long long long long long long string')</PRE></DIV>

    <p>
      Within comments, put long URLs on their own line if necessary.
    </p>

    <DIV class=""><PRE>Yes:  <span class="external"></span># See details at
      <span class="external"></span># http://www.example.com/us/developer/documentation/api/content/v2.0/csv_file_name_extension_full_specification.html</PRE></DIV>

    <DIV class=""><PRE class="badcode">No:  <span class="external"></span># See details at
     <span class="external"></span># http://www.example.com/us/developer/documentation/api/content/\
     <span class="external"></span># v2.0/csv_file_name_extension_full_specification.html</PRE></DIV>

    <p>
      Make note of the indentation of the elements in the line
      continuation examples above; see the
      <a HREF="#Indentation">indentation</a>
      section for explanation.
    </p>
      </DIV></DIV>
    </DIV>
    <DIV class="">
<H3><A name="Parentheses" id="Parentheses">Parentheses</A></H3>
<SPAN class="link_button" id="link-Parentheses__button" name="link-Parentheses__button"><A href="?showone=Parentheses#Parentheses">
          link
        </A></SPAN><SPAN class="showhide_button" onclick="javascript:ShowHideByName('Parentheses')" name="Parentheses__button" id="Parentheses__button">▶</SPAN>
      <DIV style="display:inline;" class="">
        Use parentheses sparingly.
      </DIV>
      <DIV class=""><DIV class="stylepoint_body" name="Parentheses__body" id="Parentheses__body" style="display: none">
    <p>
      Do not use them in return statements or conditional statements unless
      using parentheses for implied line continuation. (See above.)
      It is however fine to use parentheses around tuples.
    </p>

<DIV class=""><PRE>Yes: <span class="external"></span>if foo:
       <span class="external">  </span>bar()
     <span class="external"></span>while x:
       <span class="external">  </span>x = bar()
     <span class="external"></span>if x and y:
       <span class="external">  </span>bar()
     <span class="external"></span>if not x:
       <span class="external">  </span>bar()
     <span class="external"></span>return foo
     <span class="external"></span>for (x, y) in dict.items(): ...</PRE></DIV>
<DIV class=""><PRE class="badcode">No:  <span class="external"></span>if (x):
       <span class="external">  </span>bar()
     <span class="external"></span>if not(x):
       <span class="external">  </span>bar()
     <span class="external"></span>return (foo)</PRE></DIV>
      </DIV></DIV>
    </DIV>
    <DIV class="">
<H3><A name="Indentation" id="Indentation">Indentation</A></H3>
<SPAN class="link_button" id="link-Indentation__button" name="link-Indentation__button"><A href="?showone=Indentation#Indentation">
          link
        </A></SPAN><SPAN class="showhide_button" onclick="javascript:ShowHideByName('Indentation')" name="Indentation__button" id="Indentation__button">▶</SPAN>
      <DIV style="display:inline;" class="">
        Indent your code blocks with <em>4 spaces</em>.
      </DIV>
      <DIV class=""><DIV class="stylepoint_body" name="Indentation__body" id="Indentation__body" style="display: none">
    <p>
      Never use tabs or mix tabs and spaces.
      In cases of implied line continuation, you should align wrapped elements
      either vertically, as per the examples in the
      <a HREF="#Line_length">line length</a> section; or using a hanging
      indent of 4 spaces, in which case there should be no argument on
      the first line.
    </p>


<DIV class=""><PRE>Yes:   # Aligned with opening delimiter
       foo = long_function_name(var_one, var_two,
                                var_three, var_four)

       # Aligned with opening delimiter in a dictionary
       foo = {
           long_dictionary_key: value1 +
                                value2,
           ...
       }

       # 4-space hanging indent; nothing on first line
       foo = long_function_name(
           var_one, var_two, var_three,
           var_four)

       # 4-space hanging indent in a dictionary
       foo = {
           long_dictionary_key:
               long_dictionary_value,
           ...
       }</PRE></DIV>
<DIV class=""><PRE class="badcode">No:    <span class="external"></span># Stuff on first line forbidden
       <span class="external"></span>foo = long_function_name(var_one, var_two,
       <span class="external"></span>    var_three, var_four)

       <span class="external"></span># 2-space hanging indent forbidden
       <span class="external"></span>foo = long_function_name(
       <span class="external"></span>  var_one, var_two, var_three,
       <span class="external"></span>  var_four)

       <span class="external"></span># No hanging indent in a dictionary
       <span class="external"></span>foo = {
       <span class="external"></span>    long_dictionary_key:
           <span class="external">    </span>long_dictionary_value,
           <span class="external">    </span>...
       <span class="external"></span>}</PRE></DIV>
      </DIV></DIV>
    </DIV>
    <DIV class="">
<H3><A name="Blank_Lines" id="Blank_Lines">Blank Lines</A></H3>
<SPAN class="link_button" id="link-Blank_Lines__button" name="link-Blank_Lines__button"><A href="?showone=Blank_Lines#Blank_Lines">
          link
        </A></SPAN><SPAN class="showhide_button" onclick="javascript:ShowHideByName('Blank_Lines')" name="Blank_Lines__button" id="Blank_Lines__button">▶</SPAN>
      <DIV style="display:inline;" class="">
        Two blank lines between top-level definitions, one blank line
        between method definitions.
      </DIV>
      <DIV class=""><DIV class="stylepoint_body" name="Blank_Lines__body" id="Blank_Lines__body" style="display: none">
    <p>
      Two blank lines between top-level definitions, be they function
      or class definitions.  One blank line between method definitions
      and between the <code>class</code> line and the first method.
      Use single blank lines as you judge appropriate within functions or
      methods.
    </p>
      </DIV></DIV>
    </DIV>
    <DIV class="">
<H3><A name="Whitespace" id="Whitespace">Whitespace</A></H3>
<SPAN class="link_button" id="link-Whitespace__button" name="link-Whitespace__button"><A href="?showone=Whitespace#Whitespace">
          link
        </A></SPAN><SPAN class="showhide_button" onclick="javascript:ShowHideByName('Whitespace')" name="Whitespace__button" id="Whitespace__button">▶</SPAN>
      <DIV style="display:inline;" class="">
        Follow standard typographic rules for the use of spaces around
        punctuation.
      </DIV>
      <DIV class=""><DIV class="stylepoint_body" name="Whitespace__body" id="Whitespace__body" style="display: none">
    <p>
      No whitespace inside parentheses, brackets or braces.
    </p>
<DIV class=""><PRE>Yes: <span class="external"></span>spam(ham[1], {eggs: 2}, [])</PRE></DIV>
<DIV class=""><PRE class="badcode">No:  <span class="external"></span>spam( ham[ 1 ], { eggs: 2 }, [ ] )</PRE></DIV>
    <p>
      No whitespace before a comma, semicolon, or colon.  Do use
      whitespace after a comma, semicolon, or colon except at the end
      of the line.
    </p>
<DIV class=""><PRE>Yes: <span class="external"></span>if x == 4:
       <span class="external">  </span>print x, y
     <span class="external"></span>x, y = y, x</PRE></DIV>
<DIV class=""><PRE class="badcode">No:  <span class="external"></span>if x == 4 :
       <span class="external">  </span>print x , y
     <span class="external"></span>x , y = y , x</PRE></DIV>
    <p>
      No whitespace before the open paren/bracket that starts an argument list,
      indexing or slicing.
    </p>
    <DIV class=""><PRE>Yes: <span class="external"></span>spam(1)</PRE></DIV>
<DIV class=""><PRE class="badcode">No:  <span class="external"></span>spam (1)</PRE></DIV>
<DIV class=""><PRE>Yes: <span class="external"></span>dict['key'] = list[index]</PRE></DIV>
<DIV class=""><PRE class="badcode">No:  <span class="external"></span>dict ['key'] = list [index]</PRE></DIV>

    <p>
      Surround binary operators with a single space on either side for
      assignment (<code>=</code>), comparisons (<code>==, &lt;, &gt;, !=,
        &lt;&gt;, &lt;=, &gt;=, in, not in, is, is not</code>), and Booleans
      (<code>and, or, not</code>).  Use your better judgment for the
      insertion of spaces around arithmetic operators but always be
      consistent about whitespace on either side of a binary operator.
    </p>
<DIV class=""><PRE>Yes: <span class="external"></span>x == 1</PRE></DIV>
<DIV class=""><PRE class="badcode">No:  <span class="external"></span>x&lt;1</PRE></DIV>
    <p>
      Don't use spaces around the '=' sign when used to indicate a
      keyword argument or a default parameter value.
    </p>
<DIV class=""><PRE>Yes: <span class="external"></span>def complex(real, imag=0.0): return magic(r=real, i=imag)</PRE></DIV>
<DIV class=""><PRE class="badcode">No:  <span class="external"></span>def complex(real, imag = 0.0): return magic(r = real, i = imag)</PRE></DIV>

    <p>
      Don't use spaces to vertically align tokens on consecutive lines, since it
      becomes a maintenance burden (applies to <code>:</code>, <code>#</code>,
      <code>=</code>, etc.):
    </p>
<DIV class=""><PRE>Yes:
  foo = 1000  # comment
  long_name = 2  # comment that should not be aligned

  dictionary = {
      'foo': 1,
      'long_name': 2,
  }</PRE></DIV>
<DIV class=""><PRE class="badcode">No:
  foo       = 1000  # comment
  long_name = 2     # comment that should not be aligned

  dictionary = {
      'foo'      : 1,
      'long_name': 2,
  }</PRE></DIV>

    
      </DIV></DIV>
    </DIV>

    <a name="Python_Interpreter"></a>
    <DIV class="">
<H3><A name="Shebang_Line" id="Shebang_Line">Shebang Line</A></H3>
<SPAN class="link_button" id="link-Shebang_Line__button" name="link-Shebang_Line__button"><A href="?showone=Shebang_Line#Shebang_Line">
          link
        </A></SPAN><SPAN class="showhide_button" onclick="javascript:ShowHideByName('Shebang_Line')" name="Shebang_Line__button" id="Shebang_Line__button">▶</SPAN>
      <DIV style="display:inline;" class="">
        Most <code>.py</code> files do not need to start with a
        <code>#!</code> line.  Start the main file of a
         program with
        <code>#!/usr/bin/python</code> with an optional single digit
        <code>2</code> or <code>3</code> suffix per
        <a href="http://www.python.org/dev/peps/pep-0394/">PEP-394</a>.
      </DIV>
      <DIV class=""><DIV class="stylepoint_body" name="Shebang_Line__body" id="Shebang_Line__body" style="display: none">
        
        <p>
          This line is used by the kernel to find the Python interpreter, but is
          ignored by Python when importing modules.  It is only necessary on a
          file that will be executed directly.
        </p>
      </DIV></DIV>
    </DIV>

    <DIV class="">
<H3><A name="Comments" id="Comments">Comments</A></H3>
<SPAN class="link_button" id="link-Comments__button" name="link-Comments__button"><A href="?showone=Comments#Comments">
          link
        </A></SPAN><SPAN class="showhide_button" onclick="javascript:ShowHideByName('Comments')" name="Comments__button" id="Comments__button">▶</SPAN>
      <DIV style="display:inline;" class="">
        Be sure to use the right style for module, function, method and in-line
        comments.
      </DIV>
      <DIV class=""><DIV class="stylepoint_body" name="Comments__body" id="Comments__body" style="display: none">

    <P class="">
<SPAN class="stylepoint_subsection">Doc Strings</SPAN>

    <p>
      Python has a unique commenting style using doc strings.  A doc
      string is a string that is the first statement in a package,
      module, class or function.  These strings can be extracted
      automatically through the <code>__doc__</code> member of the
      object and are used by <code>pydoc</code>.  (Try running
      <code>pydoc</code> on your module to see how it looks.)  We
      always use the three double-quote <code>"""</code> format for doc strings
      (per <a href="http://www.python.org/dev/peps/pep-0257/">PEP 257</a>).
      A doc string should be organized as a
      summary line (one physical line) terminated by a period,
      question mark, or exclamation point, followed by a blank line,
      followed by the rest of the doc string starting at the same
      cursor position as the first quote of the first line.  There are
      more formatting guidelines for doc strings below.
    </p>

    </P>
    <P class="">
<SPAN class="stylepoint_subsection">Modules</SPAN>

    
    
    <p>
      Every file should contain license boilerplate.
      Choose the appropriate boilerplate for the license used by the project
      (for example, Apache 2.0, BSD, LGPL, GPL)
    </p>
    </P>
    <P class="">
<SPAN class="stylepoint_subsection">Functions and Methods</SPAN>

    <p>
      As used in this section "function" applies to methods, function, and
      generators.
    </p>

    <p>
      A function must have a docstring, unless it meets all of the following
      criteria:
      <ul>
        <li>not externally visible</li>
        <li>very short</li>
        <li>obvious</li>
      </ul>
    </p>

    <p>
      A docstring should give enough information to write a call to the function
      without reading the function's code.  A docstring should describe the
      function's calling syntax and its semantics, not its implementation.  For
      tricky code, comments alongside the code are more appropriate than using
      docstrings.
    </p>

    <p>
      Certain aspects of a function should be documented in special sections,
      listed below. Each section begins with a heading line, which ends with a
      colon. Sections should be indented two spaces, except for the heading.
    </p>

    <dl>
      <dt>Args:</dt>
      <dd>
        List each parameter by name. A description should follow the name, and
        be separated by a colon and a space. If the description is too long to
        fit on a single 80-character line, use a hanging indent of 2 or 4 spaces
        (be consistent with the rest of the file).

        <p>
          The description should mention required type(s) and the meaning of
          the argument.
        </p>

        <p>
          If a function accepts *foo (variable length argument lists) and/or
          **bar (arbitrary keyword arguments), they should be listed as *foo and
          **bar.
        </p>
      </dd>

      <dt>Returns: (or Yields: for generators)</dt>
      <dd>
        Describe the type and semantics of the return value. If the function
        only returns None, this section is not required.
      </dd>

      <dt>Raises:</dt>
      <dd>
        List all exceptions that are relevant to the interface.
      </dd>
    </dl>

    <DIV class=""><PRE>
<span class="external"></span>def fetch_bigtable_rows(big_table, keys, other_silly_variable=None):
  <span class="external">  </span>"""Fetches rows from a Bigtable.

  <span class="external">  </span>Retrieves rows pertaining to the given keys from the Table instance
  <span class="external">  </span>represented by big_table.  Silly things may happen if
  <span class="external">  </span>other_silly_variable is not None.

  <span class="external">  </span>Args:
    <span class="external">    </span>big_table: An open Bigtable Table instance.
    <span class="external">    </span>keys: A sequence of strings representing the key of each table row
    <span class="external">    </span>    to fetch.
    <span class="external">    </span>other_silly_variable: Another optional variable, that has a much
    <span class="external">    </span>    longer name than the other args, and which does nothing.

  <span class="external">  </span>Returns:
    <span class="external">    </span>A dict mapping keys to the corresponding table row data
    <span class="external">    </span>fetched. Each row is represented as a tuple of strings. For
    <span class="external">    </span>example:

    <span class="external">    </span>{'Serak': ('Rigel VII', 'Preparer'),
    <span class="external">    </span> 'Zim': ('Irk', 'Invader'),
    <span class="external">    </span> 'Lrrr': ('Omicron Persei 8', 'Emperor')}

    <span class="external">    </span>If a key from the keys argument is missing from the dictionary,
    <span class="external">    </span>then that row was not found in the table.

  <span class="external">  </span>Raises:
    <span class="external">    </span>IOError: An error occurred accessing the bigtable.Table object.
  <span class="external">  </span>"""
  <span class="external">  </span>pass
<span class="external"></span>
</PRE></DIV>
    </P>
    <P class="">
<SPAN class="stylepoint_subsection">Classes</SPAN>

    <p>
      Classes should have a doc string below the class definition describing
      the class.  If your class has public attributes, they should be documented
      here in an Attributes section and follow the same formatting as a
      function's Args section.
    </p>

    <DIV class=""><PRE>
<span class="external"></span>class SampleClass(object):
  <span class="external">  </span>"""Summary of class here.

  <span class="external">  </span>Longer class information....
  <span class="external">  </span>Longer class information....

  <span class="external">  </span>Attributes:
    <span class="external">    </span>likes_spam: A boolean indicating if we like SPAM or not.
    <span class="external">    </span>eggs: An integer count of the eggs we have laid.
  <span class="external">  </span>"""

  <span class="external">  </span>def __init__(self, likes_spam=False):
    <span class="external">    </span>"""Inits SampleClass with blah."""
    <span class="external">    </span>self.likes_spam = likes_spam
    <span class="external">    </span>self.eggs = 0

  <span class="external">  </span>def public_method(self):
    <span class="external">    </span>"""Performs operation blah."""
<span class="external"></span>
</PRE></DIV>

    </P>
    <P class="">
<SPAN class="stylepoint_subsection">Block and Inline Comments</SPAN>

    <p>
      The final place to have comments is in tricky parts of the
      code. If you're going to have to explain it at the next
      <a HREF="http://en.wikipedia.org/wiki/Code_review">code review</a>,
      you should comment it now.  Complicated operations get a few lines of
      comments before the operations
      commence. Non-obvious ones get comments at the end of the line.
    </p>

    <DIV class=""><PRE>
<span class="external"></span># We use a weighted dictionary search to find out where i is in
<span class="external"></span># the array.  We extrapolate position based on the largest num
<span class="external"></span># in the array and the array size and then do binary search to
<span class="external"></span># get the exact number.

<span class="external"></span>if i &amp; (i-1) == 0:        # true iff i is a power of 2
<span class="external"></span>
</PRE></DIV>

    <p>
      To improve legibility, these comments should be at least 2 spaces away
      from the code.
    </p>

    <p>
      On the other hand, never describe the code. Assume the person
      reading the code knows Python (though not what you're trying to
      do) better than you do.
    </p>

    <DIV class=""><PRE class="badcode">
<span class="external"></span># BAD COMMENT: Now go through the b array and make sure whenever i occurs
<span class="external"></span># the next element is i+1
<span class="external"></span>
</PRE></DIV>

    </P>
      </DIV></DIV>
    </DIV>
    <DIV class="">
<H3><A name="Classes" id="Classes">Classes</A></H3>
<SPAN class="link_button" id="link-Classes__button" name="link-Classes__button"><A href="?showone=Classes#Classes">
          link
        </A></SPAN><SPAN class="showhide_button" onclick="javascript:ShowHideByName('Classes')" name="Classes__button" id="Classes__button">▶</SPAN>
      <DIV style="display:inline;" class="">
        If a class inherits from no other base classes, explicitly inherit
    from <code>object</code>.  This also applies to nested classes.
      </DIV>
      <DIV class=""><DIV class="stylepoint_body" name="Classes__body" id="Classes__body" style="display: none">
    <DIV class=""><PRE>Yes: <span class="external"></span>class SampleClass(object):
       <span class="external">  </span>pass


     <span class="external"></span>class OuterClass(object):

       <span class="external">  </span>class InnerClass(object):
         <span class="external">    </span>pass


     <span class="external"></span>class ChildClass(ParentClass):
       <span class="external">  </span>"""Explicitly inherits from another class already."""
<span class="external"></span>
</PRE></DIV>
    <DIV class=""><PRE class="badcode">No: <span class="external"></span>class SampleClass:
      <span class="external">  </span>pass


    <span class="external"></span>class OuterClass:

      <span class="external">  </span>class InnerClass:
        <span class="external">    </span>pass
<span class="external"></span>
</PRE></DIV>
    <p>Inheriting from <code>object</code> is needed to make properties work
    properly, and it will protect your code from one particular potential
    incompatibility with Python 3000.  It also defines
    special methods that implement the default semantics of objects including
    <code>__new__</code>, <code>__init__</code>, <code>__delattr__</code>,
    <code>__getattribute__</code>, <code>__setattr__</code>,
    <code>__hash__</code>, <code>__repr__</code>, and <code>__str__</code>.
    </p>
      </DIV></DIV>
    </DIV>
    <DIV class="">
<H3><A name="Strings" id="Strings">Strings</A></H3>
<SPAN class="link_button" id="link-Strings__button" name="link-Strings__button"><A href="?showone=Strings#Strings">
          link
        </A></SPAN><SPAN class="showhide_button" onclick="javascript:ShowHideByName('Strings')" name="Strings__button" id="Strings__button">▶</SPAN>
      <DIV style="display:inline;" class="">
        Use the <code>format</code> method or the <code>%</code> operator for
        formatting strings, even when the parameters are all strings. Use your
        best judgement to decide between <code>+</code> and <code>%</code>
        (or <code>format</code>) though.
      </DIV>
      <DIV class=""><DIV class="stylepoint_body" name="Strings__body" id="Strings__body" style="display: none">

<DIV class=""><PRE>Yes: <span class="external"></span>x = a + b
     <span class="external"></span>x = '%s, %s!' % (imperative, expletive)
     <span class="external"></span>x = '{}, {}!'.format(imperative, expletive)
     <span class="external"></span>x = 'name: %s; score: %d' % (name, n)
     <span class="external"></span>x = 'name: {}; score: {}'.format(name, n)</PRE></DIV>
<DIV class=""><PRE class="badcode">No: <span class="external"></span>x = '%s%s' % (a, b)  # use + in this case
    <span class="external"></span>x = '{}{}'.format(a, b)  # use + in this case
    <span class="external"></span>x = imperative + ', ' + expletive + '!'
    <span class="external"></span>x = 'name: ' + name + '; score: ' + str(n)</PRE></DIV>

    <p>
      Avoid using the <code>+</code> and <code>+=</code> operators to
      accumulate a string within a loop. Since strings are immutable, this
      creates unnecessary temporary objects and results in quadratic rather
      than linear running time. Instead, add each substring to a list
      and <code>''.join</code> the list after the loop terminates (or, write
      each substring to a <code>io.BytesIO</code> buffer).
    </p>

<DIV class=""><PRE>Yes: <span class="external"></span>items = ['&lt;table&gt;']
     <span class="external"></span>for last_name, first_name in employee_list:
       <span class="external">  </span>items.append('&lt;tr&gt;&lt;td&gt;%s, %s&lt;/td&gt;&lt;/tr&gt;' % (last_name, first_name))
     <span class="external"></span>items.append('&lt;/table&gt;')
     <span class="external"></span>employee_table = ''.join(items)</PRE></DIV>
<DIV class=""><PRE class="badcode">No: <span class="external"></span>employee_table = '&lt;table&gt;'
    <span class="external"></span>for last_name, first_name in employee_list:
      <span class="external">  </span>employee_table += '&lt;tr&gt;&lt;td&gt;%s, %s&lt;/td&gt;&lt;/tr&gt;' % (last_name, first_name)
    <span class="external"></span>employee_table += '&lt;/table&gt;'</PRE></DIV>

    <p>
      Be consistent with your choice of string quote character within a file.
      Pick <code>'</code> or <code>"</code> and stick with it.
      It is okay to use the other quote character on a string to avoid the
      need to <code>\</code> escape within the string.
      GPyLint enforces this.
    </p>

<DIV class=""><PRE>Ye<span class="external"></span>s:
  <span class="external"></span>Python('Why are you hiding your eyes?')
  <span class="external"></span>Gollum("I'm scared of lint errors.")
  <span class="external"></span>Narrator('"Good!" thought a happy Python reviewer.')</PRE></DIV>
<DIV class=""><PRE class="badcode">No<span class="external"></span>:
  <span class="external"></span>Python("Why are you hiding your eyes?")
  <span class="external"></span>Gollum('The lint. It burns. It burns us.')
  <span class="external"></span>Gollum("Always the great lint. Watching. Watching.")</PRE></DIV>

    <p>
      Prefer <code>"""</code> for multi-line strings rather than
      <code>'''</code>. Projects may choose to use <code>'''</code> for
      all non-docstring multi-line strings if and only if they also use
      <code>'</code> for regular strings.
      Doc strings must use <code>"""</code> regardless.
      Note that it is often cleaner to
      use implicit line joining since multi-line strings do
      not flow with the indentation of the rest of the program:
    </p>

<DIV class=""><PRE>Ye<span class="external"></span>s:
  <span class="external"></span>print ("This is much nicer.\n"
  <span class="external"></span>       "Do it this way.\n")</PRE></DIV>
<DIV class=""><PRE class="badcode">  No<span class="external"></span>:
    <span class="external"></span>print """This is pretty ugly.
Don'<span class="external"></span>t do this.
"""<span class="external"></span>
</PRE></DIV>

      </DIV></DIV>
    </DIV>
    <DIV class="">
<H3><A name="Files_and_Sockets" id="Files_and_Sockets">Files and Sockets</A></H3>
<SPAN class="link_button" id="link-Files_and_Sockets__button" name="link-Files_and_Sockets__button"><A href="?showone=Files_and_Sockets#Files_and_Sockets">
          link
        </A></SPAN><SPAN class="showhide_button" onclick="javascript:ShowHideByName('Files_and_Sockets')" name="Files_and_Sockets__button" id="Files_and_Sockets__button">▶</SPAN>
      <DIV style="display:inline;" class="">
        Explicitly close files and sockets when done with them.
      </DIV>
      <DIV class=""><DIV class="stylepoint_body" name="Files_and_Sockets__body" id="Files_and_Sockets__body" style="display: none">
        <p>
          Leaving files, sockets or other file-like objects open unnecessarily
          has many downsides, including:

          <ul>
            <li>They may consume limited system resources, such as file
              descriptors.  Code that deals with many such objects may exhaust
              those resources unnecessarily if they're not returned to the
              system promptly after use.</li>
            <li>Holding files open may prevent other actions being performed on
              them, such as moves or deletion.</li>
            <li>Files and sockets that are shared throughout a program may
              inadvertantly be read from or written to after logically being
              closed.  If they are actually closed, attempts to read or write
              from them will throw exceptions, making the problem known
              sooner.</li>
          </ul>
        </p>

        <p>
          Furthermore, while files and sockets are automatically closed when the
          file object is destructed, tying the life-time of the file object to
          the state of the file is poor practice, for several reasons:

          <ul>
            <li>There are no guarantees as to when the runtime will actually run
              the file's destructor.  Different Python implementations use
              different memory management techniques, such as delayed Garbage
              Collection, which may increase the object's lifetime arbitrarily
              and indefinitely.</li>
            <li>Unexpected references to the file may keep it around longer than
              intended (e.g. in tracebacks of exceptions, inside globals,
              etc).</li>
          </ul>
        </p>

        <p>
          The preferred way to manage files is using the <a HREF="http://docs.python.org/reference/compound_stmts.html#the-with-statement">
          "with" statement</a>:
        </p>

<DIV class=""><PRE>
<span class="external"></span>with open("hello.txt") as hello_file:
  <span class="external">  </span>for line in hello_file:
    <span class="external">    </span>print line</PRE></DIV>

        <p>
          For file-like objects that do not support the "with" statement, use
          contextlib.closing():
        </p>

<DIV class=""><PRE>
<span class="external"></span>import contextlib

<span class="external"></span>with contextlib.closing(urllib.urlopen("http://www.python.org/")) as front_page:
  <span class="external">  </span>for line in front_page:
    <span class="external">    </span>print line</PRE></DIV>

        <p>
          Legacy AppEngine code using Python 2.5 may enable the "with" statement
          using "from __future__ import with_statement".
        </p>
      </DIV></DIV>
    </DIV>
    <DIV class="">
<H3><A name="TODO_Comments" id="TODO_Comments">TODO Comments</A></H3>
<SPAN class="link_button" id="link-TODO_Comments__button" name="link-TODO_Comments__button"><A href="?showone=TODO_Comments#TODO_Comments">
          link
        </A></SPAN><SPAN class="showhide_button" onclick="javascript:ShowHideByName('TODO_Comments')" name="TODO_Comments__button" id="TODO_Comments__button">▶</SPAN>
      <DIV style="display:inline;" class="">
        Use <code>TODO</code> comments for code that is temporary, a
        short-term solution, or good-enough but not perfect.
      </DIV>
      <DIV class=""><DIV class="stylepoint_body" name="TODO_Comments__body" id="TODO_Comments__body" style="display: none">
        <p>
          <code>TODO</code>s should include the string <code>TODO</code> in
          all caps, followed by the
          
          name, e-mail address, or other
          identifier
          of the person who can best provide context about the problem
          referenced by the <code>TODO</code>,
          in parentheses.  A colon is optional.  A comment explaining what there
          is to do is required. The main purpose is to have
          a consistent <code>TODO</code> format that can be searched to find the
          person who can provide more details upon request.  A
          <code>TODO</code> is not a commitment that the person referenced
          will fix the problem.  Thus when you create a <code>TODO</code>, it is
          almost always your
          
          name
          that is given.
        </p>
        
        <DIV class=""><PRE># TODO(kl@gmail.com): Use a "*" here for string repetition.
# TODO(Zeke) Change this to use relations.</PRE></DIV>
        <p>
          If your <code>TODO</code> is of the form "At a future date do
          something" make sure that you either include a very specific
          date ("Fix by November 2009") or a very specific event
          ("Remove this code when all clients can handle XML responses.").
        </p>
      </DIV></DIV>
    </DIV>
    <DIV class="">
<H3><A name="Imports_formatting" id="Imports_formatting">Imports formatting</A></H3>
<SPAN class="link_button" id="link-Imports_formatting__button" name="link-Imports_formatting__button"><A href="?showone=Imports_formatting#Imports_formatting">
          link
        </A></SPAN><SPAN class="showhide_button" onclick="javascript:ShowHideByName('Imports_formatting')" name="Imports_formatting__button" id="Imports_formatting__button">▶</SPAN>
      <DIV style="display:inline;" class="">
        Imports should be on separate lines.
      </DIV>
      <DIV class=""><DIV class="stylepoint_body" name="Imports_formatting__body" id="Imports_formatting__body" style="display: none">
    <p>
      E.g.:
    </p>

<DIV class=""><PRE>Yes: <span class="external"></span>import os
     <span class="external"></span>import sys</PRE></DIV>
<DIV class=""><PRE class="badcode">No:  <span class="external"></span>import os, sys</PRE></DIV>
    <p>
      Imports are always put at the top of the file, just after any
      module comments and doc strings and before module globals and
      constants.  Imports should be grouped with the order being most generic
      to least generic:
    </p>
    <ul>
      <li>standard library imports</li>
      <li>third-party imports</li>
      
      <li>application-specific imports</li>
    </ul>
    <p>
      Within each grouping, imports should be sorted lexicographically,
      ignoring case, according to each module's full package path.
    </p>
    <DIV class=""><PRE>
<span class="external"></span>import foo
<span class="external"></span>from foo import bar
<span class="external"></span>from foo.bar import baz
<span class="external"></span>from foo.bar import Quux
<span class="external"></span>from Foob import ar</PRE></DIV>
    
    
    
      </DIV></DIV>
    </DIV>
    <DIV class="">
<H3><A name="Statements" id="Statements">Statements</A></H3>
<SPAN class="link_button" id="link-Statements__button" name="link-Statements__button"><A href="?showone=Statements#Statements">
          link
        </A></SPAN><SPAN class="showhide_button" onclick="javascript:ShowHideByName('Statements')" name="Statements__button" id="Statements__button">▶</SPAN>
      <DIV style="display:inline;" class="">
        Generally only one statement per line.
      </DIV>
      <DIV class=""><DIV class="stylepoint_body" name="Statements__body" id="Statements__body" style="display: none">
    <p>
      However, you may put the
      result of a test on the same line as the test only if the entire
      statement fits on one line.  In particular, you can never do so
      with <code>try</code>/<code>except</code> since the
      <code>try</code> and <code>except</code> can't both fit on the
      same line, and you can only do so with an <code>if</code> if
      there is no <code>else</code>.
    </p>

    <DIV class=""><PRE>Ye<span class="external"></span>s:

  <span class="external"></span>if foo: bar(foo)</PRE></DIV>
<DIV class=""><PRE class="badcode">No<span class="external"></span>:

  <span class="external"></span>if foo: bar(foo)
  <span class="external"></span>else:   baz(foo)

  <span class="external"></span>try:               bar(foo)
  <span class="external"></span>except ValueError: baz(foo)

  <span class="external"></span>try:
    <span class="external">  </span>bar(foo)
  <span class="external"></span>except ValueError: baz(foo)
<span class="external"></span>
</PRE></DIV>
      </DIV></DIV>
    </DIV>
    <DIV class="">
<H3><A name="Access_Control" id="Access_Control">Access Control</A></H3>
<SPAN class="link_button" id="link-Access_Control__button" name="link-Access_Control__button"><A href="?showone=Access_Control#Access_Control">
          link
        </A></SPAN><SPAN class="showhide_button" onclick="javascript:ShowHideByName('Access_Control')" name="Access_Control__button" id="Access_Control__button">▶</SPAN>
      <DIV style="display:inline;" class="">
        If an accessor function would be trivial you should use public variables
        instead of accessor functions to avoid the extra cost of function
        calls in Python. When more functionality is added you can use
        <code>property</code> to keep the syntax consistent.
      </DIV>
      <DIV class=""><DIV class="stylepoint_body" name="Access_Control__body" id="Access_Control__body" style="display: none">
    <p>
      On the other hand, if access is more complex, or the cost of accessing
      the variable is significant, you should use function calls (following the
      <a HREF="#naming">Naming</a> guidelines) such as <code>get_foo()</code>
      and <code>set_foo()</code>. If the past behavior allowed access through a
      property, do not bind the new accessor functions to the property. Any
      code still attempting to access the variable by the old method should
      break visibly so they are made aware of the change in complexity.
    </p>
      </DIV></DIV>
    </DIV>
    <DIV class="">
<H3><A name="Naming" id="Naming">Naming</A></H3>
<SPAN class="link_button" id="link-Naming__button" name="link-Naming__button"><A href="?showone=Naming#Naming">
          link
        </A></SPAN><SPAN class="showhide_button" onclick="javascript:ShowHideByName('Naming')" name="Naming__button" id="Naming__button">▶</SPAN>
      <DIV style="display:inline;" class="">
        <code>module_name, package_name, ClassName,
        method_name, ExceptionName,
        function_name, GLOBAL_CONSTANT_NAME,
        global_var_name, instance_var_name, function_parameter_name,
        local_var_name.</code>
      </DIV>
      <DIV class=""><DIV class="stylepoint_body" name="Naming__body" id="Naming__body" style="display: none">
    <P class="">
<SPAN class="stylepoint_subsection">Names to Avoid</SPAN>

    <ul>
      <li>single character names except for counters or iterators</li>
      <li>dashes (<code>-</code>) in any package/module name</li>
      <li>
<code>__double_leading_and_trailing_underscore__</code> names
        (reserved by Python)</li>
    </ul>

    </P>
    <P class="">
<SPAN class="stylepoint_subsection">Naming Convention</SPAN>

    <ul>
      <li>
        "Internal" means internal to a module or protected
        or private within a class.</li>
      <li>
        Prepending a single underscore (<code>_</code>) has some
        support for protecting module variables and functions (not included
        with <code>import * from</code>).  Prepending a double underscore
        (<code>__</code>) to an instance variable or method
        effectively serves to make the variable or method private to its class
        (using name mangling).</li>
      <li>
        Place related classes and top-level functions together in a
        module. Unlike Java,
        there is no need to limit yourself to one class per module.</li>
      <li>
        Use CapWords for class names, but lower_with_under.py for module names.
        Although there are many existing modules named CapWords.py, this is now
        discouraged because it's confusing when the module happens to be
        named after a class.  ("wait -- did I write
        <code>import StringIO</code> or <code>from StringIO import
        StringIO</code>?")</li>
    </ul>

    </P>
    <P class="">
<SPAN class="stylepoint_subsection">Guidelines derived from Guido's Recommendations</SPAN>

    <table rules="all" border="1" cellspacing="2" cellpadding="2">
      
      <tr>
        <th>Type</th>
        <th>Public</th>
        <th>Internal</th>
      </tr>
      

      
      <tr>
        <td>Packages</td>
        <td><code>lower_with_under</code></td>
        <td></td>
      </tr>

      <tr>
        <td>Modules</td>
        <td><code>lower_with_under</code></td>
        <td><code>_lower_with_under</code></td>
      </tr>

      <tr>
        <td>Classes</td>
        <td><code>CapWords</code></td>
        <td><code>_CapWords</code></td>
      </tr>

      <tr>
        <td>Exceptions</td>
        <td><code>CapWords</code></td>
        <td></td>
      </tr>

      

      <tr>
        <td>Functions</td>
        <td><code>lower_with_under()</code></td>
        <td><code>_lower_with_under()</code></td>
      </tr>

      <tr>
        <td>Global/Class Constants</td>
        <td><code>CAPS_WITH_UNDER</code></td>
        <td><code>_CAPS_WITH_UNDER</code></td>
      </tr>

      <tr>
        <td>Global/Class Variables</td>
        <td><code>lower_with_under</code></td>
        <td><code>_lower_with_under</code></td>
      </tr>

      <tr>
        <td>Instance Variables</td>
        <td><code>lower_with_under</code></td>
        <td><code>_lower_with_under (protected) or __lower_with_under (private)</code></td>
      </tr>

      

      <tr>
        <td>Method Names</td>
        <td><code>lower_with_under()</code></td>
        <td><code>_lower_with_under() (protected) or __lower_with_under() (private)</code></td>
      </tr>

      <tr>
        <td>Function/Method Parameters</td>
        <td><code>lower_with_under</code></td>
        <td></td>
      </tr>

      <tr>
        <td>Local Variables</td>
        <td><code>lower_with_under</code></td>
        <td></td>
      </tr>
      

    </table>

    
   </P>
      </DIV></DIV>
    </DIV>
    <DIV class="">
<H3><A name="Main" id="Main">Main</A></H3>
<SPAN class="link_button" id="link-Main__button" name="link-Main__button"><A href="?showone=Main#Main">
          link
        </A></SPAN><SPAN class="showhide_button" onclick="javascript:ShowHideByName('Main')" name="Main__button" id="Main__button">▶</SPAN>
      <DIV style="display:inline;" class="">
        Even a file meant to be used as a script should be importable and a
        mere import should not have the side effect of executing the script's
        main functionality. The main functionality should be in a main()
        function.
      </DIV>
      <DIV class=""><DIV class="stylepoint_body" name="Main__body" id="Main__body" style="display: none">
    <p>
      In Python,
      <code>pydoc</code> as well as unit tests
      require modules to be importable.  Your code should always check
      <code>if __name__ == '__main__'</code> before executing your
      main program so that the main program is not executed when the
      module is imported.
      
    </p>

    

    

    

    <DIV class=""><PRE>
<span class="external"></span>def main():
   <span class="external">   </span>...

<span class="external"></span>if __name__ == '__main__':
  <span class="external">  </span>main()
<span class="external"></span>
</PRE></DIV>

    <p>
      All code at the top level will be executed when the module is
      imported.  Be careful not to call functions, create objects, or
      perform other operations that should not be executed when the
      file is being <code>pydoc</code>ed.
    </p>
      </DIV></DIV>
    </DIV>
  </DIV>

<H2>Parting Words</H2>
    <p>
      <em>BE CONSISTENT</em>.
    </p>

    <p>
      If you're editing code, take a few minutes to look at the code
      around you and determine its style.  If they use spaces around
      all their arithmetic operators, you should too.  If their
      comments have little boxes of hash marks around them, make your
      comments have little boxes of hash marks around them too.
    </p>

    <p>
      The point of having style guidelines is to have a common vocabulary
      of coding so people can concentrate on what you're saying rather
      than on how you're saying it.  We present global style rules here so
      people know the vocabulary, but local style is also important.  If
      code you add to a file looks drastically different from the existing
      code around it, it throws readers out of their rhythm when they go to
      read it.  Avoid this.
    </p>



<p align="right">
Revision 2.59
</p>


<address>
  Amit Patel<br>
  Antoine Picard<br>
  Eugene Jhong<br>
  Gregory P. Smith<br>
  Jeremy Hylton<br>
  Matt Smart<br>
  Mike Shields<br>
  Shane Liebling<br>
</address>
</BODY>
</HTML>
