<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>[Deprecated] Google Python Style Guide</TITLE>
<META http-equiv="Content-Type" content="text/html; charset=utf-8">
<LINK HREF="https://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>Deprecated Google Python Style Guide</H1>
  <p align="right">

    Revision 2.59
    <b>This is an obsolete unmaintained copy of the style guide.
      <a href="https://github.com/google/styleguide/blob/gh-pages/pyguide.md">Please use pyguide.md instead</a>.
    </b>
  </p>
  
  <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="https://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="https://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="https://www.python.org/dev/peps/pep-0318">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="https://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># https://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># https://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/env python</code> with an optional single digit
        <code>2</code> or <code>3</code> suffix.
      </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="https://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="https://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="https://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("https://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>
