Есть ли Python, эквивалентный ключевому слову Perls 'package'

1

Мне интересно, если Python предлагает нечто похожее на ключевое слово пакета в Perl. Это ключевое слово в действительности создает помеченное пространство имен в любом месте кода.

Насколько я знаю, подобное пространство имен в Python возможно только путем помещения этого кода в файл и его импорта. Но что, если у меня есть код в переменной (например, прочитайте из некоторого файла конфигурации моего скрипта)?

Итак, другими словами: есть ли способ оценить код Python в произвольном пространстве имен? В Perl я бы просто добавил

package my_pack;

в начале этого кода, а затем eval его (в пространстве имен, называемом my_pack)

Спасибо за любую помощь.

  • 0
    «некоторый файл конфигурации» не может назначить новую переменную; Вы должны назначить переменную в вашем текущем скрипте для этого. так что это никогда не должно приводить к конфликту имен. или какой конкретный код создает проблему, на которую вы ссылаетесь?
  • 0
    Если я выполняю код Python (который я читаю из некоторого файла конфигурации для моего скрипта) с использованием eval , этот код может делать все, что угодно, включая определение подпрограмм и переменных.
Показать ещё 3 комментария
Теги:
namespaces
package

1 ответ

0

Нет, системы модулей Perl и Python работают по-разному. Невозможно явно объявить конкретный модуль Python.

Для Python eval() или exec() которые должны выполнять код в контексте конкретного модуля, рассмотрите, какие аспекты определяют этот модуль для ваших целей - важный аспект, вероятно, является глобальными переменными модуля. Вы можете предоставить их явно и захватить текущую среду с помощью функции globals(). Окружающая среда - это просто диктовка, которую вы можете скопировать, если хотите избежать модификаций среды модуля.

  • 0
    Спасибо амон; Я не понял этого, но по ссылке, которую я только что опубликовал, мне стало ясно.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню