使用嵌套 def 组织代码

Using nested def for organizing code

我一直将嵌套 def 语句作为 grouping/organizing 代码的一种方式,但在阅读了一些内容之后,我认为我在滥用它..

做这样的事情符合犹太洁食吗?

def generate_random_info():
    def random_name():
        return numpy.random.choice(['foo', 'bar'])

    def random_value():
        return numpy.random.rand()

    return {'name':random_name(), 'value':random_value()}

它本身没有任何问题。但是当你使用像这样的结构时你应该考虑一件事:random_namerandom_value 是函数,当你调用 generate_random_info() 时它们会不断被重新定义。现在对于那些特定的函数来说这可能不是问题,尤其是当你不会经常调用它时,但你应该考虑到这是可以避免的开销。

所以您应该将这些函数定义移到 generate_random_info 函数之外。或者,因为那些内部函数本身并没有做太多,你直接调用它们,内联它们:

def generate_random_info():
    return {
        'name': numpy.random.choice(['foo', 'bar']),
        'value': numpy.random.rand()
    }

除非您计划在整个单个函数中重复使用相同的代码块并且仅该函数,否则我会避免仅仅为了这样做而创建这些函数。我不是代码在计算层面上如何工作的专家,但我认为创建一个函数比简单地使用你现在拥有的那一行更密集,特别是如果你只打算使用那个函数一次。