Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何避免多层嵌套函数_Python - Fatal编程技术网

Python 如何避免多层嵌套函数

Python 如何避免多层嵌套函数,python,Python,我使用的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':

我使用的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
class测试类:
定义初始化(自):
通过
def计算(自身、x、y):
结果=[]
结果=无
context=API.send\u请求('get\u context'))
如果上下文['result']=='ok':
结果=上下文['data']
#这里还有一些动作
def_为有效变量(变量):
如果(变量>0和
变量%2==0和
变量<10):
返回真值
返回错误
定义格式数据(数据):
格式化数据=无
定义提取时间(行):
时间=无
如果行:
时间=行分割(“|”)[-1]
返回时间
如果数据:
对于数据中的行。拆分('\n'):
格式化的_data+='[DEBUG][{0}]{1}'。格式(_extract_time(line),line.split('|')[1])
返回格式化的数据
返回结果
在这个例子中,只有3个级别,但想法是相同的

构造此类代码的更好方法是什么

是否最好将所有闭包/内部函数放在父函数的开头,以避免与代码混淆


另外,我不想把这些函数放在类的级别上,因为它们实际上与类无关,而只与它们的父函数相关。

这些是普通函数,既不依赖于类或实例,也不依赖于调用函数的上下文,所以只需将它们放在模块的顶层即可

您的嵌套函数似乎不需要闭包,因此根本不需要嵌套。^--+1,我看不出您需要“嵌套”函数的任何原因,简单类方法或staticmethod就可以了。不要使代码过于复杂。如果函数是在函数中定义的,那么每次函数运行时都会重新定义它们。这会让你的函数变慢,没有什么好的理由。@Anzel,唯一的原因是这些内部函数实际上并没有连接到类,而只是连接到父函数。这意味着它们只被特定的函数所需要,而不是整个类所需要。@WhiteAngel,这就是
staticmethods
的作用所在。或者您甚至可以编写正常的函数来调用。这仍然不能解释为什么需要将它们“嵌套”到方法中,这只会损害可读性,而不会带来真正的好处