[Python-Dev] requirements for moving __import__ over to importlib?

Terry Reedy tjreedy at udel.edu
Wed Feb 8 00:40:37 CET 2012


On 2/7/2012 4:51 PM, PJ Eby wrote:
> One thing I'm a bit worried about is repeated imports, especially ones
> that are inside frequently-called functions. In today's versions of
> Python, this is a performance win for "command-line tool platform"
> systems like Mercurial and PEAK, where you want to delay importing as
> long as possible, in case the code that needs the import is never called
> at all... but, if it *is* used, you may still need to use it a lot of
> times.
>> When writing that kind of code, I usually just unconditionally import
> inside the function, because the C code check for an already-imported
> module is faster than the Python "if" statement I'd have to clutter up
> my otherwise-clean function with.

importlib could provide a parameterized decorator for functions that are 
the only consumers of an import. It could operate much like this:
def imps(mod):
 def makewrap(f):
 def wrapped(*args, **kwds):
 print('first/only call to wrapper')
 g = globals()
 g[mod] = __import__(mod)
 g[f.__name__] = f
 f(*args, **kwds)
 wrapped.__name__ = f.__name__
 return wrapped
 return makewrap
@imps('itertools')
def ic():
 print(itertools.count)
ic()
ic()
#
first/only call to wrapper
<class 'itertools.count'>
<class 'itertools.count'>
-- 
Terry Jan Reedy


More information about the Python-Dev mailing list

AltStyle によって変換されたページ (->オリジナル) /