如何从外部访问函数内定义的变量?

时间:2013-11-27 09:44:57

标签: python

让我们考虑以下计划

def fib(n): 
    result = []
    a, b = 0, 1
    while b < n:
        result.append(b)    
        a, b = b, a+b
        c = result
    print c
return result

f100 = fib(100)
print result
#print c

如何从函数外部访问变量'c'?可能吗?我知道

print result

会给出相同的,但我想知道是否有任何方法可以访问函数外的'c'?

3 个答案:

答案 0 :(得分:1)

您可以将c声明为全局,但这通常不是您想要鼓励的模式。你是这样做的:

c = None

def fib(n):
    global c

    result = []
    a, b = 0, 1
    while b < n:
        result.append(b)    
        a, b = b, a+b
        c = result
    return result

f100 = fib(100)
print result
print c

您还可以将函数重组为具有__call__方法的类,该方法可以将内部值公开为属性,例如:

class fibber(object):
    def __init__(self):
        self.c = None

    def __call__(self, n):
        result = []
        a, b = 0, 1
        while b < n:
            result.append(b)    
            a, b = b, a+b
            self.c = result
        return result

fib = fibber()
f100 = fib(100)
print result
print fib.c

答案 1 :(得分:0)

局部变量仅存在于它们所定义的函数的上下文中。这就是使它们成为局部变量的原因。因此,一旦函数终止并返回其结果值,整个变量c就不再存在。

您当然可以将该变量的值保存在另一个变量中,例如: G。函数本身的一个领域:

fib.c = c

由于函数本身在终止后也会存​​在,因此它的字段也会存在,fib.c也是如此。

但我必须强调,这只是一个黑客攻击。通常,如果要访问函数外部的值,最好使保持该值的变量不是本地值。

答案 2 :(得分:0)

您可以声明一个全局变量:

def fib(n): 
    global c
    result = []
    a, b = 0, 1
    while b < n:
        result.append(b)    
        a, b = b, a+b
        c = result
    print c
    return result

result = fib(10)
print result
print c