我有这段代码:
# - - - - -my function inside another function- - - - - - - - - - - - - - - -
def Enhanced(Dofn,Membership,incenter,iteration, tolerance,h,m,clusters,q):
def Dofn(Membership,center,h,m,clusters,q):
#some processings.
center = V
Membership = U
ObjFunction = sum(O)
return Membership, center,ObjFunction
ObjFunction = []
center = incenter
for ii in range(0,iteration):
[Membership,center,ObjFunc] = Dofn(Membership,center,h,m,clusters,q)
ObjFunction.append(ObjFunc)
return Membership, center, iterN
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#Main program
# some parameters
Membership, center, iterN = Enhanced(Dofn,Membership,incenter,iteration, tolerance,h,m,clusters,q)
我想在函数中使用函数。在以前的问题中,我读到我可以像上面所做的那样调用函数。但它仍然给我错误:
name 'Dofn' is not defined
我向Enhaned介绍它的'Dofn'的颜色是不同的,似乎它被认为是功能。但在主程序中它是错误的!! 你能帮我解决一下我在函数内部使用函数的问题吗?并在主程序中调用它?
由于
答案 0 :(得分:1)
Dofn在主程序中未知。把它从参数列表中拿出来。
答案 1 :(得分:1)
def增强(Dofn,Membership,incenter,iteration,tolerance,h,m,clusters,q):
def Dofn(Membership,center,h,m,clusters,q):
#some processings.
center = 'V'
Membership = 'U'
ObjFunction = 'sum'
print " Hey !!! I am Dofn Function"
return Membership, center,ObjFunction
ObjFunction = []
center = incenter
for ii in range(0,iteration):
[Membership,center,ObjFunc] = Dofn(Membership,center,h,m,clusters,q)
ObjFunction.append(ObjFunc)
print " I am Enhanced Function"
return Membership, center, 'iterN'
会员资格,中心,iterN =增强(' x''鼠标' yyy' 4,' aaaaaa',& #39; b'' C'' DDD'' RRR&#39)
你在函数内部使用函数的方法是正确的(就像这样我们必须在python中使用函数内部函数)但是你传递的参数是错误的
您的错误:姓名' Dofn'未定义
这不是因为你的功能,而是因为你在主程序中传递错误的论点 在从主程序传递任何变量之前,您需要定义它
答案 2 :(得分:0)
你得到的名字' Dofn'没有定义"因为变量Dofn未在主程序中声明。事实上,如果你通过放置一个随机字符串或整数来修复那个部分,那么它会抱怨" name' Membership'未定义"。实际上,未定义调用Enhanced时所具有的所有变量。您必须在使用之前声明变量。
来到你想要做的事情,如果你想获得一个内部函数,你必须有一些如何从外部函数返回它,然后你可以将它用作其他函数的参数。 例如:
def returnInner():
print "In outer"
def inner():
print "In inner"
return inner
def useInner(func):
func()
useInner(returnInner())
输出:
In outer
In inner