首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python:在函数内部定义函数

Python:在函数内部定义函数
EN

Stack Overflow用户
提问于 2013-11-06 23:32:10
回答 5查看 1.2K关注 0票数 1

我正在尝试编写一个可以定义函数的函数。

我试过这个:

代码语言:javascript
复制
def function_writer():
    print "I am a function writer"  

    def new_function():
        print "I am a new function"
             pass
    pass

function_writer()
new_function()

但是,我的调试器抱怨没有定义new_function,因此这显然不是实现它的方法。

有人知道怎么做吗?

谢谢。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-11-06 23:39:05

代码语言:javascript
复制
def function_writer():
    print "I am a function writer"  

    def new_function():
        print "I am a new function"

    return new_function

fn_dynamic = function_writer()
fn_dynamic() #call new_function

也许你在找什么?(这几乎是装潢师所做的.除非它们修改传递的方法)

另一种解决办法(这不是一个好建议,而是回答问题)

代码语言:javascript
复制
def function_writer():
    print "I am a function writer"      
    def new_function():
        print "I am a new function"
    globals()['new_function'] = new_function

function_writer()
new_function()

这种类型的功能通常在python中被避免,除非您有一个非常有说服力的理由来解释这绝对是您所需要的。

票数 3
EN

Stack Overflow用户

发布于 2013-11-06 23:38:24

您的代码失败的原因与以下代码抱怨未定义i的原因完全相同:

代码语言:javascript
复制
def integer_writer():
    i = 0

integer_writer()
i

i是函数integer_writer中的局部变量,new_function是函数function_writer中的局部变量。

你可以这样做:

代码语言:javascript
复制
def function_writer():
    print "I am a function writer"  

    def new_function():
        print "I am a new function"

    return new_function

new_function = function_writer()
new_function()

在这种情况下,似乎没有太大的意义(就像通常定义一个总是返回0的函数一样),但是如果function_writer要接受一些参数,如果在它返回的函数中使用了这些参数,那么您将处于业务状态。

票数 5
EN

Stack Overflow用户

发布于 2013-11-06 23:37:08

当然,这会导致错误,因为new_function仅限于function_writer作用域。

代码语言:javascript
复制
def function_writer():
    print "I am a function writer"  

    def new_function():
        print "I am a new function"
        pass

    return new_function

a = function_writer()
#output: "I am a function writer"

a()
#output: "I am a new function"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19825097

复制
相关文章

相似问题

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