我是Python的新手。如果可以在Python中定义一个全局变量,那就是JUst。
我有这个python代码来计算访问Fib(2)的总次数。但是,在调用时,count会打印0。
import sys
def fib(n):
"""Takes input a natural number n > 0.
Returns n! """
global count
count = 0
if n == 1 or n == 0:
return 1
else:
if n == 2:
print 'encountered here::: '
count += 1
return fib(n-1) + fib(n-2)
def main():
x = int(raw_input('Enter a natural number > 0 :'))
print 'Fibonacci(%d) = %d' % (x, fib(x))
print 'Count =', count
if 1:
main()
答案 0 :(得分:3)
在任何函数之外的模块中定义的变量被视为global variable
。要修改函数内部的global variable
,必须在函数内部写global variableName
。
但是,您执行此操作,该变量仅在函数中定义 ,它还必须在函数外部声明为全局变量。如果没有,它将在您的函数本地,尽管它前面有global
。
TL; DR同时在函数之外声明变量。
通过在执行所述函数的函数和中编写global variableName
,确实使变量成为global variable
;如果不是,当你试图打印它时,你会得到NameError
。
然而,你获得0的原因是因为每当你调用你的函数时,你都会将count
初始化为0.尽管如此,解决方案仍然存在。
答案 1 :(得分:2)
将count = 0
移到fib(n)
功能之外。您只需要在函数内部将其声明为global count
,而初始化应该在外部。你正在做的是每次调用函数时你都用0重新初始化它。
import sys
count = 0
def fib(n):
"""Takes input a natural number n > 0.
Returns n! """
global count
if n == 1 or n == 0:
return 1
else:
if n == 2:
print 'encountered here::: '
count += 1
return fib(n-1) + fib(n-2)
def main():
x = int(raw_input('Enter a natural number > 0 :'))
print 'Fibonacci(%d) = %d' % (x, fib(x))
print 'Count =', count
if 1:
main()
虽然,你应该避免使用全局变量。
答案 2 :(得分:0)
global foo
foo = [1,2,3]
现在foo
可以在程序的任何地方使用
答案 3 :(得分:0)
将count = 0置于函数外部。