如何将变量的值作为方法,并在Python 2.7中使用该变量的方法?

时间:2016-12-22 23:50:10

标签: python python-2.7

我想让变量具有方法的值,所以当我运行变量时,我运行一个方法。这仅在我在方法之后创建变量时才有效。但是,我也希望在运行的同一方法中使用该变量。这只有在我在方法之前创建变量时才有效。

def test():
    testing()

def testing():
    print "hello"
    var

var = test()
var

因此,当我运行此程序时,它会告诉我"全球名称' var'没有定义。"如果我在方法之前创建变量,那么

var = test()

def test():
    testing()

def testing():
    print "hello"
    var

var
它告诉我"姓名'测试'未定义"

当我说方法时,我的意思是功能。当我说运行方法时,我指的是' var'

我要问的是如何将变量的值作为方法的名称,并将该变量用于另一种方法。

1 个答案:

答案 0 :(得分:2)

使用以下行:

var = test()

实际上将函数test分配给变量var。您正在分配表达式test()test后的括号表示您调用函数test,表达式是该调用的值结果那是您分配给var的内容。

因为此调用发生在创建var的赋值语句中,所以必须在var实际存在之前执行。因此,当test调用testing时,testing会尝试访问尚未存在的var。那是你的错误。

您需要做的只是将函数test直接分配给var,而不是调用它:

var = test

这使得var绑定到该函数。请注意,要使用此功能,您必须使用括号实际调用它,因此下一行需要var(),而不仅仅是var

请注意,test本身只是碰巧绑定到函数的普通变量。 def语句基本上只创建一个函数对象,将该函数对象的__name__值设置为"test",并同时绑定变量test

如果在您的真实用例中,您需要将一些参数传递给test并且您不想在致电var时了解这些参数,那么您反而想要做什么创建一个零参数包装函数,在调用它时调用test,如下所示:

def var():
    return test(some, arguments, here)

您可以将其作为函数中的本地定义来完成,不必在模块范围内单独创建。或者,您可以创建一个无名的lambda函数,您可以将其作为表达式而不是需要单独的定义:

var = lambda: test(some, arguments, here)

但您仍然需要使用括号来调用var,例如var();只要写var,就永远无法打电话。