Python如何获得调用者scrope

时间:2016-01-05 13:24:31

标签: python scope

def call(arg):
    return a+arg

def caller():
    a=1         
    call(2)

caller()

它返回:全局名称' a'未定义

3 个答案:

答案 0 :(得分:0)

您需要在方法定义之外定义a。在上面的代码中,变量a是方法caller的本地代码,通过在方法定义之外定义它,为它提供全局范围。

你得到的错误是因为python正在寻找具有全局范围的东西,因此它说全局名称'a'没有被定义。

下面的代码适用于python小提琴。

def call(arg):
    return a+arg

def caller():
    print call(2)

a=1        

caller()

答案 1 :(得分:0)

变量a在函数caller中定义。因此,访问a函数中的caller可以正常工作。在函数call中,未定义变量a,因此Python引发了异常。

您可以通过以下两种方法之一解决此问题:

  1. a函数(首选)或
  2. 中将arg作为参数与call一起传递
  3. a定义为全局变量。 (不是首选)因为全局变量被认为是一种不好的做法。
  4. 尝试重新定义功能call function,如

    def call(a, arg):
        return a + arg
    

答案 2 :(得分:0)

这是一个不好的例子。它看起来更像是:

def cycle():
     for item in {'a':1,'b':2,'c':3}:
          do('a')

def do(arg):
    if item.get(arg):
        pass

我不能使用类,因为我使用的框架不支持继承。