我正在尝试编写一个可以定义函数的函数。
我试过了:
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,所以这显然不是这样做的。
有谁知道怎么做?
感谢。
答案 0 :(得分:4)
完全的代码失败的原因与以下代码抱怨未定义i
的原因相同:
def integer_writer():
i = 0
integer_writer()
i
i
是函数integer_writer
中的局部变量,new_function
是函数function_writer
中的局部变量。
您可以执行以下操作:
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
要采取一些参数,如果这些参数在它返回的函数中使用,那么你就可以开展业务了。
答案 1 :(得分:2)
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
也许你在寻找什么? (这几乎是装饰者所做的......除了他们修改传入的方法)
另一个解决方案(这不是一个好建议,但回答了问题)
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中通常会避免使用这种类型的功能,除非你有一个非常严格的理由说明为什么这绝对是你需要的......
答案 2 :(得分:1)
当然会导致错误,因为new_function
仅限于function_writer
范围。
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"
答案 3 :(得分:1)
这取决于你打算用它做什么。
您可以在函数内调用它。
如果内部函数需要访问外部函数的局部变量,则可能就是这种情况。
您可以将其退回以便从外部进行调用。
这很常见。 G。在装饰者的情况下。
答案 4 :(得分:1)
如果要创建函数工厂,只需返回创建的函数!
def factory():
def new_func():
print 'Hello!'
return new_func
f = factory()
f()