如何在python中定义全局变量?

时间:2013-12-02 12:09:26

标签: python

我是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()

4 个答案:

答案 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置于函数外部。