如何在python中使用另一个函数内的函数?

时间:2016-05-18 16:21:00

标签: python

我有这段代码:

    #  - - - - -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'的颜色是不同的,似乎它被认为是功能。但在主程序中它是错误的!! 你能帮我解决一下我在函数内部使用函数的问题吗?并在主程序中调用它?

由于

3 个答案:

答案 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