Sophie

Sophie

distrib > Mandriva > current > i586 > media > main-updates > by-pkgid > 8f1462e52e1797a02c97073eed0b7f92 > files > 751

python-docs-2.6.5-2.5mdv2010.2.i586.rpm

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    
    <title>10.8. functools — Higher order functions and operations on callable objects &mdash; Python v2.6.5 documentation</title>
    <link rel="stylesheet" href="../_static/default.css" type="text/css" />
    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
    <script type="text/javascript">
      var DOCUMENTATION_OPTIONS = {
        URL_ROOT:    '../',
        VERSION:     '2.6.5',
        COLLAPSE_MODINDEX: false,
        FILE_SUFFIX: '.html',
        HAS_SOURCE:  true
      };
    </script>
    <script type="text/javascript" src="../_static/jquery.js"></script>
    <script type="text/javascript" src="../_static/doctools.js"></script>
    <link rel="search" type="application/opensearchdescription+xml"
          title="Search within Python v2.6.5 documentation"
          href="../_static/opensearch.xml"/>
    <link rel="author" title="About these documents" href="../about.html" />
    <link rel="copyright" title="Copyright" href="../copyright.html" />
    <link rel="top" title="Python v2.6.5 documentation" href="../index.html" />
    <link rel="up" title="10. Numeric and Mathematical Modules" href="numeric.html" />
    <link rel="next" title="10.9. operator — Standard operators as functions" href="operator.html" />
    <link rel="prev" title="10.7. itertools — Functions creating iterators for efficient looping" href="itertools.html" />
    <link rel="shortcut icon" type="image/png" href="../_static/py.png" />
 

  </head>
  <body>
    <div class="related">
      <h3>Navigation</h3>
      <ul>
        <li class="right" style="margin-right: 10px">
          <a href="../genindex.html" title="General Index"
             accesskey="I">index</a></li>
        <li class="right" >
          <a href="../modindex.html" title="Global Module Index"
             accesskey="M">modules</a> |</li>
        <li class="right" >
          <a href="operator.html" title="10.9. operator — Standard operators as functions"
             accesskey="N">next</a> |</li>
        <li class="right" >
          <a href="itertools.html" title="10.7. itertools — Functions creating iterators for efficient looping"
             accesskey="P">previous</a> |</li>
        <li><img src="../_static/py.png" alt=""
                 style="vertical-align: middle; margin-top: -1px"/></li>
        <li><a href="../index.html">Python v2.6.5 documentation</a> &raquo;</li>

          <li><a href="index.html" >The Python Standard Library</a> &raquo;</li>
          <li><a href="numeric.html" accesskey="U">10. Numeric and Mathematical Modules</a> &raquo;</li> 
      </ul>
    </div>  

    <div class="document">
      <div class="documentwrapper">
        <div class="bodywrapper">
          <div class="body">
            
  <div class="section" id="module-functools">
<h1>10.8. <tt class="xref docutils literal"><span class="pre">functools</span></tt> &#8212; Higher order functions and operations on callable objects<a class="headerlink" href="#module-functools" title="Permalink to this headline">¶</a></h1>
<p class="versionadded">
<span class="versionmodified">New in version 2.5.</span></p>
<p>The <tt class="xref docutils literal"><span class="pre">functools</span></tt> module is for higher-order functions: functions that act on
or return other functions. In general, any callable object can be treated as a
function for the purposes of this module.</p>
<p>The <tt class="xref docutils literal"><span class="pre">functools</span></tt> module defines the following functions:</p>
<dl class="function">
<dt id="functools.reduce">
<tt class="descclassname">functools.</tt><tt class="descname">reduce</tt><big>(</big><em>function</em>, <em>iterable</em><span class="optional">[</span>, <em>initializer</em><span class="optional">]</span><big>)</big><a class="headerlink" href="#functools.reduce" title="Permalink to this definition">¶</a></dt>
<dd><p>This is the same function as <a title="reduce" class="reference external" href="functions.html#reduce"><tt class="xref docutils literal"><span class="pre">reduce()</span></tt></a>.  It is made available in this module
to allow writing code more forward-compatible with Python 3.</p>
<p class="versionadded">
<span class="versionmodified">New in version 2.6.</span></p>
</dd></dl>

