Вложенная функция function_2
- это объект в local пространстве имен внешней функции.Он даже не существует как функция, когда function_1
не запущен.
Обычно вложенная функция выполняет вычисление private для внешней функции или возвращается в некоторой форме.или другой.В последнем случае вы можете запустить function_1
, чтобы получить ссылку на function_2
.
Любой объект, который вы хотите импортировать, должен находиться в глобальном пространстве имен или, по крайней мере, напрямую ссылаться на него.Лучшим дизайном будет
x = 3
def function_1(x):
y = x + 7
# Do some stuff, including using function_2
return y
def function_2(value):
# Do some stuff
return value
И имейте в виду, что определение функции - это не то же самое, что запуск .Как следствие, x
внутри function_1
отличается от x
, установленного на уровне 3 на уровне модуля.
Обновление для вашего обновления
Вы абсолютно можете превратить function_1
в класс и сделать из него function_2
метод:
class function_1:
def __call__(self, x):
y = x + 7
value = self.function_2(y)
return y, value
@staticmethod
def function_2(value):
return value
В этом случае вы можете сделать следующее в вашем другом скрипте:
from test import function_1
f1 = function_1()
# Call it:
f1(7)
# Call function_2:
function_1.function_2('blah')
# Or alternatively:
f1.function_2('foo')