【发布时间】:2011-06-17 10:19:36
【问题描述】:
假设只有function B 需要function A,是否应该在B 中定义A?
简单的例子。两种方法,一种从另一种调用:
def method_a(arg):
some_data = method_b(arg)
def method_b(arg):
return some_data
在 Python 中,我们可以在另一个 def 中声明 def。所以,如果method_b 是必需的并且只能从method_a 调用,我应该在method_a 中声明method_b 吗?像这样:
def method_a(arg):
def method_b(arg):
return some_data
some_data = method_b(arg)
或者我应该避免这样做吗?
【问题讨论】:
-
你不需要在另一个函数中定义一个函数,除非你正在做一些非常时髦的事情。但是,请详细说明您要做什么,以便我们提供更有帮助的答案
-
您是否意识到第二个示例不同,因为您没有调用
method_b? (@inspector:严格来说,你确实需要,但是当你进入一些函数式编程,特别是闭包时,它非常有用)。 -
@delnan:我认为您的意思是“严格来说,您不需要,但是......”
-
正如@delnan 提到的,这在闭包的情况下很常见,所以我不认为它有资格作为时髦;但是,除非需要闭包(我猜在这种情况下不需要闭包),否则将一个函数放入另一个函数似乎没有必要、高效或整洁。除非你需要闭包,否则我会坚持第一种模式。
-
内部函数的用例在链接中总结得很精彩:https://realpython.com/blog/python/inner-functions-what-are-they-good-for/。如果您的使用不适合任何情况,最好避免使用。
标签: python coding-style nested-function