<dl class="function">
<dt id="functools.partial">
<tt class="descclassname">functools.</tt><tt class="descname">partial</tt><big>(</big><em>func</em><span class="optional">[</span>, <em>*args</em><span class="optional">]</span><span class="optional">[</span>, <em>**keywords</em><span class="optional">]</span><big>)</big><a class="headerlink" href="#functools.partial" title="Permalink to this definition">¶</a></dt>
<dd><p>Return a new <a title="functools.partial" class="reference internal" href="#functools.partial"><tt class="xref docutils literal"><span class="pre">partial</span></tt></a> object which when called will behave like <em>func</em>
called with the positional arguments <em>args</em> and keyword arguments <em>keywords</em>. If
more arguments are supplied to the call, they are appended to <em>args</em>. If
additional keyword arguments are supplied, they extend and override <em>keywords</em>.
Roughly equivalent to:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="k">def</span> <span class="nf">partial</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">keywords</span><span class="p">):</span>
    <span class="k">def</span> <span class="nf">newfunc</span><span class="p">(</span><span class="o">*</span><span class="n">fargs</span><span class="p">,</span> <span class="o">**</span><span class="n">fkeywords</span><span class="p">):</span>
        <span class="n">newkeywords</span> <span class="o">=</span> <span class="n">keywords</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
        <span class="n">newkeywords</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">fkeywords</span><span class="p">)</span>
        <span class="k">return</span> <span class="n">func</span><span class="p">(</span><span class="o">*</span><span class="p">(</span><span class="n">args</span> <span class="o">+</span> <span class="n">fargs</span><span class="p">),</span> <span class="o">**</span><span class="n">newkeywords</span><span class="p">)</span>
    <span class="n">newfunc</span><span class="o">.</span><span class="n">func</span> <span class="o">=</span> <span class="n">func</span>
    <span class="n">newfunc</span><span class="o">.</span><span class="n">args</span> <span class="o">=</span> <span class="n">args</span>
    <span class="n">newfunc</span><span class="o">.</span><span class="n">keywords</span> <span class="o">=</span> <span class="n">keywords</span>
    <span class="k">return</span> <span class="n">newfunc</span>
</pre></div>
</div>
<p>The <a title="functools.partial" class="reference internal" href="#functools.partial"><tt class="xref docutils literal"><span class="pre">partial()</span></tt></a> is used for partial function application which &#8220;freezes&#8221;
some portion of a function&#8217;s arguments and/or keywords resulting in a new object
with a simplified signature.  For example, <a title="functools.partial" class="reference internal" href="#functools.partial"><tt class="xref docutils literal"><span class="pre">partial()</span></tt></a> can be used to create
a callable that behaves like the <a title="int" class="reference external" href="functions.html#int"><tt class="xref docutils literal"><span class="pre">int()</span></tt></a> function where the <em>base</em> argument
defaults to two:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">functools</span> <span class="kn">import</span> <span class="n">partial</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">basetwo</span> <span class="o">=</span> <span class="n">partial</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">base</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">basetwo</span><span class="o">.</span><span class="n">__doc__</span> <span class="o">=</span> <span class="s">&#39;Convert base 2 string to an int.&#39;</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">basetwo</span><span class="p">(</span><span class="s">&#39;10010&#39;</span><span class="p">)</span>
<span class="go">18</span>
</pre></div>
</div>
</dd></dl>

