В Lua есть встроенная функция setfenv()
, которая позволяет вам предоставлять таблицу переменных в качестве среды для функции.Вот пример, который использует это:
foo = 1
function f()
print(blech) --Note that no variable named blech has been defined.
end
variableTable = {blech = foo}
setfenv(f, variableTable)
f() -- This will work and print 1, because blech has been defined as foo's value in the variableTable
Моя мотивация для этого заключается в том, что это позволяет мне настроить платформу, чтобы пользователи могли писать простые для понимания скрипты на Lua (они могут писать нулевые функциии может просто доверять, что переменные будут там для них).Он также предоставляет элегантный метод исключения модулей и функций, которые я не хочу, чтобы они использовали по соображениям безопасности (например, если вы определяете переменную таблицу, в которой не определен модуль os, нет способа, которым более опытный пользователь мог бы использоватьэто злонамеренно).
Я хотел бы добиться того же в Python.Есть ли что-то подобное, что можно сделать в Python?