Where to place imports
Steve Holden
steve at holdenweb.com
Fri Jan 23 13:01:44 EST 2009
Diez B. Roggisch wrote:
[...]
> The only valid reason for doing imports inside functions is if you
> otherwise get into circular dependency hell, or have modules that need
> some manipulation of the sys.path before they actually can be imported.
> This is never true for system modules, and certainly to avoid if possible.
>
Well there is also the somewhat obscure point that an import of specific
names inside a function makes them local, which *might* make a
performance difference with tight loop nesting inside - though obviously
the need for such will best be determined by benchmarking:
>>> def f1():
... from os.path import join
... print join
...
>>> from os.path import join
>>> def f2():
... print join
...
>>> dis.dis(f1)
2 0 LOAD_CONST 1 (-1)
3 LOAD_CONST 2 (('join',))
6 IMPORT_NAME 0 (os.path)
9 IMPORT_FROM 1 (join)
12 STORE_FAST 0 (join)
15 POP_TOP
3 16 LOAD_FAST 0 (join)
19 PRINT_ITEM
20 PRINT_NEWLINE
21 LOAD_CONST 0 (None)
24 RETURN_VALUE
>>> dis.dis(f2)
2 0 LOAD_GLOBAL 0 (join)
3 PRINT_ITEM
4 PRINT_NEWLINE
5 LOAD_CONST 0 (None)
8 RETURN_VALUE
>>>
Not a major issue, just another aspect of the question ... and of course
the OP should take the advice already given unless and until performance
becomes a problem (since it usually won't).
regards
Steve
--
Steve Holden +1 571 484 6266 +1 800 494 3119
Holden Web LLC http://www.holdenweb.com/
More information about the Python-list
mailing list