我想让变量具有方法的值,所以当我运行变量时,我运行一个方法。这仅在我在方法之后创建变量时才有效。但是,我也希望在运行的同一方法中使用该变量。这只有在我在方法之前创建变量时才有效。
def test():
testing()
def testing():
print "hello"
var
var = test()
var
因此,当我运行此程序时,它会告诉我"全球名称' var'没有定义。"如果我在方法之前创建变量,那么
var = test()
def test():
testing()
def testing():
print "hello"
var
var
它告诉我"姓名'测试'未定义"
当我说方法时,我的意思是功能。当我说运行方法时,我指的是' var'
我要问的是如何将变量的值作为方法的名称,并将该变量用于另一种方法。
答案 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
,就永远无法打电话。