<dl class="function">
<dt id="functools.update_wrapper">
<tt class="descclassname">functools.</tt><tt class="descname">update_wrapper</tt><big>(</big><em>wrapper</em>, <em>wrapped</em><span class="optional">[</span>, <em>assigned</em><span class="optional">]</span><span class="optional">[</span>, <em>updated</em><span class="optional">]</span><big>)</big><a class="headerlink" href="#functools.update_wrapper" title="Permalink to this definition">¶</a></dt>
<dd><p>Update a <em>wrapper</em> function to look like the <em>wrapped</em> function. The optional
arguments are tuples to specify which attributes of the original function are
assigned directly to the matching attributes on the wrapper function and which
attributes of the wrapper function are updated with the corresponding attributes
from the original function. The default values for these arguments are the
module level constants <em>WRAPPER_ASSIGNMENTS</em> (which assigns to the wrapper
function&#8217;s <em>__name__</em>, <em>__module__</em> and <em>__doc__</em>, the documentation string) and
<em>WRAPPER_UPDATES</em> (which updates the wrapper function&#8217;s <em>__dict__</em>, i.e. the
instance dictionary).</p>
<p>The main intended use for this function is in <a class="reference external" href="../glossary.html#term-decorator"><em class="xref">decorator</em></a> functions which
wrap the decorated function and return the wrapper. If the wrapper function is
not updated, the metadata of the returned function will reflect the wrapper
definition rather than the original function definition, which is typically less
than helpful.</p>
</dd></dl>

<dl class="function">
<dt id="functools.wraps">
<tt class="descclassname">functools.</tt><tt class="descname">wraps</tt><big>(</big><em>wrapped</em><span class="optional">[</span>, <em>assigned</em><span class="optional">]</span><span class="optional">[</span>, <em>updated</em><span class="optional">]</span><big>)</big><a class="headerlink" href="#functools.wraps" title="Permalink to this definition">¶</a></dt>
<dd><p>This is a convenience function for invoking <tt class="docutils literal"><span class="pre">partial(update_wrapper,</span>
<span class="pre">wrapped=wrapped,</span> <span class="pre">assigned=assigned,</span> <span class="pre">updated=updated)</span></tt> as a function decorator
when defining a wrapper function. For example:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">functools</span> <span class="kn">import</span> <span class="n">wraps</span>
<span class="gp">&gt;&gt;&gt; </span><span class="k">def</span> <span class="nf">my_decorator</span><span class="p">(</span><span class="n">f</span><span class="p">):</span>
<span class="gp">... </span>    <span class="nd">@wraps</span><span class="p">(</span><span class="n">f</span><span class="p">)</span>
<span class="gp">... </span>    <span class="k">def</span> <span class="nf">wrapper</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwds</span><span class="p">):</span>
<span class="gp">... </span>        <span class="k">print</span> <span class="s">&#39;Calling decorated function&#39;</span>
<span class="gp">... </span>        <span class="k">return</span> <span class="n">f</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwds</span><span class="p">)</span>
<span class="gp">... </span>    <span class="k">return</span> <span class="n">wrapper</span>
<span class="gp">...</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nd">@my_decorator</span>
<span class="gp">... </span><span class="k">def</span> <span class="nf">example</span><span class="p">():</span>
<span class="gp">... </span>    <span class="sd">&quot;&quot;&quot;Docstring&quot;&quot;&quot;</span>
<span class="gp">... </span>    <span class="k">print</span> <span class="s">&#39;Called example function&#39;</span>
<span class="gp">...</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">example</span><span class="p">()</span>
<span class="go">Calling decorated function</span>
<span class="go">Called example function</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">example</span><span class="o">.</span><span class="n">__name__</span>
<span class="go">&#39;example&#39;</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">example</span><span class="o">.</span><span class="n">__doc__</span>
<span class="go">&#39;Docstring&#39;</span>
</pre></div>
</div>
<p>Without the use of this decorator factory, the name of the example function
would have been <tt class="docutils literal"><span class="pre">'wrapper'</span></tt>, and the docstring of the original <tt class="xref docutils literal"><span class="pre">example()</span></tt>
would have been lost.</p>
</dd></dl>

<div class="section" id="partial-objects">
<span id="id1"></span><h2>10.8.1. <a title="functools.partial" class="reference internal" href="#functools.partial"><tt class="xref docutils literal"><span class="pre">partial</span></tt></a> Objects<a class="headerlink" href="#partial-objects" title="Permalink to this headline">¶</a></h2>
<p><a title="functools.partial" class="reference internal" href="#functools.partial"><tt class="xref docutils literal"><span class="pre">partial</span></tt></a> objects are callable objects created by <a title="functools.partial" class="reference internal" href="#functools.partial"><tt class="xref docutils literal"><span class="pre">partial()</span></tt></a>. They
have three read-only attributes:</p>
<dl class="attribute">
<dt id="functools.partial.func">
<tt class="descclassname">partial.</tt><tt class="descname">func</tt><a class="headerlink" href="#functools.partial.func" title="Permalink to this definition">¶</a></dt>
<dd>A callable object or function.  Calls to the <a title="functools.partial" class="reference internal" href="#functools.partial"><tt class="xref docutils literal"><span class="pre">partial</span></tt></a> object will be
forwarded to <a title="functools.partial.func" class="reference internal" href="#functools.partial.func"><tt class="xref docutils literal"><span class="pre">func</span></tt></a> with new arguments and keywords.</dd></dl>

<dl class="attribute">
<dt id="functools.partial.args">
<tt class="descclassname">partial.</tt><tt class="descname">args</tt><a class="headerlink" href="#functools.partial.args" title="Permalink to this definition">¶</a></dt>
<dd>The leftmost positional arguments that will be prepended to the positional
arguments provided to a <a title="functools.partial" class="reference internal" href="#functools.partial"><tt class="xref docutils literal"><span class="pre">partial</span></tt></a> object call.</dd></dl>

