Как в Питоне по-человечески отделить часть кода в отдельную область видимости?
Хочу:
namespace grammar:
P = pyparsing
comma_or_whitespace = P.White() | ","
def seq(expr):
return P.ZeroOrMore(expr + comma_or_whitespace.suppress()) + expr
number = ...
numbers = seq(number)
...
grammar.whatever.parseString(...)
Можно было бы написать class grammar, но тогда функции не будут видеть ранее определенные идентификаторы.
Пока придумал только такой хак:
def namespace(function):
return type("NS", (), function())
@namespace
def grammar():
...
return locals()
а по-человечески?