Python代码/函数布局

2024-10-03 05:24:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在学习Python并试图找出构建代码的最佳方式。在

假设我有一个长函数,想把它分解成更小的函数。在C中,我将使它成为顶层的“静态”函数(因为这是函数的唯一级别)。我也可能会向前声明它,并将它放在使用它的现在被缩短的函数之后。在

现在是Python。在Python中,我可以选择创建一个嵌套函数。由于这个新的“内部”函数实际上只是为了可读性而被拆分的较大函数中的一部分,并且只被它使用,所以听起来它应该是一个嵌套函数,但是在父函数中包含这个函数会导致整个函数仍然很长,因为实际上没有代码从中移出!尤其是因为函数在被调用之前必须被完全编码,这意味着实际的短函数在这个伪长函数的末尾一直向下,这使得可读性很差!在

在这种情况下,什么是最佳实践?在


Tags: 函数代码声明编码方式静态情况级别
3条回答

所以我能理解的是你有一个很长的函数,比如:

def long_func(blah, foo, *args):
    ...
...
my_val = long_func(foo, blah, a, b, c)

你所做的是:

^{pr2}$

你还有很多选择,我列出两个:

  1. 把它变成一个班

    class SomeName(object):
        def __init__(self, blah, foo, *args):
            self.blah = blah
            self.foo = foo
            self.args = args
            self.result = None  # Might keep this for returning values or see (2)
    
        def short_func1(self):
            ...
        def short_func2(self):
            ...
        def run(self):  # name it as you like!
            self.short_func1()
            self.short_func2()
            return self.result  # (2) or return the last call, on you
    ...
    my_val = SomeName(foo, blah, a, b, c).run()
    
  2. 制作另一个模块并将short_funcs放入其中。就像flyx建议的那样。在

    def long_func(foo, blah, *args):
        from my_module import short_func1, short_func2
    
        short_func1(foo)
        short_func2(blah)
    

把较小的函数放在自己的文件中,然后导入主函数如何?你会得到类似于:

def main_func():
    from impl import a, b, c

    a()
    b()
    c()

我认为这种方法带来了很高的可读性:您可以看到较小的函数从何而来,以防您想查看它们,导入它们只是一行代码,而且main函数的实现是直接可见的。通过选择适当的文件名/位置,您还可以告诉用户这些函数不打算在main_func之外使用(反正Python中没有隐藏真正的信息)。在

顺便说一句:这个问题没有一个正确的答案。在

据我所知,Python中内部函数的主要优点是它们继承了封闭函数的范围。因此,如果您需要访问主函数作用域中的变量(例如参数或局部变量),则内部函数是最好的选择。否则,做你想做的和/或找到最可读的。在

编辑: 也可参见this answer。在

相关问题 更多 >