Python имеет модуль builtins
, где хранятся «действительно глобальные» вещи - обычно только стандартные встроенные функции и типы . В Python 2 он был назван __builtin__
, но работал в основном тем же самым.
Этот модуль можно импортировать так же, как и любой другой модуль, но он также волшебным образом снабжает встроенные имена для каждого другого модуля (что doesn 't скрыть их.
Если вам интересно, как это работает, builtins
docs говорят:
В качестве детали реализации большинство модулей имеют имя
blockquote>__builtins__
доступно как часть их глобалов. Значение__builtins__
обычно является либо этим модулем, либо значением атрибута__dict__
этого модуля. Поскольку это детализация реализации, она не может использоваться альтернативными реализациями Python.И
exec
говорит:Если словарь globals не содержит значения для ключа
blockquote>__builtins__
, под этим ключом вставлена ссылка на словарь встроенного модуляbuiltins
. Таким образом, вы можете контролировать, какие встроенные функции доступны для исполняемого кода, вставив ваш собственный словарь__builtins__
в глобалы, прежде чем передавать его наexec()
.Итак, по крайней мере, в CPython, когда вы оцениваете
abs
, он просматривается вglobals()['abs']
, не найден там, а затем просматривается вglobals()['__builtins__'].__dict__['abs']
.И всякий раз, когда Python (или, по крайней мере, CPython) создает новый объект модуля, его код выполняется с
globals
сempty
__builtins__
, что означает, что значение модуля по умолчаниюbuiltins
заполняется, так что это работает. И этотglobals
- тот, который копируется для очень функции и класса, определенных в модуле (и все, что вы делаете явно сglobals
без явной замены__builtins__
), поэтому оно работает внутри функций и классов.
Я придумал обходной путь для этого, вместо того, чтобы использовать ppSaveAsPDF, я использую его постоянное значение, равное «32», и установка для PRESENTATION и APPLICATION значения NONE фактически закрывает powerpoint. Вот обновленный код.
import win32com.client, sys
FILENAME = "C:\\Users\\Swaroop\\Desktop\\Scripts\\Test.pptx"
APPLICATION = win32com.client.Dispatch("PowerPoint.Application")
PRESENTATION = APPLICATION.Presentations.Open(FILENAME, ReadOnly= False)
PRESENTATION.SaveAs("C:\\Users\\Swaroop\\Desktop\\Output.pdf", 32)
APPLICATION.Quit()
PRESENTATION = None
APPLICATION = None