Я работаю с кодом python, который имеет 4 уровня вложенных функций. Ниже приведен пример:Как избежать нескольких уровней вложенных функций
class TestClass:
def __init__(self):
pass
def calculate(self, x, y):
results = []
result = None
context = API.send_request('get_context')
if context['result'] == 'ok':
result = context['data']
# Some more actions here
def _is_valid_variable(variable):
if (variable > 0 and
variable % 2 == 0 and
variable < 10):
return True
return False
def _format_data(data):
formatted_data = None
def _extract_time(line):
time = None
if line:
time = line.split('|')[-1]
return time
if data:
for line in data.split('\n'):
formatted_data += '[DEBUG] [{0}] {1}'.format(_extract_time(line), line.split('|')[1])
return formatted_data
return results
В этом примере есть только 3 уровня, но идея такая же.
Каков наилучший способ структурирования такого типа кода?
Лучше ли положить все замыкания/внутренние функции в начале родительской функции, чтобы не смешивать код с кодом?
P.S. Я не хотел бы выводить эти функции на уровень класса, поскольку они фактически не связаны с классом, а только с их родительской функцией.
[* «Плоский лучше, чем вложенный». * * (Https://www.python.org/dev/peps/pep-0020/) Ваши вложенные функции не нуждаются в закрытии, t нужно быть вложенным вообще. – jonrsharpe
^- +1, я не вижу причин, по которым вам нужны «вложенные» функции, простые методы класса или staticmethod будут делать все отлично. Не превышайте сложный код. – Anzel
Если функции определены внутри функции, то они изменяются каждый раз, когда функция выполняется_. Это делает вашу функцию медленнее без уважительной причины. – RemcoGerlich