<dl class="attribute">
<dt id="functools.partial.keywords">
<tt class="descclassname">partial.</tt><tt class="descname">keywords</tt><a class="headerlink" href="#functools.partial.keywords" title="Permalink to this definition">¶</a></dt>
<dd>The keyword arguments that will be supplied when the <a title="functools.partial" class="reference internal" href="#functools.partial"><tt class="xref docutils literal"><span class="pre">partial</span></tt></a> object is
called.</dd></dl>

<p><a title="functools.partial" class="reference internal" href="#functools.partial"><tt class="xref docutils literal"><span class="pre">partial</span></tt></a> objects are like <tt class="xref docutils literal"><span class="pre">function</span></tt> objects in that they are
callable, weak referencable, and can have attributes.  There are some important
differences.  For instance, the <tt class="xref docutils literal"><span class="pre">__name__</span></tt> and <tt class="xref docutils literal"><span class="pre">__doc__</span></tt> attributes
are not created automatically.  Also, <a title="functools.partial" class="reference internal" href="#functools.partial"><tt class="xref docutils literal"><span class="pre">partial</span></tt></a> objects defined in
classes behave like static methods and do not transform into bound methods
during instance attribute look-up.</p>
</div>
</div>


          </div>
        </div>
      </div>
      <div class="sphinxsidebar">
        <div class="sphinxsidebarwrapper">
            <h3><a href="../contents.html">Table Of Contents</a></h3>
            <ul>
<li><a class="reference external" href="#">10.8. <tt class="docutils literal"><span class="pre">functools</span></tt> &#8212; Higher order functions and operations on callable objects</a><ul>
<li><a class="reference external" href="#partial-objects">10.8.1. <tt class="docutils literal"><span class="pre">partial</span></tt> Objects</a></li>
</ul>
</li>
</ul>

            <h4>Previous topic</h4>
            <p class="topless"><a href="itertools.html"
                                  title="previous chapter">10.7. <tt class="docutils literal"><span class="pre">itertools</span></tt> &#8212; Functions creating iterators for efficient looping</a></p>
            <h4>Next topic</h4>
            <p class="topless"><a href="operator.html"
                                  title="next chapter">10.9. <tt class="docutils literal docutils literal"><span class="pre">operator</span></tt> &#8212; Standard operators as functions</a></p>
            <h3>This Page</h3>
            <ul class="this-page-menu">
              <li><a href="../_sources/library/functools.txt"
                     rel="nofollow">Show Source</a></li>
            </ul>
          <div id="searchbox" style="display: none">
            <h3>Quick search</h3>
              <form class="search" action="../search.html" method="get">
                <input type="text" name="q" size="18" />
                <input type="submit" value="Go" />
                <input type="hidden" name="check_keywords" value="yes" />
                <input type="hidden" name="area" value="default" />
              </form>
              <p class="searchtip" style="font-size: 90%">
              Enter search terms or a module, class or function name.
              </p>
          </div>
          <script type="text/javascript">$('#searchbox').show(0);</script>
        </div>
      </div>
      <div class="clearer"></div>
    </div>
    <div class="related">
      <h3>Navigation</h3>
      <ul>
        <li class="right" style="margin-right: 10px">
          <a href="../genindex.html" title="General Index"
             >index</a></li>
        <li class="right" >
          <a href="../modindex.html" title="Global Module Index"
             >modules</a> |</li>
        <li class="right" >
          <a href="operator.html" title="10.9. operator — Standard operators as functions"
             >next</a> |</li>
        <li class="right" >
          <a href="itertools.html" title="10.7. itertools — Functions creating iterators for efficient looping"
             >previous</a> |</li>
        <li><img src="../_static/py.png" alt=""
                 style="vertical-align: middle; margin-top: -1px"/></li>
        <li><a href="../index.html">Python v2.6.5 documentation</a> &raquo;</li>

          <li><a href="index.html" >The Python Standard Library</a> &raquo;</li>
          <li><a href="numeric.html" >10. Numeric and Mathematical Modules</a> &raquo;</li> 
      </ul>
    </div>
    <div class="footer">
    &copy; <a href="../copyright.html">Copyright</a> 1990-2010, Python Software Foundation.
    <br />
    The Python Software Foundation is a non-profit corporation.  
    <a href="http://www.python.org/psf/donations/">Please donate.</a>
    <br />
    Last updated on Mar 19, 2010.
    Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 0.6.5.
    </div>

  </body>
</html>