On Wednesday, March 16, 2016 at 8:32:12 PM UTC-5, Andrew Barnert via Python-ideas wrote:
This seems like something that shouldn't be done in general, so doesn't need a language fix--but if you for some specific reason need to do it all the time, just write a function for it:
def _postimport(mod, names):
g = sys._getframe(1).f_globals
for name in names.split():
g['_'+name] = mod[name]
So:
import thingy
_postimport(thingy, 'spam eggs cheese')
use(_spam, _cheese)
Of course you can wrap up the import and _postimport in a single function:
_magic_from_import('thingy', 'spam eggs cheese')
Or use MacroPy to make the syntax nicer.
Or, if even that's not good enough, write a simple token-processing import hook that finds "_import" tokens and converts them to calls to your wrapper function.
Of course the farther you go down this path, the less readable your code becomes to someone who doesn't know about your function/macro/hook, but if there's really so much boilerplate that it's getting in the way, the tradeoff might be worth it.
I like your ideas, and thanks for taking the time to write up a few lines of code. Looks like this will have to be a feature that i implement for myself. Heck, I had already planned on re-implementing the entire import mechanism anyway, because I like to spread my module source code across multiple files, and i want to explicitly define *HOW* those source files are combined to create namespaces at run-time, so that i can keep them separate, whist easily sharing state between them.. Python does not allow me to do this without resorting to "import contortions" and monkey patching -- but i know how to do it! *evil grin*