假设我有一个非常长的功能,通常我想将其分解为较小的功能以提高可读性。
class A:
def long_function(self):
self.helper1()
self.helper2()
...
return
def helper1(self):
#hardwork
...
然后我发现python函数可以在其他函数中声明,这有助于组织代码,因为它限制了辅助函数的范围,如果不需要也可以取出self
。所以:
class A:
def long_function(self):
helper1()
helper2()
...
return
def helper1():
#hardwork
def helper2():
#more hardwork
但是,python发送给我一个UnboundLocalError
,说在分配之前引用了'helper1'
。我知道我可以在他们的通话之上定义它们,但这会破坏易读性的所有目的。我还可以继续使用私有方法填充我的类,但我认为这是次优的。
你有任何吸烟吗?
答案 0 :(得分:1)
功能从上到下执行。 def
是一个可执行语句,与任何其他语句一样,并在执行时执行。如果在函数末尾写def helper1
,则在函数结束前不会定义helper1
。如果直到最后才定义它,则不能在开头使用它。
如果您想将方法分解为较小的方法,请按照第一个示例中的方法进行操作。这没什么不理想的。您可以使用一个前导下划线(.e.g,_helper1
)来命名这些辅助方法,以提醒用户他们不属于公共API。