让我们考虑以下计划
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'?
答案 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