首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python中的嵌套函数

Python中的嵌套函数
EN

Stack Overflow用户
提问于 2009-10-19 14:40:52
回答 4查看 93.8K关注 0票数 90

使用这样的Python代码,我们可以获得什么好处或暗示:

class some_class(parent_class):
    def doOp(self, x, y):
        def add(x, y):
            return x + y
        return add(x, y)

我在一个开源项目中发现了这一点,它在嵌套函数内做一些有用的事情,但除了调用它之外什么也不做。(实际代码可以在here中找到。)为什么有人会这样编码呢?在嵌套函数中编写代码而不是在外部常规函数中编写代码是否有一些好处或副作用?

EN

回答 4

Stack Overflow用户

发布于 2009-10-19 15:03:11

除了函数生成器,内部函数的创建几乎就是函数生成器的定义,我创建嵌套函数的原因是为了提高可读性。如果我有一个仅由外部函数调用的小函数,那么我会内联定义,这样您就不必跳过来确定该函数正在做什么。如果以后需要重用函数,我总是可以将内部方法移到封装方法之外。

玩具示例:

import sys

def Foo():
    def e(s):
        sys.stderr.write('ERROR: ')
        sys.stderr.write(s)
        sys.stderr.write('\n')
    e('I regret to inform you')
    e('that a shameful thing has happened.')
    e('Thus, I must issue this desultory message')
    e('across numerous lines.')
Foo()
票数 61
EN

Stack Overflow用户

发布于 2012-11-15 20:32:06

使用内部方法的一个潜在好处是,它允许您使用外部方法局部变量,而无需将它们作为参数传递。

def helper(feature, resultBuffer):
  resultBuffer.print(feature)
  resultBuffer.printLine()
  resultBuffer.flush()

def save(item, resultBuffer):

  helper(item.description, resultBuffer)
  helper(item.size, resultBuffer)
  helper(item.type, resultBuffer)

可以像下面这样写,可以说读起来更好

def save(item, resultBuffer):

  def helper(feature):
    resultBuffer.print(feature)
    resultBuffer.printLine()
    resultBuffer.flush()

  helper(item.description)
  helper(item.size)
  helper(item.type)
票数 27
EN

Stack Overflow用户

发布于 2009-10-19 14:57:25

局部方法背后的思想类似于局部变量:不要污染更大的名称空间。显然,这种好处是有限的,因为大多数语言都不直接提供这样的功能。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1589058

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档