<br clear="all">As a general rule, I group all my imports in the beginning of the module's source, even if it is only used a handful of times by a few functions.<br><br>However, on such cases as the import is only needed by specific function(s) zero or once, then I do the import in the function itself. Importing argparse, for example:<br>

<br>import sys<br><br>def api_func(*args, **kwargs):<br>    pass<br><br>def main(args):<br>    import argparse<br><br>    # ...<br><br>    api_func()<br><br>if __name__ == '__main__':<br>    sys.exit(main(sys.argv))<br>

<br><div>~/santa<br></div><div><br></div>~/santa<br>
<br><br><div class="gmail_quote">On Thu, Feb 17, 2011 at 1:45 PM, Terry Reedy <span dir="ltr"><<a href="mailto:tjreedy@udel.edu">tjreedy@udel.edu</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

<div class="im">On 2/17/2011 12:27 PM, andrea crotti wrote:<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Well no I wasn't really worried about performances.<br>
I just thought that if an external module is really almost never used,<br>
it might make sense to import it only when it's really needed.<br>
</blockquote>
<br></div>
If the module is only used in one function and the function may called 0 or 1 times, them yes, it makes some sense. But as soon as the function is called multiple times, or the module is used in more than one function, or someone wants to quickly look at the file to determine its dependencies, then local imports become more trouble than they are worth.<br>


<br>
For instance, suppose a new maintainer adds a function to the module that needs something from another module. If all imports are at the top, then it is trivial to see what imports are already made and whether they need modification.<br>


<br>
I believe the stdlib used to have some local imports, and might still, for all I know. PEP 8 is is based on long-term experience with the multi-maintainer stdlib as well as some stylistic preferences.<br><font color="#888888">
<br>
-- <br>
Terry Jan Reedy</font><div><div class="h5"><br>
<br>
-- <br>
<a href="http://mail.python.org/mailman/listinfo/python-list" target="_blank">http://mail.python.org/mailman/listinfo/python-list</a><br>
</div></div></blockquote></div><br>