Не ясно, смущает ли вас длина написания идентификационных выражений или количество оставшихся идентификаторов в пространстве имен после их использования.
ДляВо-первых, метод определения псевдонима для длинного префикса, описанный Рэймондом Хеттингером, является ЕДИНСТВЕННЫМ для применения.
Во-вторых, я удивлен, что никто не прибегал кимпорт модуля, в котором находятся инструкции и строки, которые вы считаете тяжелыми и мусорными.
Кстати, если вы получаете доступ к функциям с помощью os.path.abspath
и os.path.dirnames
, неверно говорить, что функции (я полагаю, вы имеете в виду их имена) засоряют пространство имен.Поскольку они принадлежат модулю os или os.path (зависит от того, какой из них был импортирован), существует только имя модуля 'os' или 'os.path' в пространстве имен и объект модуля в памяти, но не имена функций непосредственно в пространстве имен.
Таким образом, можно создать скрипт имени"heavy_code.py":
def doing(x):
from os.path import abspath as a,dirname as d
## Execute all the desired processes and creations
def fufu(s,t):
return s+t
dedex = d[x]
#.........
#...........
#........
#............
#..........
## Return to the calling scope all that is needed there
return (dedex,fufu)
И в главном модуле с учетом ответа gnibbler:
one_path = 'I:/all/magala/zeru/kiol.py'
try:
from pp.bududu import doing
w,ff = doing(one_path)
finally:
del doing
.
Чтобы увидеть, как это работает:
one_path = 'I:/all/magala/zeru/kiol.py'
try:
from pp.bududu.heavy_code import doing
print "in try : "
print dir()
print "executing doing()"
w,ff = doing(one_path)
print dir()
finally:
del doing
print "\nafter finally : "
print dir()
print '\nw ==',w
print 'ff(10,12) ==',ff(10,12)
в результате выдает:
in try :
['__builtins__', '__doc__', '__name__', '__package__', 'doing', 'one_path']
executing doing()
['__builtins__', '__doc__', '__name__', '__package__', 'doing', 'ff', 'one_path', 'w']
after finally :
['__builtins__', '__doc__', '__name__', '__package__', 'ff', 'one_path', 'w']
w == I:/all/magala/zeru
ff(10,12) == 22
После выполнения фрагмента функция do () больше не существует в основном модуле,но объекты, созданные в результате выполнения working () , теперь лежат в нем без путаницы имен в пространстве имен основного модуля.Кроме того, все идентификаторы, необходимые внутри функции working () , являются локальными для нее.
Создание всех требуемых и необходимых объектов может быть делегировано модулю heavy_code сколько бы их ни было, при импорте и выполнении функции working () занимает только две строки в главном модуле, а функция working () в heavy_code плюс его вызывающая линия может быть легко изменена.
Разве не для этого предназначен модуль?