Python 我应该在函数中写函数还是在全局框架中写它们?

Python 我应该在函数中写函数还是在全局框架中写它们?,python,function,nested-function,Python,Function,Nested Function,这不是一个复杂的问题,但我找不到明确的答案 例如,如果我想找出一系列数字中的素数: def count_prime(lst): """lst is a list of integers""" def isPrime(n): return all(n % div != 0 for div in range(2, int(n**0.5) + 1)) if n > 1 else False result = 0 for num in lst:

这不是一个复杂的问题,但我找不到明确的答案

例如,如果我想找出一系列数字中的素数:

def count_prime(lst):
    """lst is a list of integers"""

    def isPrime(n):
        return all(n % div != 0 for div in range(2, int(n**0.5) + 1)) if n > 1 else False

    result = 0
    for num in lst:
        if isPrime(num):
            result += 1

    return result
这看起来非常简单,但我将
isPrime(n)
放在主函数的内部

与之相比:

def isPrime(n):
    return all(n % div != 0 for div in range(2, int(n**0.5) + 1)) if n > 1 else False

def count_prime(lst):
    """lst is a list of integers"""

    result = 0
    for num in lst:
        if isPrime(num):
            result += 1

    return result

我的问题是:这有什么区别吗?哪种方法更可取?

我认为这两种方法都是有效的
iPrime
非常小,因此很容易嵌入。如果要重用函数,可以全局定义它。

@match我认为主要是问高阶函数,哪个函数返回新函数?与我的问题不太相似?如果你在多个地方使用它,而不仅仅是在一个函数中使用它,我会在全局范围内定义它。链接的问题展示了嵌套函数和顶级函数之间的最大区别,这也是使用它们的最大原因。局部函数可以使用外部函数中的局部变量。这意味着您可以使用相同的代码生成不同的“加法器”函数来添加不同的数字。但是你的问题更一般,除了闭包之外,还有什么理由使用嵌套函数吗?所以,也许它应该重新打开。或者你应该问一个更具体的问题,比如:即使我没有(link)中的闭包,使用嵌套函数是否有任何风格或可读性?或者:当嵌套函数和顶级函数具有相同的总体效果时,它们之间是否存在性能差异?或者:在创建和调用此函数的嵌套版本和顶级版本时,实现(如果重要的话,在CPython中)有何不同?如果你知道你感兴趣的是哪一个,它们似乎都不太可能被关闭,但当然你要先自己搜索DUP。@internet\u用户,但我不知道,直到我意识到我将来写了什么,对吗?这里的“如果你想重用”非常重要,但是我认为函数的大小是一个模糊的问题,这很少是关键问题,你已经把它放在第一位了。我认为嵌入函数的长度也是一个问题。如果嵌入函数很长,而嵌入函数本身很短,则可能会降低代码的可读性。