使用嵌套 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_name
和 random_value
是函数,当你调用 generate_random_info()
时它们会不断被重新定义。现在对于那些特定的函数来说这可能不是问题,尤其是当你不会经常调用它时,但你应该考虑到这是可以避免的开销。
所以您应该将这些函数定义移到 generate_random_info
函数之外。或者,因为那些内部函数本身并没有做太多,你直接调用它们,内联它们:
def generate_random_info():
return {
'name': numpy.random.choice(['foo', 'bar']),
'value': numpy.random.rand()
}
除非您计划在整个单个函数中重复使用相同的代码块并且仅该函数,否则我会避免仅仅为了这样做而创建这些函数。我不是代码在计算层面上如何工作的专家,但我认为创建一个函数比简单地使用你现在拥有的那一行更密集,特别是如果你只打算使用那个函数一次。
我一直将嵌套 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_name
和 random_value
是函数,当你调用 generate_random_info()
时它们会不断被重新定义。现在对于那些特定的函数来说这可能不是问题,尤其是当你不会经常调用它时,但你应该考虑到这是可以避免的开销。
所以您应该将这些函数定义移到 generate_random_info
函数之外。或者,因为那些内部函数本身并没有做太多,你直接调用它们,内联它们:
def generate_random_info():
return {
'name': numpy.random.choice(['foo', 'bar']),
'value': numpy.random.rand()
}
除非您计划在整个单个函数中重复使用相同的代码块并且仅该函数,否则我会避免仅仅为了这样做而创建这些函数。我不是代码在计算层面上如何工作的专家,但我认为创建一个函数比简单地使用你现在拥有的那一行更密集,特别是如果你只打算使用那个函数一次。